softgames1.1.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. var SG_Lang = 'en';
  2. var SG = {
  3. loaded : false,
  4. debug : false,
  5. lang : 'en',
  6. gameJS : [],
  7. d : document,
  8. loadScrnTimer : 10,
  9. loadingScreenUrl : '',
  10. boot : function(){
  11. SG.initLangs(window.gameLangs);
  12. if( sg_exists() ){
  13. window.softgames.gameInitCallback = SG.startGame;
  14. window.softgames.getReady();
  15. }
  16. else{
  17. SG.startGame();
  18. }
  19. },
  20. startGame : function(){
  21. if( SG.loaded ) return;
  22. SG.loaded = true;
  23. SG.showSpinner();
  24. if(typeof window.gamePreLoader == "function"){
  25. window.gamePreLoader();
  26. }
  27. SG.loadJsFiles(window.gameJS, function(){
  28. SG.hideLoadScrn();
  29. if(window.gameOnLoadScript){
  30. eval(window.gameOnLoadScript); // dear future me, i am deeply sorry!
  31. }
  32. });
  33. },
  34. showSpinner : function(){
  35. //SG.d.getElementById('sg-spinner').setAttribute('class','');
  36. },
  37. showLoadingBar : function(){
  38. return (SG.getUrlParameters()['disableLoadingBar'] === undefined || SG.getUrlParameters()['disableLoadingBar'] !== "true")
  39. },
  40. checkLoadingScreenUrl : function(){
  41. if(document.getElementsByTagName('meta')['splashscreen-game-url']){
  42. SG.loadingScreenUrl = document.getElementsByTagName('meta')['splashscreen-game-url'].getAttribute('content');
  43. }
  44. },
  45. showLoadScrn : function(){
  46. SG.checkLoadingScreenUrl();
  47. if(SG.loadingScreenUrl == '') {
  48. SG.showLoadingDots()
  49. }
  50. else{
  51. SG.showLoadingImage();
  52. }
  53. },
  54. showLoadingImage : function(){
  55. var gamescreen = SG.d.createElement('img');
  56. gamescreen.setAttribute('src', SG.loadingScreenUrl)
  57. gamescreen.style.maxWidth = '100%';
  58. var loadScrn = SG.d.createElement('div');
  59. loadScrn.setAttribute('id', 'sg-loadscrn');
  60. loadScrn.appendChild(gamescreen);
  61. var displayImage = function(){
  62. var body = SG.d.getElementsByTagName('body')[0];
  63. if( typeof body != "undefined" ){
  64. body.appendChild(loadScrn);
  65. SG.loadVoyager();
  66. }
  67. else{
  68. if(SG.debug) console.log('show load-screen: body-tag not ready. retrying in '+SG.loadScrnTimer+'ms');
  69. setTimeout(displayImage,SG.loadScrnTimer);
  70. }
  71. };
  72. displayImage();
  73. },
  74. showLoadingDots : function(){
  75. var loadScrn = SG.d.createElement('div');
  76. loadScrn.setAttribute('id', 'sg-loadscrn');
  77. if(SG.showLoadingBar()){
  78. var spin = SG.d.createElement('div');
  79. spin.setAttribute('id', 'sg-spinner');
  80. loadScrn.appendChild(spin);
  81. }
  82. if(window.location.href.indexOf("adultcontent") != -1){
  83. var text = SG.d.createElement('div');
  84. text.setAttribute('id', 'sg-loadtext');
  85. text.innerHTML = 'One moment please...<br>Your site is almost loaded!';
  86. loadScrn.appendChild(text);
  87. }
  88. var displayLoadScrn = function(){
  89. var body = SG.d.getElementsByTagName('body')[0];
  90. if( typeof body != "undefined" ){
  91. if( SG.d.getElementById('sg-loadscrn') == null ){
  92. SG.debug && console.log('show load-screen: complete');
  93. body.appendChild(loadScrn);
  94. }
  95. SG.loadVoyager();
  96. }
  97. else{
  98. if(SG.debug) console.log('show load-screen: body-tag not ready. retrying in '+SG.loadScrnTimer+'ms');
  99. setTimeout(displayLoadScrn,SG.loadScrnTimer);
  100. }
  101. };
  102. displayLoadScrn();
  103. },
  104. hideLoadScrn : function(){
  105. var loadscrn = SG.d.getElementById('sg-loadscrn');
  106. if( loadscrn )
  107. loadscrn.parentNode.removeChild(loadscrn);
  108. },
  109. loadJsFiles : function(files, callback){
  110. var head = SG.d.getElementsByTagName('head')[0] || document.documentElement,
  111. loaded = [],
  112. callbacksUntilFinish = files.length;
  113. if( files.length > 0 ){
  114. var script = document.createElement('script'), loaded = false;
  115. script.type = 'text/javascript';
  116. script.src = files[0];
  117. files.shift();
  118. var done = false;
  119. script.onreadystatechange = script.onload = function() {
  120. if (!done && (!this.readyState || this.readyState === "loaded" || this.readyState === "complete")) {
  121. done = true;
  122. // Handle memory leak in IE
  123. script.onload = script.onreadystatechange = null;
  124. if (head && script.parentNode) {
  125. head.removeChild(script);
  126. }
  127. SG.loadJsFiles(files, callback);
  128. }
  129. };
  130. head.insertBefore(script, head.firstChild);
  131. if(SG.debug) console.log('loading '+script.src+', '+files.length+' files left.');
  132. }
  133. else if( typeof callback == 'function' ){
  134. if(SG.debug) console.log('calling callback: '+callback);
  135. callback();
  136. }
  137. },
  138. loadCSSFiles : function( files ){
  139. if( files.length == 0 ) return;
  140. var head = SG.d.getElementsByTagName('head')[0] || document.documentElement;
  141. for( var i=0; i<files.length; i++ ){
  142. var css = document.createElement('link');
  143. css.rel = 'stylesheet';
  144. css.type = 'text/css';
  145. css.href = files[i];
  146. head.insertBefore(css, head.firstChild);
  147. }
  148. },
  149. trigger : function( data, callback ){
  150. if( !sg_exists() ) return false;
  151. switch( data.type ){
  152. case 'start' : d = {type: window.softgames.eventStartingGame}; break;
  153. case 'levelStarted' : d = {type: window.softgames.eventLevelStarted, level: data.level}; break;
  154. case 'levelFinished' : d = {type: window.softgames.eventLevelFinished, level: data.level, score: data.score}; break;
  155. case 'levelUp' : d = {type: window.softgames.eventLevelUp, level: data.level, prevoius_level_score: data.lastLevelScore}; break;
  156. case 'gameOver' : d = {type: window.softgames.eventGameOver, score: data.score}; break;
  157. case 'gameCompleted' : d = {type: window.softgames.eventGameCompleted, score: data.score}; break;
  158. case 'gamePause' : d = {type: window.softgames.eventGamePause, state: data.state}; break;
  159. case 'gameRestart' : d = {type: window.softgames.eventGameRestart}; break;
  160. case 'selectLevel' : d = {type: window.softgames.eventSelectLevel, level: data.level}; break;
  161. case 'selectMainMenu' : d = {type: window.softgames.eventSelectMainMenu}; break;
  162. case 'setSound' : d = {type: window.softgames.eventSound, state: data.state}; break;
  163. case 'incentiviseTriggered' : d = {type: window.softgames.eventIncentiviseTriggered}; break;
  164. }
  165. window.softgames.trigger(d, callback);
  166. return true;
  167. },
  168. initLangs : function( supported_languages ){
  169. var tmp_lang = typeof SG_getLang == 'function' ? SG_getLang() : 'en';
  170. var hasLanguages = (Object.prototype.toString.call(supported_languages)).toLowerCase() == "[object array]";
  171. if( hasLanguages && supported_languages.indexOf(tmp_lang) >= 0 )
  172. SG.lang = tmp_lang;
  173. SG_Lang = SG.lang; // support for old versions, that still use SG_Lang
  174. return SG.lang;
  175. },
  176. isEnabledIncentiviseButton : function(){
  177. if( !sg_exists() ) return false;
  178. return window.softgames.isEnabledIncentiviseButton();
  179. },
  180. getLang : function( ){
  181. return SG.lang;
  182. },
  183. getGameConfig : function(){
  184. if( sg_exists() ){
  185. return window.softgames.game_config;
  186. }
  187. else {
  188. return undefined;
  189. }
  190. },
  191. setOrientationHandler : function(handler){
  192. if( sg_exists() )
  193. window.softgames.changeScreenOrientation = handler;
  194. // handler();
  195. },
  196. setResizeHandler : function(handler){
  197. if( sg_exists() )
  198. window.softgames.changeScreenSize = handler;
  199. },
  200. setPauseHandler : function(handler){
  201. if( sg_exists() )
  202. window.softgames.gamePauseFunction = handler;
  203. },
  204. setUnpauseHandler : function(handler){
  205. if( sg_exists() )
  206. window.softgames.gameUnpauseFunction = handler;
  207. },
  208. // because some games just don't...
  209. hideAddressBar : function(){
  210. setTimeout("window.scrollTo(0, 1)", 10);
  211. },
  212. loadVoyager : function(){
  213. // var sgc = document.createElement('script'); sgc.type = 'text/javascript'; sgc.async = true;
  214. // var random = Math.floor((Math.random()*100000000)+1);
  215. // sgc.src = '//d3tlss08qwqpkt.cloudfront.net/assets/api/voyager.js?_='+random; //production
  216. //sgc.src = 'http://scotty-staging.softgames.de/assets/api/voyager.js'; //staging (edge)
  217. //sgc.src = '//d1i86k9vjnx3mx.cloudfront.net/assets/api/voyager.js?_='+random; //devtest4
  218. //sgc.src = '//localhost:3000/assets/api/voyager.js'; //localhost
  219. // sgc.onload =
  220. SG.boot();
  221. // var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(sgc, s);
  222. },
  223. redirectToPortal:function(){
  224. //Play68.goHome();
  225. /*window.softgames._trackAction("ingameRedirectClicked");
  226. window.softgames._trackEvent("ingameRedirectClicked");
  227. SG.detectPortalUrl();
  228. window.location.href=SG.portalURL;*/
  229. },
  230. detectPortalUrl:function(){
  231. var url=softgames.back_url;
  232. if(typeof url !== "string") url=softgames.subplatform;
  233. if(typeof url !== "string") {
  234. url="";
  235. } else {
  236. if (url.match(/^http:\/\//) == false) {
  237. url="http://"+url;
  238. }
  239. }
  240. SG.portalURL = url;
  241. },
  242. getLogoUrl : function(size){
  243. },
  244. getUrlParameters : function(){
  245. var vars = [], hash;
  246. var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
  247. for(var i = 0; i < hashes.length; i++)
  248. {
  249. hash = hashes[i].split('=');
  250. vars.push(hash[0]);
  251. vars[hash[0]] = hash[1];
  252. }
  253. return vars;
  254. }
  255. };
  256. function sg_exists(){
  257. return typeof window.softgames != "undefined" && window.softgames != null;
  258. }
  259. /* Support old functions, that are used by games from previous connecting */
  260. function SG_initAPI(supported_languages) { return SG.initLangs( supported_languages ); }
  261. function SG_hideAddressBar() { SG.hideAddressBar(); }
  262. function SG_OrientationHandler(orientationHandler, resizeHandler){
  263. if(typeof orientationHandler != "undefined" && orientationHandler != null)
  264. SG.setOrientationHandler(orientationHandler);
  265. if(typeof resizeHandler != "undefined" && resizeHandler != null)
  266. SG.setResizeHandler(resizeHandler);
  267. }
  268. SG.showLoadScrn();