var points=points||{};points.elapsedTime=30;points.gameWon=true;points.layout;points.undoUsed;points.hintsUsed;points.points;function Points(elapsedTime,gameWon,layout,undoUsed,hintsUsed,points){this.elapsedTime=elapsedTime;this.gameWon=gameWon;this.layout=layout;this.undoUsed=undoUsed;this.hintsUsed=hintsUsed;this.points=points;} Points.prototype.saveGameStatistics=function(){console.log("saveGameStatistics");var gameStatistics=getGameStatistics();gameStatistics.updateStatistics(this.elapsedTime,this.gameWon,this.layout,this.undoUsed,this.hintsUsed,this.points);localStorage.setItem("gameStatistics",JSON.stringify(gameStatistics));};function getGameStatistics(){var gameStatistics=new GameStatistics(JSON.parse(localStorage.getItem("gameStatistics")));return gameStatistics;};var gameStatistics=gameStatistics||{};gameStatistics.numberOfGames=0;gameStatistics.numberOfGamesWon=0;gameStatistics.layoutsPlayed=[];gameStatistics.layoutsWon=[];gameStatistics.shortestLosingTime=0;gameStatistics.longestLosingTime=0;gameStatistics.averageLosingTime=0;gameStatistics.averagePlayTime=0;gameStatistics.shortestWinningTime=0;gameStatistics.longestWinningTime=0;gameStatistics.averageWinningTime=0;gameStatistics.numberOfGamesLostWithUndo=0;gameStatistics.numberOfGamesLostWithHints=0;gameStatistics.numberOfGamesWonWithoutUndo=0;gameStatistics.numberOfGamesWonWithoutHints=0;gameStatistics.numberOfGamesWonWithoutUndoOrHints=0;gameStatistics.highScore=0;function GameStatistics(jsonObject){if(!jsonObject){this.numberOfGames=0;this.numberOfGamesWon=0;this.layoutsPlayed=[];this.layoutsWon=[];this.shortestLosingTime=0;this.longestLosingTime=0;this.averageLosingTime=0;this.averagePlayTime=0;this.shortestWinningTime=0;this.longestWinningTime=0;this.averageWinningTime=0;this.numberOfGamesLostWithUndo=0;this.numberOfGamesLostWithHints=0;this.numberOfGamesWonWithoutUndo=0;this.numberOfGamesWonWithoutHints=0;this.numberOfGamesWonWithoutUndoOrHints=0;this.highScore=0;}else{for(var prop in jsonObject) this[prop]=jsonObject[prop];}} GameStatistics.prototype.updateStatistics=function(elapsedTime,gameWon,layout,undoUsed,hintsUsed,points){this.numberOfGames++;if(gameWon){this.numberOfGamesWon++;var sumOfElapsedSeconds=(this.numberOfGamesWon-1)*this.averageWinningTime;this.averageWinningTime=(sumOfElapsedSeconds+elapsedTime)/this.numberOfGamesWon;if(this.layoutsWon.indexOf(layout)<0){this.layoutsWon.unshift(layout);} if(elapsedTimethis.longestWinningTime){this.longestWinningTime=elapsedTime;} if(!undoUsed){this.numberOfGamesWonWithoutUndo++;} if(!hintsUsed){this.numberOfGamesWonWithoutHints++;} if(!undoUsed&&!hintsUsed){this.numberOfGamesWonWithoutUndoOrHints++;}}else{var sumOfElapsedSeconds=(this.numberOfGames-this.numberOfGamesWon-1)*this.averageLosingTime;this.averageLosingTime=(sumOfElapsedSeconds+elapsedTime)/(this.numberOfGames-this.numberOfGamesWon);if(elapsedTimethis.longestLosingTime){this.longestLosingTime=elapsedTime;} if(undoUsed){this.numberOfGamesLostWithUndo++;} if(!hintsUsed){this.numberOfGamesLostWithHints++;}} if(points>this.highScore){this.highScore=points;} if(this.averageWinningTime>0&&this.averageLosingTime>0){this.averagePlayTime=(this.averageWinningTime+this.averageLosingTime)/2;}else{this.averagePlayTime=this.averageWinningTime+this.averageLosingTime;} if(this.layoutsPlayed.indexOf(layout)<0){this.layoutsPlayed.unshift(layout);}};