1 line
57 KiB
JavaScript
1 line
57 KiB
JavaScript
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;e<t;e++)for(n=workspace.sex(game.history.parents[e]),o=0;o<n.length;o++)bases.base[n[o]].hasOwnProperty("hidden")?game.hiddenElements.push(n[o]):-1===game.progress.indexOf(n[o])&&-1===game.prime.indexOf(n[o])&&(game.progress.push(n[o]),game.checkIfFinal(n[o])||game.progressWithoutFinal.push(n[o]));game.changeProgressCounter()},resetProgress:function(){game.saveOldProgress(game.history.parents,game.history.date),achievements.reset(),storage.resetHistory(),game.initProgress(),update.resetHistory(),workspace.clearSpecified(workspace.$el.find(".element")),library.reload(),$(document).trigger("resetProgress")},onChildCreated:function(){$(document).on("childCreated",(function(e,t,n){var o,a;for(o=0;o<t.length;o++)game.checkIfNotAlreadyDone(n)&&(a=(new Date).getTime(),game.history.parents.push(n),game.history.date.push(a),$(document).trigger("updateHistory",[n,a]),bases.base[t[o]].hasOwnProperty("hidden")&&($(document).trigger("hiddenElementCreated",[t[o]]),-1===game.hiddenElements.indexOf(t[o])&&game.hiddenElements.push(t[o]))),-1!==game.progress.indexOf(t[o])||-1!==game.prime.indexOf(t[o])||bases.base[t[o]].hasOwnProperty("hidden")||(game.progress.push(t[o]),game.checkIfFinal(t[o])?game.finalElements.push(t[o]):game.progressWithoutFinal.push(t[o]),game.changeProgressCounter(),$(document).trigger("newChildCreated",[t[o]]))}))},changeProgressCounter:function(){var e=game.progress.length+game.prime.length+"/"+game.maxProgress;document.getElementById("progress").textContent=e},checkStructure:function(){var e;for(e in bases.base){if(bases.base[e].hasOwnProperty("platforms"))-1===bases.base[e].platforms.join(",").indexOf(game.platform)&&(delete bases.base[e],delete bases.names[e]);bases.base.hasOwnProperty(e)&&(bases.base[e].hasOwnProperty("prime")&&game.prime.push(parseInt(e,10)),bases.base[e].hasOwnProperty("hidden")||game.maxProgress++)}},getFinalElements:function(){var e,t;for(e=0,t=game.progress.length;e<t;e++)game.checkIfFinal(game.progress[e])&&-1===game.finalElements.indexOf(game.progress[e])&&game.finalElements.push(game.progress[e])},checkIfFinal:function(e){var t,n,o,a=Object.keys(bases.base);for(t=0,n=a.length;t<n;t++)if(bases.base[a[t]].hasOwnProperty("parents"))for(o=0;o<bases.base[a[t]].parents.length;o++)if(-1!==bases.base[a[t]].parents[o].indexOf(e))return!1;return!0},checkMaxConnections:function(e){var t;for(t in game.maxConnections=0,bases.base)bases.base[t].hasOwnProperty("parents")&&(game.maxConnections+=bases.base[t].parents.length)},checkIfNotAlreadyDone:function(e){for(var t=[Math.min(e[0],e[1]),Math.max(e[0],e[1])],n=0,o=game.history.parents.length;n<o;++n)if(Math.min(game.history.parents[n][0],game.history.parents[n][1])===t[0]&&Math.max(game.history.parents[n][0],game.history.parents[n][1])===t[1])return!1;return!0},initEvents:function(){void 0===(document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled)&&$("#toggleFullscreen").hide(),$("#toggleFullscreen").on("click",(function(){game.toggleFullScreen(this)}))},toggleFullScreen:function(e){var t=window.document,n=t.documentElement,o=n.requestFullscreen||n.mozRequestFullScreen||n.webkitRequestFullScreen||n.webkitRequestFullscreen||null,a=t.exitFullscreen||t.mozCancelFullScreen||t.webkitExitFullscreen||t.msExitFullscreen||null;t.fullscreenElement||t.mozFullScreenElement||t.webkitFullscreenElement?a.call(t):o.call(n)},saveOldProgress:function(e,t){var n=window.storage.getOldHistory();Array.prototype.push.apply(n.parents,e),Array.prototype.push.apply(n.date,t);var o=1e3;n.parents.length>o&&(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<n;t++)Array.prototype.push.apply(i,workspace.sex(e.parents[t]));for(t=e.parents.length-1;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<o.length;a++)i.splice(i.indexOf(o[a]),1);e.parents.splice(t,1),e.date.splice(t,1)}return e},reportError:function(e,t,n,o,a){var i={msg:e,url:t,line:n,col:o||"",stack:a&&a.stack?a.stack:"",userAgent:navigator.userAgent,time:(new Date).getTime(),resolution:screen.width+"x"+screen.height};return $.ajax({type:"POST",url:"php/errorReporting.php",data:{data:JSON.stringify(i)}}),!1},checkOnline:function(){$.ajax({type:"GET",url:"favicon.ico",cache:!1,success:function(e){game.isOnline=!0,$(document).trigger("online")},error:function(e,t,n){game.isOnline=!1,$(document).trigger("offline")}})}},bases={imagesLoaded:!1,loaded:!1,load:function(){bases.initEvents(),$.when($.ajax({url:"resources/base.580.json",type:"GET",dataType:"json",success:function(e){bases.base=e},xhrFields:{onprogress:function(e){e.lengthComputable&&$(document).trigger("baseLoadingProgress",[parseInt(e.loaded/e.total*100,10)])}}}),$.ajax({url:localization.getURL("names.580.json"),type:"GET",dataType:"json",success:function(e){bases.names=e},xhrFields:{onprogress:function(e){e.lengthComputable&&$(document).trigger("namesLoadingProgress",[parseInt(e.loaded/e.total*100,10)])}}})).done((function(){bases.loaded=!0,$(document).trigger("basesLoaded")})).fail((function(e){console.log("fail",e)})),$.getJSON("resources/images.580.json",(function(e){bases.images=e,bases.imagesLoaded=!0,$(document).trigger("imagesLoaded")}))},initEvents:function(){$(document).on("languageChanged",(function(){$.getJSON(localization.getURL("names.580.json"),(function(e){bases.names=e,library.reload(),$(document).trigger("namesLoaded")}))}))}},loadingScreen={transition:{PATH_TIME:.5,OPACITY_DELAY:.1,OPACITY_TIME:.75,PROGRESS_TIME:.3},progress:0,shownProgress:0,progressList:{basesLoaded:{value:20},namesLoadingProgress:{value:20,incremental:!0,current:0},baseLoadingProgress:{value:20,incremental:!0,current:0},GAPILoaded:{value:25},notLoggedIn:{value:25},GAPIclientLoaded:{value:10},historySynchronized:{value:15},libraryShowed:{value:10},offline:{value:25}},list:[],init:function(){loadingScreen.initEvents(),loadingScreen.el=document.getElementById("loadingScreen"),loadingScreen.$el=$(loadingScreen.el),loadingScreen.playButton=loadingScreen.el.getElementsByClassName("playButton")[0],loadingScreen.progressBar=loadingScreen.el.getElementsByClassName("progressBar")[0],loadingScreen.initPath(),loadingScreen.messages.init(),loadingScreen.changeProgress()},initPath:function(){if(loadingScreen.path=document.querySelector(".playButton path"),loadingScreen.path.style.strokeWidth=12,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/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='PL<span style="margin-right: -3px;">A</span>Y',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;i<loadingScreen.messages.list[t].length;i++)-1===loadingScreen.messages.shown.indexOf(loadingScreen.messages.list[t][i].id)&&n.push(loadingScreen.messages.list[t][i]);if(1===n.length)e=n[0].id;else if(loadingScreen.messages.list[t][0].hasOwnProperty("P"))e=loadingScreen.messages.probabilityChoose(t);else{e=n[Math.floor(Math.random()*n.length)].id}return t!==loadingScreen.messages.list.length-1&&loadingScreen.messages.save(e),e},save:function(e){loadingScreen.messages.shown.push(e),storage.updateLoadingMessages(loadingScreen.messages.shown)},getLevel:function(){for(var e=0;e<loadingScreen.messages.list.length;e++)for(var t=0;t<loadingScreen.messages.list[e].length;t++)if(-1===loadingScreen.messages.shown.indexOf(loadingScreen.messages.list[e][t].id))return e},probabilityChoose:function(e){for(var t=0,n=0,o=loadingScreen.messages.list[e].length;n<o;n++)t+=loadingScreen.messages.list[e][n].P;var a=Math.floor(Math.random()*t),i=-1;for(n=0;n<=a;)i++,n+=loadingScreen.messages.list[e][i].P;return loadingScreen.messages.list[e][i].id}}},settings={def:{checkAlreadyCombined:!1,markFinalElements:!0,hideFinalElements:!1,turnOffNotifications:!1,saveElementsPositions:!0,hideElementsNames:!1,nightMode:!1},init:function(){var e=window.storage.getSettings();window.settings.data={},$.extend(window.settings.data,window.settings.def,e)},initContent:function(){settings.offContent(),$("#settingsCheckAlreadyCombined").prop("checked",window.settings.data.checkAlreadyCombined),$("#settingsMarkFinalElements").prop("checked",window.settings.data.markFinalElements),$("#settingsHideFinalElements").prop("checked",window.settings.data.hideFinalElements),$("#settingsTurnOffNotifications").prop("checked",window.settings.data.turnOffNotifications),$("#settingsTurnOffElementsPositions").prop("checked",!window.settings.data.saveElementsPositions),$("#settingsHideElementNames").prop("checked",window.settings.data.hideElementsNames),$("#settingsNightMode").prop("checked",window.settings.data.nightMode),$("#settingsResetProgress").on("click",(function(e){e.preventDefault(),e.stopPropagation(),confirm(window.localization.get("settings-resetProgressConfirm"))&&window.game.resetProgress()})),$("#settingsDisconnect").on("mousedown",(function(e){e.preventDefault(),e.stopPropagation(),confirm(window.localization.get("settings-disconnectConfirm"))&&window.GoogleAPI.disconnect()})),$(document).on("change","#settingsCheckAlreadyCombined",(function(){window.settings.data.checkAlreadyCombined=this.checked,$(document).trigger("updateSettings")})),$(document).on("change","#settingsMarkFinalElements",(function(){window.settings.data.markFinalElements=this.checked,window.library.markFinalElements(this.checked),window.settings.data.markFinalElements?workspace.$el.find(".element").each((function(e,t){-1!==game.finalElements.indexOf(parseInt(t.getAttribute("data-elementId"),10))&&(t.className+=" finalElement")})):workspace.$el.find(".finalElement").removeClass("finalElement"),$(document).trigger("updateSettings")})),$(document).on("change","#settingsHideFinalElements",(function(){window.settings.data.hideFinalElements=this.checked,window.settings.data.hideFinalElements?window.library.refresh():window.library.reload(),$(document).trigger("updateSettings")})),$(document).on("change","#settingsTurnOffNotifications",(function(){window.settings.data.turnOffNotifications=this.checked,$(document).trigger("updateSettings")})),$(document).on("change","#settingsTurnOffElementsPositions",(function(){window.settings.data.saveElementsPositions=!this.checked,$(document).trigger("updateSettings")})),$(document).on("change","#settingsHideElementNames",(function(){window.settings.data.hideElementsNames=this.checked,workspace.elementsNamesVisibility(),$(document).trigger("updateSettings")})),$(document).on("change","#settingsNightMode",(function(){window.settings.data.nightMode=this.checked,settings.changeNightMode(),$(document).trigger("updateSettings")})),$(document).on("change","#settingsLanguage",(function(){window.settings.data.language=this.options[this.selectedIndex].value,$(document).trigger("updateSettings"),window.localization.changeLanguage(this.options[this.selectedIndex].value)}));var e=function(){var e=$("#loggedInAs");e.find("span")[0].textContent=GoogleAPI.player.name,e.show()};$(document).on("playerLoaded",e),$(document).on("loggedOut",(function(){$("#loggedInAs").hide()})),void 0!==GoogleAPI.player.name&&""!==GoogleAPI.player.name&&e(),$("#settingsLanguage").on("focus",(function(){"undefined"!=typeof iscrollMenu&&iscrollMenu.disable()})),$("#settingsLanguage").on("change blur click",(function(){"undefined"!=typeof iscrollMenu&&iscrollMenu.enable()}))},offContent:function(){$("#settingsResetProgress").off("click"),$("#settingsDisconnect").off("mousedown"),$("#settingsLanguage").off("focus"),$("#settingsLanguage").off("change blur click"),$(document).off("change","#settingsCheckAlreadyCombined"),$(document).off("change","#settingsMarkFinalElements"),$(document).off("change","#settingsHideFinalElements"),$(document).off("change","#settingsTurnOffNotifications"),$(document).off("change","#settingsTurnOffElementsPositions"),$(document).off("change","#settingsHideElementNames"),$(document).off("change","#settingsNightMode"),$(document).off("change","#settingsLanguage"),$(document).off("playerLoaded")},changeNightMode:function(){window.settings.data.nightMode?document.body.className+=" nightMode":document.body.className=document.body.className.replace(/nightMode/g,"")}},localization={data:{},language:"en",languages:{en:"English",es:"Español",pt:"Português",fr:"Français",de:"Deutsch",pl:"Polski",it:"Italiano",nl:"Nederlands",no:"Norsk",sv:"Svenska"},characters:{en:"abcdefghijklmnopqrstuvwxyz",pl:"aąbcćdeęfghijklłmnńoópqrsśtuvwxyzźż",de:"aäbcdefghijklmnoöpqrsßtuüvwxyz",fr:"aàâæäbcçdeéèêëfghiîïjklmnoôœöpqrstuùûüvwxyÿz",es:"aábcdeéfghiíjklmnñoópqrstuúüvwxyz",it:"aàbcdeèéfghiìjklmnoòpqrstuùvwxyz",nl:"aäbcdeëèéfghiïijjklmnoöpqrstuüvwxyz",no:"aåæbcdefghijklmnoøpqrstuvwxyz",pt:"aáâãábcçdeéêfghiíjklmnoóôõpqrstuúvwxyz",sv:"aäåbcdefghijklmnoöpqrstuvwxyz"},loaded:!1,init:function(){settings.data.language&&localization.setLanguage(settings.data.language),localization.loadResources()},checkLanguage:function(){var e=window.location.hostname,t=e.split(".")[e.split(".").length-1];for(var n in localization.domainMap)if(-1!==localization.domainMap[n].indexOf(t)){localization.setLanguage(n);break}},changeLanguage:function(e){e!==localization.language&&(localization.setLanguage(e),localization.loadResources(),$(document).trigger("languageChanged"))},setLanguage:function(e){localization.languages.hasOwnProperty(e)||(e="en"),localization.language=e,localization.setLanguageFamily(),localization.setRegex()},setRegex:function(){localization.regex=new RegExp("[^"+localization.characters[localization.languageFamily]+" ]","ig")},setLanguageFamily:function(){localization.languageFamily=localization.language.split("-")},loadResources:function(){$.getJSON(localization.getURL("languagePack.580.json"),(function(e){localization.data=e,localization.loaded=!0,$(document).trigger("languagePackLoaded")}))},get:function(e){var t=e.split("-");return localization.data.hasOwnProperty(t[0])&&localization.data[t[0]].hasOwnProperty(t[1])?localization.data[t[0]][t[1]]:""},getURL:function(e){return"resources/"+localization.language+"/"+e},compareLetter:function(e,t){if(e===t)return 0;var n=localization.characters[localization.language].indexOf(e.toLowerCase()),o=localization.characters[localization.language].indexOf(t.toLowerCase());return n<0||o<0||n===o?0:n<o?-1:1},compare:function(e,t){e=e.replace(localization.regex,""),t=t.replace(localization.regex,"");for(var n,o=Math.min(e.length,t.length),a=0;a<o;){if(0!==(n=localization.compareLetter(e[a],t[a])))return n;a++}return e.length<t.length?-1:e.length>t.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]<n)&&(loading.modificationDates[e]=n,storage.updateModificationDates())}},convertToMilisecondsDate:function(e){return e=(e=(e=(e=e.replace("/"," ")).replace("/"," ")).replace("-"," ")).replace("-"," "),new Date(Date.parse(e)).getTime()}},GoogleAPI={player:{id:-1,name:""},apiKey:"AIzaSyBWa6dXP4geUkBPMGx7uEDrUEYqO_C64IA",clientId:"313610222031",init:function(){$(document).on("GAPILoaded",(function(){gapi.client.setApiKey(GoogleAPI.apiKey),GoogleAPI.checked||window.setTimeout((function(){GoogleAPI.checkLogin(!0)}),1)})),GoogleAPI.logged=!1,GoogleAPI.checked=!1,GoogleAPI.accessToken="",GoogleAPI.$login=$("#login"),GoogleAPI.initEvents()},initEvents:function(){GoogleAPI.$login.on("click",(function(e){GoogleAPI.logged||GoogleAPI.checkLogin(!1)})),$(document).on("loggedIn",(function(){GoogleAPI.$login.hide()})),$(document).on("loggedOut",(function(){GoogleAPI.logged=!1,GoogleAPI.player={},GoogleAPI.accessToken=null,storage.setAuthUser(-1),GoogleAPI.$login.show()})),$(document).on("languagePackLoaded",(function(){var e=GoogleAPI.logged?localization.get("login-logout"):localization.get("login-login");GoogleAPI.$login.html(e)})),$(document).on("online",(function(){GoogleAPI.$login.show()})),$(document).on("offline",(function(){GoogleAPI.$login.hide()})),$(document).on("unauthorized",(function(){GoogleAPI.checkLogin(!0)}))},checkLogin:function(e){gapi.auth.authorize({client_id:GoogleAPI.clientId,scope:"https://www.googleapis.com/auth/games https://www.googleapis.com/auth/appstate",immediate:e,authuser:storage.getAuthUser(),apppackagename:"com.sometimeswefly.littlealchemy"},GoogleAPI.handleAuth)},handleAuth:function(e){GoogleAPI.checked=!0,!e||e.error||GoogleAPI.logged?GoogleAPI.logged?$(document).trigger("loggedOut"):$(document).trigger("notLoggedIn"):(GoogleAPI.logged=!0,GoogleAPI.accessToken=e.access_token,storage.setAuthUser(e.authuser),GoogleAPI.loadClient(),$(document).trigger("loggedIn"))},loadClient:function(){gapi.client.load("games","v1",(function(e){GoogleAPI.loadPlayer(),$(document).trigger("GAPIclientLoaded")}))},loadPlayer:function(){gapi.client.games.players.get({playerId:"me"}).execute((function(e){e.error||(GoogleAPI.player.id=e.playerId,GoogleAPI.player.name=e.displayName,$(document).trigger("playerLoaded"))}))},disconnect:function(){var e="https://accounts.google.com/o/oauth2/revoke?token="+GoogleAPI.accessToken;$.ajax({type:"GET",url:e,async:!1,contentType:"application/json",dataType:"jsonp",success:function(){$(document).trigger("loggedOut")},error:function(e){}})}},gestures={startEvents:["mousedown","touchstart","pointerdown","MSPointerDown"],endEvents:{mouseup:"mousedown",touchend:"touchstart",pointerup:"pointerdown",MSPointerUp:"MSPointerDown"},events:{mousedown:["mousemove","mouseup"],touchstart:["touchmove","touchend"],pointerdown:["pointermove","pointerup"],MSPointerDown:["MSPointerMove","MSPointerUp"]},init:function(){for(var e=0;e<gestures.startEvents.length;e++)document.addEventListener(gestures.startEvents[e],(function(e){gestures.longPress.down(e)})),document.addEventListener(gestures.events[gestures.startEvents[e]][1],(function(e){gestures.longPress.up(e)}))},longPress:{LONGPRESS_TIME:800,WIGGLE_THRESHOLD:5,target:null,initPosition:{x:-1,y:-1},down:function(e){clearTimeout(gestures.longPress.timer),document.addEventListener(gestures.events[e.type][0],gestures.longPress.move),e="touchstart"===e.type?e.changedTouches[0]:e,gestures.longPress.initPosition={x:e.pageX,y:e.pageY},gestures.longPress.target=e.target,gestures.longPress.timer=setTimeout((function(){var t=document.createEvent("Event");t.initEvent("gesturelongpress",!0,!0),e.target.dispatchEvent(t)}),gestures.longPress.LONGPRESS_TIME)},move:function(e){if(-1!==gestures.longPress.initPosition.x&&-1!==gestures.longPress.initPosition.y){var t=e.type;e="touchmove"===e.type?e.changedTouches[0]:e;var n=gestures.longPress.initPosition,o=Math.sqrt((n.x-e.pageX)*(n.x-e.pageX)+(n.y-e.pageY)*(n.y-e.pageY));(n&&o>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;n<o;n++)t.parents.push([Math.min(e.parents[n][0]+1,e.parents[n][1]+1),Math.max(e.parents[n][0]+1,e.parents[n][1]+1)]),t.date.push(e.date[n]);window.localStorage.setItem("progress",JSON.stringify(t)),bases.base&&(game.initProgress(),game.getFinalElements(),library.reload()),localStorage.removeItem("settings"),localStorage.removeItem("history"),localStorage.removeItem("uid"),localStorage.removeItem("timeSpent"),localStorage.removeItem("notification")}},checkImportedHistory:function(){if(null!==window.localStorage.getItem("history")&&null!==window.localStorage.getItem("progress")){for(var e,t=JSON.parse(window.localStorage.getItem("history")),n=0,o=t.parents.length;n<o;n++)e=[Math.min(t.parents[n][0]+1,t.parents[n][1]+1),Math.max(t.parents[n][0]+1,t.parents[n][1]+1)],game.checkIfNotAlreadyDone(e)&&(game.history.parents.push(e),game.history.date.push(t.date[n]));$(document).trigger("updateHistory"),localStorage.removeItem("history"),bases.base&&(game.initProgress(),game.getFinalElements(),void 0!==library.el&&null!==library.el&&library.reload())}},checkHistory:function(){if(null===window.localStorage.getItem("progress")||0===window.localStorage.getItem("progress").length){window.localStorage.setItem("progress",JSON.stringify({parents:[],date:[]}))}},updateHistory:function(){window.localStorage.setItem("progress",JSON.stringify(window.game.history))},resetHistory:function(){storage.updateReset(),window.localStorage.removeItem("progress"),window.storage.checkHistory()},checkSettings:function(){null!==window.localStorage.getItem("settings")&&0!==window.localStorage.getItem("settings").length||window.localStorage.setItem("settings",JSON.stringify(window.settings.def))},getSettings:function(){return null!==window.localStorage.getItem("settings")?JSON.parse(window.localStorage.getItem("settings")):null},updateSettings:function(){window.localStorage.setItem("settings",JSON.stringify(window.settings.data))},checkTime:function(){null===window.localStorage.getItem("timeSpent")&&window.localStorage.setItem("timeSpent",0)},updateTime:function(e){window.localStorage.setItem("timeSpent",e)},updateModificationDates:function(){window.localStorage.setItem("modificationDates",JSON.stringify(loading.modificationDates))},getModificationDates:function(){return null!==window.localStorage.getItem("modificationDates")?JSON.parse(window.localStorage.getItem("modificationDates")):{}},checkAchievements:function(){null!==window.localStorage.getItem("achievements")&&0!==window.localStorage.getItem("achievements").length||window.localStorage.setItem("achievements",JSON.stringify([]))},getAchievements:function(){return null!==window.localStorage.getItem("achievements")?JSON.parse(window.localStorage.getItem("achievements")):[]},updateAchievements:function(){window.localStorage.setItem("achievements",JSON.stringify(window.achievements.earnedList))},checkReset:function(){null!==window.localStorage.getItem("reset")&&0!==window.localStorage.getItem("reset").length||window.localStorage.setItem("reset",-1)},getReset:function(){return parseInt(window.localStorage.getItem("reset"),10)},setReset:function(e){window.localStorage.setItem("reset",e)},updateReset:function(){GoogleAPI.logged&&window.localStorage.setItem("reset",(new Date).getTime())},getName:function(){return window.localStorage.getItem("name")},setName:function(e){window.localStorage.setItem("name",e)},checkOldHistory:function(){if(null===window.localStorage.getItem("progressBeforeReset")||0===window.localStorage.getItem("progressBeforeReset").length){window.localStorage.setItem("progressBeforeReset",JSON.stringify({parents:[],date:[]}))}},setOldHistory:function(e){window.localStorage.setItem("progressBeforeReset",JSON.stringify(e))},getOldHistory:function(){return null!==window.localStorage.getItem("progressBeforeReset")?JSON.parse(window.localStorage.getItem("progressBeforeReset")):{}},getElementPositions:function(){return null!==window.localStorage.getItem("elementPositions")&&window.localStorage.getItem("elementPositions").length>0?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<a;){if(localization.compareLetter(e,bases.names[n[o]][0])<=0)return o;o++}return o-1}},templates={list:{elementInfo:null,notification:null,achievements:null,leaderboards:null,achievement:null,getName:null},init:function(){templates.load(),$(document).on("languageChanged",(function(){templates.load()}))},load:function(){var e=localization.getURL("templates.html");$.get(loading.getURL(e),(function(t,n,o){for(var a in loading.analyzeModificationDate(e,o.getResponseHeader("Last-Modified")),templates.list)templates.list[a]=$(t).filter("#"+a+"Template").html()}))}},update={types:{history:{slot:0,lastSaveVersion:"",data:function(){var e={parents:game.history.parents,date:game.history.date,reset:storage.getReset()};return JSON.stringify(e)},merge:function(){},synchronized:!1},settings:{slot:1,lastSaveVersion:"",data:function(){return JSON.stringify(settings.data)},merge:function(){},synchronized:!1},achievements:{slot:2,lastSaveVersion:"",merge:function(){}}},path:"appstate/v1/states/",init:function(){update.types.history.merge=update.mergeHistoryData,$(document).on("loggedIn",(function(){GoogleAPI.logged&&update.synchronize("history")})),$(document).on("loggedOut",(function(){update.types.history.synchronized=!1})),$(document).on("progressInitiated",(function(){GoogleAPI.logged&&update.synchronize("history")})),$(document).on("updateHistory",(function(e,t,n){GoogleAPI.logged&&update.save("history")}))},resetHistory:function(){0===game.history.parents.length&&GoogleAPI.logged&&update.save("history")},synchronize:function(e){update.types[e].synchronized||update.load(e,(function(){update.types[e].synchronized=!0,update.save(e)}))},load:function(e,t){gapi.client.request({path:update.path+update.types[e].slot,method:"get",callback:function(n,o){var a=JSON.parse(o);404==a.gapiRequest.data.status?(update.types[e].lastSaveVersion=n.currentStateVersion,update.save(e)):401==a.gapiRequest.data.status?$(document).trigger("unauthorized"):"appstate#getResponse"==n.kind&&n.hasOwnProperty("data")&&(update.types[e].lastSaveVersion=n.currentStateVersion,update.types[e].merge(JSON.parse(n.data))),null!=t&&t()}})},save:function(e,t){var n={};""!=update.types[e].lastSaveVersion&&(n.currentStateVersion=update.types[e].lastSaveVersion),gapi.client.request({path:update.path+update.types[e].slot,params:n,body:{kind:"appstate#updateRequest",data:update.types[e].data()},method:"put",callback:function(n,o){var a=JSON.parse(o);409==a.gapiRequest.data.status?update.load(e,(function(){update.save(e)})):401==a.gapiRequest.data.status?$(document).trigger("unauthorized"):"appstate#writeResult"==n.kind&&(n.hasOwnProperty("error")||(update.types[e].lastSaveVersion=n.currentStateVersion,null!=t&&t()))}})},mergeHistoryData:function(e){var t=function(){if(-1!==e.reset){for(var t=[],o=[],a=game.history.parents.length-1;a>=0;a--)parseInt(game.history.date[a],10)<e.reset&&(t.push(game.history.parents.splice(a,1)[0]),o.push(game.history.date.splice(a,1)[0]),n=!0);n&&game.saveOldProgress(t,o),e.reset>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<a;o++)game.checkIfNotAlreadyDone(e.parents[o])&&(game.history.parents.push(e.parents[o]),game.history.date.push(e.date[o]),n=!0);t()}else t();n&&(game.history=game.checkHistoryIntegrity(game.history),storage.updateHistory(),game.initProgress(),workspace.clearSpecified(workspace.$el.find(".element")),library.reload()),$(document).trigger("historySynchronized")}},library={loadingImage:"iVBORw0KGgoAAAANSUhEUgAAAEoAAABKCAMAAAArDjJDAAAAkFBMVEUAAAAAAAAAAAAAAAAAAAACAgIAAAADAwMCAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAD////MzMwAAADk5ORdXV3a2tp0dHQICAj8/Pzw8PD19fXq6uoXFxfe3t5sbGzR0dHOzs7i4uJCQkLAwMA1NTVNTU0mJiawsLCYmJiKioqjo6NhYWHZ2dl+fn5XV1fT09PRrWOXAAAAEHRSTlMAYTbBS9Uk++MDdRapmQyK8ORcjAAAAdBJREFUWMPt1l2WojAQhuEoguBffyltEwFBEWlttfe/vJm7HGhNhXA1Z3wWkMMbQijx9vbPGgfUFY6FjznlxbataCgSHkYk0XWkmfAwoS90nWgkPKxiuqFtS2rut1khpWhRcST8xDXazirxPAx0Qds3TYSXD1qjbaeWwsu0RteZkmF9xpdf4ZIydKVq4bFSoir89kMrn75vGIMKl2qH37RaePSd8cytf+HE9HEfNN+X4hmdB3376IznClp5XlbDCxemb2DhijbAy8L5sD5D0qhfn8ZLedir74bXtn0KR3TCa2WfP1iQa1g0YY++AjYPiob1GXeaDewzmth57tjC7kqR59zhP4WEOdJPmxR17Nx3lDZ718IZlSilzUGv6cOpr0Eq7Xaop4IX0eNvn90nLjR26bujlAyduRTGDXaSk6FSCd93xV4aAwpntMdBsrTDqBXXps8iM8Mk08e6m2HS0qdNn7WQe4dBbvqYwjpktqrCWro4YsMc+OkPjtLFHgUxT3XG2nGpG7NU0DjvVRWzY78uJe+gU+6MjqnA7uDyUA92wA3oBJ0d7TKNUsXc9zxX6pqCoy/K4UqOQlLVxq5SFI8FL5ksQjW1ChejRLy9/cf+ADN8f5lRBqTtAAAAAElFTkSuQmCC",init:function(){library.elContainter=document.createDocumentFragment(),library.el=document.getElementById("library"),library.outerLibrary=document.getElementById("outerLibrary"),library.$el=$(library.el),library.$outerLibrary=$(library.outerLibrary),library.droppable=new Droppable(library.outerLibrary,{tolerance:"touch"}),library.$outerLibrary.on("droppableDrop",(function(e,t){"workspaceBox"===t.element.getAttribute("data-elementtype")?workspace.del(t.$element.data("ptr")):$(t.helper).off().data("ptr",null).remove()})),$(document).on("newChildCreated",(function(e,t){library.addOne(t)})),$(document).on("imagesLoaded",library.reloadImages),library.mode="normal",library.sortMode="alphabetically";var e=window.setTimeout((function(){library.addAll(),-1===loadingScreen.list.indexOf("historySynchronized")&&-1===loadingScreen.list.indexOf("notLoggedIn")&&loadingScreen.incrementProgress("notLoggedIn"),$(document).off("historySynchronized notLoggedIn")}),5e3);$(document).on("historySynchronized notLoggedIn",(function(t){library.addAll(),$(document).off("historySynchronized notLoggedIn"),window.clearTimeout(e)})),$(window).on("orientationchange resize",(function(e){$(".droppable").trigger("resized")})),$(window).one("load",(function(){library.droppable._getPosition(),library.droppable._getSize()})),$(document).one("iscrollInitiated",library.initOnScrollAction)},initOnScrollAction:function(){var e=$("#libraryOverlay"),t=null;iscrollLibrary.on("scrollStart",(function(){null!==t&&(window.clearTimeout(t),t=null),e[0].style.zIndex=150})),iscrollLibrary.on("scrollEnd",(function(){t=window.setTimeout((function(){e[0].style.zIndex="auto",t=null}),75)})),e.on(gestures.startEvents.join(" "),(function(e){if(!iscrollLibrary.isInTransition)return!1;pos=iscrollLibrary.getComputedPosition(),iscrollLibrary._translate(Math.round(pos.x),Math.round(pos.y)),iscrollLibrary._execEvent("scrollEnd"),iscrollLibrary.isInTransition=!1;var t,n=Math.floor((e.offsetY+-1*iscrollLibrary.y)/library.elementOuterHeight);t=settings.data.hideFinalElements&&library.el.children.length!==game.progressWithoutFinal.length+game.prime.length?library.el.querySelector('.element[data-elementid="'+library.sortedProgress[n]+'"]'):library.el.children[n],$(t).data("ptr").draggable.dragStart(e,e)}))},add:function(e){new LibraryBox(e)},addOne:function(e){library.elContainter=document.createDocumentFragment();var t=settings.data.hideFinalElements?game.progressWithoutFinal:game.progress,n=library.sort(game.prime.concat(t),!0);library.sortedProgress=n;var o=n.indexOf(e);if(!library.checkIfHideFinal(e))if(library.add(e),0===o)library.$el.prepend(library.elContainter);else if(-1!==o){var a=n[o-1];$('#library > .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<t;e++)library.add(o[e]);library.el.appendChild(library.elContainter),library.elementOuterHeight=library.$el.find(".element").outerHeight(),library.refreshIscroll(o.length),$(document).trigger("libraryShowed")},clear:function(){for(var e,t,n=library.el.getElementsByClassName("element"),o=0,a=n.length;o<a;o++)(t=(e=$(n[o])).data("ptr")).draggable&&t.draggable.destroy(),t.draggable=null,e.find("img").off(),e.data("ptr",null).off();library.el.innerHTML=""},hideAll:function(){for(var e=library.el.getElementsByClassName("element"),t=0,n=e.length;t<n;t++)e[t].style.display="none"},reload:function(){library.clear(),library.addAll()},refresh:function(){library.show()},show:function(e){var t,n,o,a,i,r=library.el.getElementsByClassName("element"),s=e||game.prime.concat(game.progress);for((s=library.sort(s,!0)).length,void 0===e&&(library.sortedProgress=[]),i=0,t=0,n=r.length;t<n;t++)o=r[t].getAttribute("data-elementId"),a=s.indexOf(parseInt(o,10)),!library.checkIfHideFinal(parseInt(o,10))&&a>-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;e<t;e++)o[e].firstChild.nextSibling.src="data:image/png;base64,"+bases.images[o[e].getAttribute("data-elementId")];for(e=0,t=o.length;e<t;e++)o[e].firstChild.parentNode.removeChild(o[e].firstChild),o[e].firstChild.style.display="block",(n=$(o[e]).data("ptr").draggable).isDragging?$(o[e]).on("dragEnd",a):n.changeHandles("img")},markFinalElements:function(){var e,t,n;if(window.settings.data.markFinalElements&&!window.settings.data.hideFinalElements)for(e=0,t=(n=game.finalElements).length;e<t;e++)library.el.querySelector('.element[data-elementid="'+n[e]+'"]').className+=" finalElement";else for(n=library.el.getElementsByClassName("finalElement");n.length>0;)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<n;t++)bases.names[a[t]][0]===e&&o.push(a[t]);return o},showCategory:function(e){var t,n,o,a=[],i=game.prime.concat(game.progress);for(t=0,n=i.length;t<n;t++)if(bases.base[i[t]].tags)for(o=0;o<bases.base[i[t]].tags.length;o++)bases.base[i[t]].tags[o]===e&&a.push(parseInt(i[t],10));return a},showLetterAndCategory:function(e,t){var n,o,a=[];for(n=0,o=(t=library.showCategory(t)).length;n<o;n++)bases.names[t[n]][0]===e&&a.push(t[n]);return a},showPhrase:function(e){for(var t,n=[],o="[]{}'/\\()?<>+.*^$",a=game.prime.concat(game.progress),i=0;i<o.length;i++)e=e.split(o[i]).join("");var r=new RegExp(e);for(i=0,t=a.length;i<t;i++)r.test(bases.names[a[i]].toLowerCase())&&n.push(a[i]);return n},sort:function(e,t){var n=e||game.prime.concat(game.progress),o=[];return"alphabetically"===library.sortMode?o=library.sortAlphabetically(n):"time"===library.sortMode&&(o=library.sortByTime(n)),t?o:void library.show(o)},sortAlphabetically:function(e){var t,n,o,a={},i=[],r=[];for(t=0,n=e.length;t<n;t++)a[o=bases.names[e[t]]+"_"+e[t]]=e[t],i.push(o);for("en"!==localization.language?i.sort(localization.compare):i.sort(),t=0,n=i.length;t<n;t++)r.push(a[i[t]]);return r},sortByTime:function(e){var t,n,o={},a=[],i=[];for(t=0,n=game.history.parents.length;t<n;t++){var r=workspace.sex(game.history.parents[t]);o[game.history.date[t]]=r,a.push(game.history.date[t])}for(a.sort(),t=0,n=a.length;t<n;t++)i=$.merge(i,o[a[t]]);return i},checkIfHideFinal:function(e){return!!settings.data.hideFinalElements&&-1!==game.finalElements.indexOf(e)},refreshIscroll:function(e){if(iscrollLibrary){var t=library.$outerLibrary.outerHeight()+1;t<e*library.elementOuterHeight?iscrollLibrary.refresh(!0,e*library.elementOuterHeight+50):iscrollLibrary.refresh(!0,t)}}};window.addEventListener("orientationChange",library.refreshIScroll,!1),LibraryBox.prototype.createElement=function(e){var t,n,o=document.createElement("div");o.setAttribute("class","element"),o.setAttribute("data-elementType","libraryBox"),o.setAttribute("data-elementId",this.id),o.style.display=e?"none":o.style.display,-1!==game.finalElements.indexOf(this.id)&&settings.data.markFinalElements&&(o.className+=" finalElement"),bases.imagesLoaded?((t=document.createElement("img")).style.opacity=0,t.src="data:image/png;base64,"+bases.images[this.id],t.alt=bases.names[this.id],t.onload=function(){this.style.opacity=1,t.onload=null}):e?((t=document.createElement("img")).src="data:image/png;base64,"+library.loadingImage,t.alt=bases.names[this.id]):((t=document.createElement("img")).style.display="none",t.alt=bases.names[this.id],(n=document.createElement("span")).className+=" elementLoadingImage");var a=document.createElement("div");return a.setAttribute("class","elementName"),a.textContent=bases.names[this.id],n&&o.appendChild(n),o.appendChild(t),o.appendChild(a),o},LibraryBox.prototype.init=function(){this.$el=$(library.elContainter.appendChild(this.createElement())),this.$el.data("ptr",this),this.initDraggable()},LibraryBox.prototype.initDraggable=function(){var e=this;this.draggable=new Draggable(this.$el[0],{zIndex:1e3,initialZIndex:100,handle:bases.imagesLoaded?"img":"span, img",helper:function(){return document.getElementById("workspace").appendChild(e.createElement(!0))}}),this.$el.on("dragStart",(function(t){$(document).trigger("libraryBoxDraggingStart",[e.id]),iscrollLibrary&&iscrollLibrary.disable()})),this.$el.on("dragEnd",(function(e,t){t.isOver||(new WorkspaceBox(t.helper),$(document).trigger("elementDropped")),iscrollLibrary&&(iscrollLibrary.initiated=!1,iscrollLibrary.enable())}))},LibraryBox.prototype.initEvents=function(){var e=this,t=e.$el.find("img");t.on("mousedown",(function(t){3===t.which&&$(document).trigger("showElementInfo",[t,e])})),t.on("gesturelongpress",(function(t){$(document).trigger("showElementInfo",[t,e])}))};var iscrollLibrary,iscrollAlphabeth,workspace={init:function(){workspace.el=document.getElementById("workspace"),workspace.$el=$(workspace.el),workspace.loadFromStorage(),$("#clearWorkspace").on("click",workspace.clear),$(document).on("cloneWorkspaceBox",(function(e,t,n){workspace.clone(t,n)})),$(document).on("imagesLoaded",(function(){workspace.reloadImages()})),$(document).on("namesLoaded",workspace.reloadNames),$(document).on("draggableDroppedFix",(function(e,t){new WorkspaceBox(t.helper)})),window.addEventListener("orientationchange",workspace.recalculateElements,!1),window.addEventListener("resize",workspace.hideUnderLibrary,!1),window.addEventListener("beforeunload",workspace.save,!1)},add:function(e,t,n){return new WorkspaceBox(e,t,n)},clone:function(e,t){var n=new WorkspaceBox(t.id,t.$el.position()),o=document.createEvent("MouseEvents");o.initMouseEvent("mousedown",!0,!0,window,1,e.pageX,e.pageY,e.pageX,e.pageY,!1,!1,!1,!1,0,null),n.$el[0].dispatchEvent(o),n.droppable.startListeningToDrag(t.draggable)},clear:function(){settings.data.markFinalElements&&workspace.$el.find(".finalElement").length>0?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;o<a;o++)(n=(t=$(e[o])).data("ptr"))&&(n.droppable&&n.droppable.destroy(),n.draggable&&n.draggable.destroy(),n.draggable=null,n.droppable=null),t.find("img").off(),t.data("ptr",null).off().remove()},del:function(e){e.$el[0].style.display="none",$(document).off(gestures.startEvents.join(" ")),$(e.$el).off(gestures.startEvents.join(" ")),e.droppable&&e.droppable.destroy(),e.draggable&&e.draggable.destroy(),e.draggable=null,e.droppable=null,e.$el.find("img").off(),e.$el.data("ptr",null).off().remove(),e=null},reloadImages:function(){for(var e=workspace.el.getElementsByClassName("element"),t=0;t<e.length;t++)e[t].firstChild.src="data:image/png;base64,"+bases.images[e[t].getAttribute("data-elementId")]},reloadNames:function(){for(var e,t=workspace.el.getElementsByClassName("element"),n=0;n<t.length;n++)(e=$(t[n])).find("div")[0].innerHTML=bases.names[e.attr("data-elementId")]},sex:function(e){var t,n,o,a,i=[],r=Object.keys(bases.base);for(t=0,n=r.length;t<n;t++)for(a=workspace.ifSex(e,r[t]),o=0;o<a;o++)i.push(parseInt(r[t],10));return i},ifSex:function(e,t){var n,o=0;if(bases.base[t].hasOwnProperty("parents"))for(n=0;n<bases.base[t].parents.length;n++)Math.min(e[0],e[1])===Math.min(bases.base[t].parents[n][0],bases.base[t].parents[n][1])&&Math.max(e[0],e[1])===Math.max(bases.base[t].parents[n][0],bases.base[t].parents[n][1])&&(o+=1);return o},calculateOffspringPosition:function(e,t,n){var o,a=function(n){var o=(e[0].top-e[1].top)/(e[0].left-e[1].left),a=.35*t,i=(e[0].left+e[1].left)/2,r=(e[0].top+e[1].top)/2,s=i+Math.cos(Math.atan(-1/o))*n*a;return{top:r+Math.sin(Math.atan(-1/o))*n*a,left:s}},i=[],r=Math.floor(n/2);for(o=-r;o<=r;o++)(0!==o||n%2)&&i.push(a(o));return i},alreadyCombined:function(e){return!!settings.data.checkAlreadyCombined&&!game.checkIfNotAlreadyDone(e)},hideUnderLibrary:function(){for(var e=workspace.$el.find(".element"),t=workspace.$el.width()-$("#side").width(),n=$(".element").width(),o=0;o<e.length;o++){var a=$(e[o]);a.offset().left+n/2>t?(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;o<e.length;o++){var a=$(e.get(o));a.offset().left+n>t&&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;t<n;t++)-1===game.progress.indexOf(e[t].id)&&-1===game.prime.indexOf(e[t].id)||workspace.add(e[t].id,e[t].position)}},elementsNamesVisibility:function(){for(var e,t=workspace.$el.find(".element"),n=null,o=0,a=t.length;o<a;o++)n=(e=$(t[o])).data("ptr"),settings.data.hideElementsNames?(n.hideElementName(),e.find(".elementName")[0].style.opacity=0):(n.removeHideElementName(),e.find(".elementName")[0].style.opacity=1)}};WorkspaceBox.prototype.createElement=function(e){var t=document.createElement("div");t.setAttribute("class","element"),t.setAttribute("data-elementType","workspaceBox"),t.setAttribute("data-elementId",this.id),t.style.cssText="position: absolute; left:"+e.left+"px; top:"+e.top+"px;";var n=document.createElement("img");n.style.opacity=0,bases.imagesLoaded?n.src="data:image/png;base64,"+bases.images[this.id]:n.src="data:image/png;base64,"+library.loadingImage,n.alt=bases.names[this.id],n.onload=function(){this.style.opacity=1,n.onload=null};var o=document.createElement("div");return o.setAttribute("class","elementName"),o.textContent=bases.names[this.id],settings.data.hideElementsNames&&(o.style.opacity=0),t.appendChild(n),t.appendChild(o),t},WorkspaceBox.prototype.changeType=function(){this.$el[0].setAttribute("data-elementType","workspaceBox"),settings.data.hideElementsNames&&(this.$el.find(".elementName")[0].style.opacity=0)},WorkspaceBox.prototype.init=function(e){this.$el.data("ptr",this),-1!==game.finalElements.indexOf(this.id)&&settings.data.markFinalElements&&(this.$el[0].className+=" finalElement"),this.$el[0].style.zIndex=e||"100",bases.base[this.id].hasOwnProperty("hidden")&&(this.$el[0].className+=" hiddenElement"),this.initDraggable(),this.initDroppable(),settings.data.hideElementsNames&&this.hideElementName()},WorkspaceBox.prototype.initDraggable=function(){var e=this;this.draggable=new Draggable(this.$el[0],{handle:"img",zIndex:1e3,initialZIndex:100}),this.$el.on("dragStart",(function(t){settings.data.hideElementsNames&&(e.$el.find(".elementName")[0].style.opacity=1,e.removeHideElementName()),$(document).trigger("workspaceBoxDraggingStart"),e.$el[0].parentNode.appendChild(e.$el[0])})),this.$el.on("dragEnd",(function(t,n){var o=n.size.width/2,a=n.size.height/2;return n.position.left<-o||n.position.left>workspace.$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<r.length;i++)game.checkIfFinal(r[i])&&game.finalElements.push(r[i]),workspace.add(r[i],s[i]);workspace.del(e),"workspaceBox"===n.element.getAttribute("data-elementType")?workspace.del($(n.element).data("ptr")):$(n.helper).off().remove(),$(document).trigger("childCreated",[r,a])}else"libraryBox"===n.element.getAttribute("data-elementType")?(new WorkspaceBox(n.helper),workspace.alreadyCombined(a)||$(document).trigger("childCreationFail",[a])):workspace.alreadyCombined(a)||$(document).trigger("childCreationFail",[a])}))},WorkspaceBox.prototype.hideElementName=function(){for(var e=workspace.el.getElementsByClassName("elementName"),t=0;t<e.length;t++)e[t].className=e[t].className.replace(" noTransition","");var n=this;this.$el.on("mouseenter",(function(){settings.data.hideElementsNames&&(n.$el.find(".elementName")[0].style.opacity=1)})),this.$el.on("mouseleave",(function(){settings.data.hideElementsNames&&(n.$el.find(".elementName")[0].style.opacity=0)}))},WorkspaceBox.prototype.removeHideElementName=function(){this.$el.off("mouseenter"),this.$el.off("mouseleave");for(var e=workspace.el.getElementsByClassName("elementName"),t=0;t<e.length;t++)e[t].className+=" noTransition"},WorkspaceBox.prototype.onOver=function(){this.$el[0].style.opacity=.5,settings.data.hideElementsNames&&(this.$el.find(".elementName")[0].style.opacity=1)},WorkspaceBox.prototype.onOut=function(){this.$el[0].style.opacity=1,settings.data.hideElementsNames&&(this.$el.find(".elementName")[0].style.opacity=0)},WorkspaceBox.prototype.onSex=function(){},WorkspaceBox.prototype.onAlreadyCombined=function(){},WorkspaceBox.prototype.initEvents=function(){var e=this,t=this.$el.find("img");t.dblclick((function(e){e.preventDefault()}));var n=0,o=null,a=null;t.on(gestures.startEvents.join(" "),(function(i){if(!("mousedown"===i.type&&1!==i.which||null!==a&&a!==e)){if(a=e,clearTimeout(o),o=setTimeout((function(){n=0,a=null}),1e3),1===n)return void t.on(gestures.events[i.type][0],(function(o){1===n&&(n=0,a=null,t.off(gestures.events[i.type][0]),$(document).trigger("cloneWorkspaceBox",[o,e]))}));t.on(gestures.events[i.type][0],(function(e){n=0,a=null,clearTimeout(o),t.off(e.type)})),t.on(gestures.events[i.type][1],(function(){t.off(gestures.events[i.type][0])})),$(document).on(gestures.startEvents.join(" "),(function(e){e.target!==t[0]&&(n=0,a=null,clearTimeout(o),$(document).off(gestures.startEvents.join(" ")))})),n++}})),t.on("mousedown",(function(t){3===t.which&&$(document).trigger("showElementInfo",[t,e])})),t.on("gesturelongpress",(function(t){$(document).trigger("showElementInfo",[t,e])}))},loadingScreen.init(),$(document).ready((function(){game.checkOnline(),gestures.init(),settings.init(),localization.init(),bases.load(),storage.init(),templates.init(),update.init(),GoogleAPI.init(),$(document).on("basesLoaded",(function(){game.init(),search.init(),workspace.init(),library.init(),"undefined"!=typeof IScroll?window.initIScroll():$(document).one("IScrollLoaded",window.initIScroll),loading.init()})),window.onresize=function(){void 0!==iscrollAlphabeth&&void 0!==iscrollLibrary&&(iscrollAlphabeth.refresh(),iscrollLibrary.refresh()),library.elementOuterHeight=$("#library > .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); |