Developing a Sudoku Game in HTML5

Sudoku is a number puzzle game that is very popular right now. The puzzle is a 9x9 grid, divided into nine 3x3 boxes, each of which is comprised of 9 cells. The following figure shows the total grid of 81 cells.
sudo1.jpg

The goal of the puzzle

The goal is to fill every cell with a number, 1 through 9, such that each row, column, and box contains only one instance of each number from 1 through 9.
sudo3.jpg
The initial state of each puzzle consists of some cells in the grid already populated with numbers. Given this initial state, there is one, and only one, the solution to the puzzle, and it can be deduced using logic to fill in all of the missing numbers.
Consider the puzzle in the figure. As mentioned, every box must include the numbers 1 through 9. Currently, the upper-left box doesn't have a 2 in it, but I can figure out where the 2 in that box should go through simple deduction. I know it can't be in the top row because there's already a 2 in that row (the 2 in the upper-right corner, highlighted in yellow). I know it can't be in the middle row, because there's already a 2 there, as well (the 2 in the second row, fourth column). It obviously can't be in the third row, the second column, as there's already a 7 there (highlighted in yellow), and it can't be in the cell to the 7's right, because there's already a 2 in that column (highlighted in yellow in the eighth row). Therefore, the 2 must be in the third row, the first column—the cell highlighted in red. I can fill in that 2, moving me one step closer to solving the puzzle.
sudoku.jpg
Rules of the Puzzle
  1. No number can repeat itself in the same 3x3 square
  2. No number can repeat itself on the same 9 cells column or row.
  3. Every empty cell should have a "mirror" empty cell (for example cells [0,7] & [8,1] or [3,3] & [5,5]). Also when cells and 3x3 Cox index starts from "0", left to right, top to bottom.
  4. Each game should have one and only one solution to be considered a valid Sudoku game.
Game Options
1. Game
1. Easy 2. Medium 3. Hard
2. Edit
3. Sound
4. Keyboard
5. Help
  1. No number can repeat itself in the same 3x3 square.
  2. No number can repeat itself on the same 9 cells column or row.
  3. Every empty cell should have a "mirror" empty cell (for example cells [0,7] & [8,1] or [3,3] & [5,5]) Also when cells and 3x3 Cox index starts from "0", left to right, top to bottom.
  4. Each game should have one and only solution to be considered a valid Sudoku game.
Example
  1. <!doctype html>
  2. <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta charset="utf-8" />
  5. <meta http-equiv="X-UA-Compatible" content="chrome=1">
  6. <title>Sudoku Preview - CodeCanyon</title>
  7. <meta name="Description" content="Sudoku is a logic-based, combinatorial puzzle. The objective is to fill a 9×9 grid with digits so...">
  8. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  9. <link href="http://1.envato-static.com/assets/fullscreen_preview-2dff58760ddd3fb5acb3540e65f6ef43.css" media="screen" rel="stylesheet" type="text/css" />
  10. <link rel="apple-touch-icon-precomposed" sizes="144x144" href="/icons/codecanyon.net/apple-touch-icon-144x144-precomposed.png" />
  11. <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/icons/codecanyon.net/apple-touch-icon-114x114-precomposed.png" />
  12. <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/icons/codecanyon.net/apple-touch-icon-72x72-precomposed.png" />
  13. <link rel="apple-touch-icon-precomposed" href="/icons/codecanyon.net/apple-touch-icon-precomposed.png" />
  14. <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>
  15. <script>window.jQuery || document.write("<script src='http://3.envato-static.com/assets/lib/jquery-1.8.1.min-da0866090343e2cef3f789ab7482744a.js'><\/script>")</script>
  16. <script>
  17. //function to fix height of iframe!
  18. var calcHeight = function () {
  19. var headerDimensions = $('#header-bar').height();
  20. $('#preview-frame').height($(window).height() - headerDimensions);
  21. }
  22. $(document).ready(function () {
  23. calcHeight();
  24. $('#header-bar a.close').mouseover(function () {
  25. $('#header-bar a.close').addClass('activated');
  26. }).mouseout(function () {
  27. $('#header-bar a.close').removeClass('activated');
  28. });
  29. });
  30. $(window).resize(function () {
  31. calcHeight();
  32. }).load(function () {
  33. calcHeight();
  34. });
  35. </script>
  36. <!-- JAVASCRIPT FOR AND GOOGLE ANALYTICS -->
  37. <script>
  38. var _gaq = _gaq || [];
  39. _gaq.push(['_setAccount', 'UA-11834194-12']);
  40. _gaq.push(['_trackPageLoadTime']);
  41. _gaq.push(['_trackPageview']);
  42. _gaq.push(['b._setAccount', 'UA-11834194-36']);
  43. _gaq.push(['b._trackPageLoadTime']);
  44. _gaq.push(['b._trackPageview']);
  45. (function () {
  46. var ga = document.createElement('script');
  47. ga.async = true;
  48. ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
  49. ga.setAttribute('async', 'true');
  50. var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  51. })();
  52. </script> <!doctype html>
  53. <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
  54. <head>
  55. <meta charset="utf-8" />
  56. <meta http-equiv="X-UA-Compatible" content="chrome=1">
  57. <title>Sudoku Preview - CodeCanyon</title>
  58. <meta name="Description" content="Sudoku is a logic-based, combinatorial puzzle. The objective is to fill a 9×9 grid with digits so...<!doctype html>
  59. <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
  60. <head>
  61. <meta charset="utf-8" />
  62. <meta http-equiv="X-UA-Compatible" content="chrome=1">
  63. <title>Sudoku Preview - CodeCanyon</title>
  64. <meta name="Description" content="Sudoku is a logic-based, combinatorial puzzle. The objective is to fill a 9×9 grid with digits so...">
  65. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  66. <link href="http://1.envato-static.com/assets/fullscreen_preview-2dff58760ddd3fb5acb3540e65f6ef43.css" media="screen" rel="stylesheet" type="text/css" />
  67. <link rel="apple-touch-icon-precomposed" sizes="144x144" href="/icons/codecanyon.net/apple-touch-icon-144x144-precomposed.png" />
  68. <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/icons/codecanyon.net/apple-touch-icon-114x114-precomposed.png" />
  69. <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/icons/codecanyon.net/apple-touch-icon-72x72-precomposed.png" />
  70. <link rel="apple-touch-icon-precomposed" href="/icons/codecanyon.net/apple-touch-icon-precomposed.png" />
  71. <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>
  72. <script>window.jQuery || document.write("<script src='http://3.envato-static.com/assets/lib/jquery-1.8.1.min-da0866090343e2cef3f789ab7482744a.js'><\/script>")</script>
  73. <script>
  74. //function to fix height of iframe!
  75. var calcHeight = function () {
  76. var headerDimensions = $('#header-bar').height();
  77. $('#preview-frame').height($(window).height() - headerDimensions);
  78. }
  79. $(document).ready(function () {
  80. calcHeight();
  81. $('#header-bar a.close').mouseover(function () {
  82. <!doctype html>
  83. <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
  84. <head>
  85. <meta charset="utf-8" />
  86. <meta http-equiv="X-UA-Compatible" content="chrome=1">
  87. <title>Sudoku Preview - CodeCanyon</title>
  88. <meta name="Description" content="Sudoku is a logic-based, combinatorial puzzle. The objective is to fill a 9×9 grid with digits so...">
  89. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  90. <link href="http://1.envato-static.com/assets/fullscreen_preview-2dff58760ddd3fb5acb3540e65f6ef43.css" media="screen" rel="stylesheet" type="text/css" />
  91. <link rel="apple-touch-icon-precomposed" sizes="144x144" href="/icons/codecanyon.net/apple-touch-icon-144x144-precomposed.png" />
  92. <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/icons/codecanyon.net/apple-touch-icon-114x114-precomposed.png" />
  93. <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/icons/codecanyon.net/apple-touch-icon-72x72-precomposed.png" />
  94. <link rel="apple-touch-icon-precomposed" href="/icons/codecanyon.net/apple-touch-icon-precomposed.png" />
  95. <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>
  96. <script>window.jQuery || document.write("<script src='http://3.envato-static.com/assets/lib/jquery-1.8.1.min-da0866090343e2cef3f789ab7482744a.js'><\/script>")</script>
  97. <script>
  98. //function to fix height of iframe!
  99. var calcHeight = function () {
  100. var headerDimensions = $('#header-bar').height();
  101. $('#preview-frame').height($(window).height() - headerDimensions);
  102. }
  103. $(document).ready(function () {
  104. calcHeight();
  105. $('#header-bar a.close').mouseover(function () {
  106. $('#header-bar a.close').addClass('activated');
  107. }).mouseout(function () {
  108. $('#header-bar a.close').removeClass('activated');
  109. });
  110. });
  111. $(window).resize(function () {
  112. calcHeight();
  113. }).load(function () {
  114. calcHeight();
  115. });
  116. </script>
  117. <!-- JAVASCRIPT FOR AND GOOGLE ANALYTICS -->
  118. <script>
  119. var _gaq = _gaq || [];
  120. _gaq.push(['_setAccount', 'UA-11834194-12']);
  121. _gaq.push(['_trackPageLoadTime']);
  122. _gaq.push(['_trackPageview']);
  123. _gaq.push(['b._setAccount', 'UA-11834194-36']);
  124. _gaq.push(['b._trackPageLoadTime']);
  125. _gaq.push(['b._trackPageview']);
  126. (function () {
  127. var ga = document.createElement('script');
  128. ga.async = true;
  129. ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
  130. ga.setAttribute('async', 'true');
  131. var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  132. })();
  133. </script>
  134. <!-- END JAVASCRIPT -->
  135. <meta content="" name="WT.si_n" />
  136. <meta content="" name="WT.si_x" />
  137. <meta content="" name="WT.si_cs" />
  138. <script type="text/javascript">var NREUMQ = NREUMQ || []; NREUMQ.push(["mark", "firstbyte", new Date().getTime()]);</script>
  139. </head>
  140. <body>
  141. <div id="header-bar">
  142. <div class="close-header">
  143. <a id="close-button" title="Close CodeCanyon Bar" class="close" href="http://codeblog.cz/sudoku/">X</a>
  144. </div>
  145. <p class="meta-data">
  146. <a class="close" href="http://codeblog.cz/sudoku/">Remove Frame</a> <a class="purchase" href="/item/sudoku/3576054">Purchase this Item!</a>
  147. </p>
  148. <a class="acodecanyon-preview-logo site-loopback" href="/item/sudoku/3576054">codecanyon</a><span class="preview">item preview</span>
  149. </div>
  150. <iframe id="preview-frame" src="http://codeblog.cz/sudoku/" name="preview-frame" frameborder="0" noresize="noresize"></iframe>
  151. <!-- START OF SmartSource Data Collector TAG v10.2.0 -->
  152. <!-- Copyright (c) 2012 Webtrends Inc. All rights reserved. -->
  153. <script>
  154. window.webtrendsAsyncInit = function () {
  155. var dcs = new Webtrends.dcs().init({
  156. dcsid: "dcsu1to8wvz5bd8f6if7d3qse_2j4x"
  157. , domain: "statse.webtrendslive.com"
  158. , timezone: 10
  159. , offsite: true
  160. , download: true
  161. , downloadtypes: "xls,doc,pdf,txt,csv,zip,docx,xlsx,rar,gzip"
  162. , onsitedoms: "codecanyon.net"
  163. , plugins: {
  164. hm: { src: "//s.webtrends.com/js/webtrends.hm.js" }
  165. }
  166. }).track();
  167. };
  168. marketplace.load("http://0.envato-static.com/assets/webtrends.min-5a2a0b3d9f0eeafea3f60e4831cf4958.js");
  169. </script>
  170. <noscript><img alt="dcsimg" id="dcsimg" width="1" height="1" src="//statse.webtrendslive.com/dcs4nx9hnvz5bd4wo8cwvxpse_5g4u/njs.gif?dcsuri=/nojavascript&WT.js=No&WT.tv=10.2.0&dcssip=www.3docean.net"/></noscript>
  171. <!-- END OF SmartSource Data Collector TAG v10.2.0 -->
  172. <!--[if lt IE 7]>
  173. <script src="http://3.envato-static.com/assets/lib/DD_belatedPNG-27285c137194823d2b38f405dd132024.js" type="text/javascript"></script>
  174. <script src="http://2.envato-static.com/assets/utilities/ie6-bf43a1fe705b18ce14da6c1e3ab8f752.js" type="text/javascript"></script>
  175. <![endif]-->
  176. <script type="text/javascript">if (!NREUMQ.f) {
  177. NREUMQ.f = function () {
  178. NREUMQ.push(["load", new Date().getTime()]);
  179. var e = document.createElement("script");
  180. e.type = "text/javascript";
  181. e.src = (("http:" === document.location.protocol) ? "http:" : "https:") + "//" +
  182. "d1ros97qkrwjf5.cloudfront.net/42/eum/rum.js";
  183. document.body.appendChild(e);
  184. if (NREUMQ.a) NREUMQ.a();
  185. };
  186. NREUMQ.a = window.onload; window.onload = NREUMQ.f;
  187. };
  188. NREUMQ.push(["nrfj", "beacon-1.newrelic.com", "fcf8d519de", "13909,1601845,716468", "dA4NFkNbVV1URBcMRVIMTAREWFVuQlVKAFRZPhMQVEJQVEY=", 5, 37, new Date().getTime(), "", "", "", "", ""]);</script>
  189. </body>
  190. </html>
  191. $('#header-bar a.close').addClass('activated');
  192. }).mouseout(function () {
  193. $('#header-bar a.close').removeClass('activated');
  194. });
  195. });
  196. $(window).resize(function () {
  197. calcHeight();
  198. }).load(function () {
  199. calcHeight();
  200. });
  201. </script>
  202. <!-- JAVASCRIPT FOR AND GOOGLE ANALYTICS -->
  203. <script>
  204. var _gaq = _gaq || [];
  205. _gaq.push(['_setAccount', 'UA-11834194-12']);
  206. _gaq.push(['_trackPageLoadTime']);
  207. _gaq.push(['_trackPageview']);
  208. _gaq.push(['b._setAccount', 'UA-11834194-36']);
  209. _gaq.push(['b._trackPageLoadTime']);
  210. _gaq.push(['b._trackPageview']);
  211. (function () {
  212. var ga = document.createElement('script');
  213. ga.async = true;
  214. ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
  215. ga.setAttribute('async', 'true');
  216. var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  217. })();
  218. </script>
  219. <!-- END JAVASCRIPT -->
  220. <meta content="" name="WT.si_n" />
  221. <meta content="" name="WT.si_x" />
  222. <meta content="" name="WT.si_cs" />
  223. <script type="text/javascript">var NREUMQ = NREUMQ || []; NREUMQ.push(["mark", "firstbyte", new Date().getTime()]);</script>
  224. </head>
  225. <body> <h2>
    </h2>
  226. <div id="header-bar">
  227. <div class="close-header">
  228. <a id="close-button" title="Close CodeCanyon Bar" class="close" href="http://codeblog.cz/sudoku/">X</a>
  229. </div>
  230. <p class="meta-data">
  231. <a class="close" href="http://codeblog.cz/sudoku/">Remove Frame</a> <a class="purchase" href="/item/sudoku/3576054">Purchase this Item!</a>
  232. </p>
  233. <a class="acodecanyon-preview-logo site-loopback" href="/item/sudoku/3576054">codecanyon</a><span class="preview">item preview</span>
  234. </div>
  235. <iframe id="preview-frame" src="http://codeblog.cz/sudoku/" name="preview-frame" frameborder="0" noresize="noresize"></iframe>
  236. <!-- START OF SmartSource Data Collector TAG v10.2.0 -->
  237. <!-- Copyright (c) 2012 Webtrends Inc. All rights reserved. -->
  238. <script>
  239. window.webtrendsAsyncInit = function () {
  240. var dcs = new Webtrends.dcs().init({
  241. dcsid: "dcsu1to8wvz5bd8f6if7d3qse_2j4x"
  242. , domain: "statse.webtrendslive.com"
  243. , timezone: 10
  244. , offsite: true
  245. , download: true
  246. , downloadtypes: "xls,doc,pdf,txt,csv,zip,docx,xlsx,rar,gzip"
  247. , onsitedoms: "codecanyon.net"
  248. , plugins: {
  249. hm: { src: "//s.webtrends.com/js/webtrends.hm.js" }<h2>
    </h2>
  250. }
  251. }).track();
  252. };
  253. marketplace.load("http://0.envato-static.com/assets/webtrends.min-5a2a0b3d9f0eeafea3f60e4831cf4958.js");
  254. </script>
  255. <noscript><img alt="dcsimg" id="dcsimg" width="1" height="1" src="//statse.webtrendslive.com/dcs4nx9hnvz5bd4wo8cwvxpse_5g4u/njs.gif?dcsuri=/nojavascript&WT.js=No&WT.tv=10.2.0&dcssip=www.3docean.net"/></noscript>
  256. <!-- END OF SmartSource Data Collector TAG v10.2.0 -->
  257. <!--[if lt IE 7]>
  258. <script src="http://3.envato-static.com/assets/lib/DD_belatedPNG-27285c137194823d2b38f405dd132024.js" type="text/javascript"></script>
  259. <script src="http://2.envato-static.com/assets/utilities/ie6-bf43a1fe705b18ce14da6c1e3ab8f752.js" type="text/javascript"></script>
  260. <![endif]-->
  261. <script type="text/javascript">if (!NREUMQ.f) {
  262. NREUMQ.f = function () {
  263. NREUMQ.push(["load", new Date().getTime()]);
  264. var e = document.createElement("script");
  265. e.type = "text/javascript";
  266. e.src = (("http:" === document.location.protocol) ? "http:" : "https:") + "//" +
  267. "d1ros97qkrwjf5.cloudfront.net/42/eum/rum.js";
  268. document.body.appendChild(e);
  269. if (NREUMQ.a) NREUMQ.a();
  270. };
  271. NREUMQ.a = window.onload; window.onload = NREUMQ.f;
  272. }; <h2>
    </h2>
  273. NREUMQ.push(["nrfj", "beacon-1.newrelic.com", "fcf8d519de", "13909,1601845,716468", "dA4NFkNbVV1URBcMRVIMTAREWFVuQlVKAFRZPhMQVEJQVEY=", 5, 37, new Date().getTime(), "", "", "", "", ""]);</script>
  274. </body>
  275. </html>">
  276. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  277. <link href="http://1.envato-static.com/assets/fullscreen_preview-2dff58760ddd3fb5acb3540e65f6ef43.css" media="screen" rel="stylesheet" type="text/css" />
  278. <link rel="apple-touch-icon-precomposed" sizes="144x144" href="/icons/codecanyon.net/apple-touch-icon-144x144-precomposed.png" />
  279. <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/icons/codecanyon.net/apple-touch-icon-114x114-precomposed.png" />
  280. <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/icons/codecanyon.net/apple-touch-icon-72x72-precomposed.png" />
  281. <link rel="apple-touch-icon-precomposed" href="/icons/codecanyon.net/apple-touch-icon-precomposed.png" />
  282. <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>
  283. <script>window.jQuery || document.write("<script src='http://3.envato-static.com/assets/lib/jquery-1.8.1.min-da0866090343e2cef3f789ab7482744a.js'><\/script>")</script>
  284. <script>
  285. //function to fix height of iframe!
  286. var calcHeight = function () {
  287. var headerDimensions = $('#header-bar').height();
  288. $('#preview-frame').height($(window).height() - headerDimensions);
  289. }
  290. $(document).ready(function () {
  291. calcHeight();
  292. $('#header-bar a.close').mouseover(function () {
  293. $('#header-bar a.close').addClass('activated');
  294. }).mouseout(function () { <h2>
    </h2>
  295. $('#header-bar a.close').removeClass('activated');
  296. });
  297. });
  298. $(window).resize(function () {
  299. calcHeight();
  300. }).load(function () {
  301. calcHeight();
  302. });
  303. </script>
  304. <!-- JAVASCRIPT FOR AND GOOGLE ANALYTICS -->
  305. <script>
  306. var _gaq = _gaq || [];
  307. _gaq.push(['_setAccount', 'UA-11834194-12']);
  308. _gaq.push(['_trackPageLoadTime']);
  309. _gaq.push(['_trackPageview']);
  310. _gaq.push(['b._setAccount', 'UA-11834194-36']);
  311. _gaq.push(['b._trackPageLoadTime']);
  312. _gaq.push(['b._trackPageview']);
  313. (function () {
  314. var ga = document.createElement('script');
  315. ga.async = true;
  316. ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
  317. ga.setAttribute('async', 'true');
  318. var s = document.getElementsByTagName('script')[0]; s.par<h2>
    </h2>entNode.insertBefore(ga, s);
  319. })();
  320. </script>
  321. <!-- END JAVASCRIPT -->
  322. <meta content="" name="WT.si_n" />
  323. <meta content="" name="WT.si_x" />
  324. <meta content="" name="WT.si_cs" />
  325. <script type="text/javascript">var NREUMQ = NREUMQ || []; NREUMQ.push(["mark", "firstbyte", new Date().getTime()]);</script>
  326. </head>
  327. <body>
  328. <div id="header-bar">
  329. <div class="close-header">
  330. <a id="close-button" title="Close CodeCanyon Bar" class="close" href="http://codeblog.cz/sudoku/">X</a>
  331. </div>
  332. <p class="meta-data">
  333. <a class="close" href="http://codeblog.cz/sudoku/">Remove Frame</a> <a class="purchase" href="/item/sudoku/3576054">Purchase this Item!</a>
  334. </p>
  335. <a class="acodecanyon-preview-logo site-loopback" href="/item/sudoku/3576054">codecanyon</a><span class="preview">item preview</span>
  336. </div>
  337. <iframe id="preview-frame" src="http://codeblog.cz/sudoku/" name="preview-frame" frameborder="0" noresize="noresize"></iframe>
  338. <!-- START OF SmartSource Data Collector TAG v10.2.0 -->
  339. <!-- Copyright (c) 2012 Webtrends Inc. All rights reserved. -->
  340. <script>
  341. window.webtrendsAsyncInit = function () {
  342. var dcs = new Webtrends.dcs().init({
  343. dcsid: "dcsu1to8wvz5bd8f6if7d3qse_2j4x"
  344. , domain: "statse.webtrendslive.com"
  345. , timezone: 10
  346. , offsite: true
  347. , download: true
  348. , downloadtypes: "xls,doc,pdf,txt,csv,zip,docx,xlsx,rar,gzip"
  349. , onsitedoms: "codecanyon.net"
  350. , plugins: {
  351. hm: { src: "//s.webtrends.com/js/webtrends.hm.js" }
  352. }
  353. }).track();
  354. };
  355. marketplace.load("http://0.envato-static.com/assets/webtrends.min-5a2a0b3d9f0eeafea3f60e4831cf4958.js");
  356. </script>
  357. <noscript><img alt="dcsimg" id="dcsimg" width="1" height="1" src="//statse.webtrendslive.com/dcs4nx9hnvz5bd4wo8cwvxpse_5g4u/njs.gif?dcsuri=/nojavascript&WT.js=No&WT.tv=10.2.0&dcssip=www.3docean.net"/></noscript>
  358. <!-- END OF SmartSource Data Collector TAG v10.2.0 -->
  359. <!--[if lt IE 7]>
  360. <script src="http://3.envato-static.com/assets/lib/DD_belatedPNG-27285c137194823d2b38f405dd132024.js" type="text/javascript"></script>
  361. <script src="http://2.envato-static.com/assets/utilities/ie6-bf43a1fe705b18ce14da6c1e3ab8f752.js" type="text/javascript"></script>
  362. <![endif]-->
  363. <script type="text/javascript">if (!NREUMQ.f) {
  364. NREUMQ.f = function () {
  365. NREUMQ.push(["load", new Date().getTime()]);
  366. var e = document.createElement("script");
  367. e.type = "text/javascript";
  368. e.src = (("http:" === document.location.protocol) ? "http:" : "https:") + "//" +
  369. "d1ros97qkrwjf5.cloudfront.net/42/eum/rum.js";
  370. document.body.appendChild(e);
  371. if (NREUMQ.a) NREUMQ.a();
  372. };
  373. NREUMQ.a = window.onload; window.onload = NREUMQ.f;
  374. };
  375. NREUMQ.push(["nrfj", "beacon-1.newrelic.com", "fcf8d519de", "13909,1601845,716468", "dA4NFkNbVV1URBcMRVIMTAREWFVuQlVKAFRZPhMQVEJQVEY=", 5, 37, new Date().getTime(), "", "", "", "", ""]);</script>
  376. </body>
  377. </html>
  378. <!-- END JAVASCRIPT -->
  379. <meta content="" name="WT.si_n" />
  380. <meta content="" name="WT.si_x" />
  381. <meta content="" name="WT.si_cs" />
  382. <script type="text/javascript">var NREUMQ = NREUMQ || []; NREUMQ.push(["mark", "firstbyte", new Date().getTime()]);</script>
  383. </head>
  384. <body>
  385. <div id="header-bar">
  386. <div class="close-header">
  387. <a id="close-button" title="Close CodeCanyon Bar" class="close" href="http://codeblog.cz/sudoku/">X</a>
  388. </div>
  389. <p class="meta-data">
  390. <a class="close" href="http://codeblog.cz/sudoku/">Remove Frame</a> <a class="purchase" href="/item/sudoku/3576054">Purchase this Item!</a>
  391. </p>
  392. <a class="acodecanyon-preview-logo site-loopback" href="/item/sudoku/3576054">codecanyon</a><span class="preview">item preview</span>
  393. </div>
  394. <iframe id="preview-frame" src="http://codeblog.cz/sudoku/" name="preview-frame" frameborder="0" noresize="noresize"></iframe>
  395. <!-- START OF SmartSource Data Collector TAG v10.2.0 -->
  396. <!-- Copyright (c) 2012 Webtrends Inc. All rights reserved. -->
  397. <script>
  398. window.webtrendsAsyncInit = function () {
  399. var dcs = new Webtrends.dcs().init({
  400. dcsid: "dcsu1to8wvz5bd8f6if7d3qse_2j4x" <h2>
    </h2>
  401. , domain: "statse.webtrendslive.com"
  402. , timezone: 10
  403. , offsite: true
  404. , download: true
  405. , downloadtypes: "xls,doc,pdf,txt,csv,zip,docx,xlsx,rar,gzip"
  406. , onsitedoms: "codecanyon.net"
  407. , plugins: {
  408. hm: { src: "//s.webtrends.com/js/webtrends.hm.js" }
  409. }
  410. }).track();
  411. };
  412. marketplace.load("http://0.envato-static.com/assets/webtrends.min-5a2a0b3d9f0eeafea3f60e4831cf4958.js");
  413. </script>
  414. <noscript><img alt="dcsimg" id="dcsimg" width="1" height="1" src="//statse.webtrendslive.com/dcs4nx9hnvz5bd4wo8cwvxpse_5g4u/njs.gif?dcsuri=/nojavascript&WT.js=No&WT.tv=10.2.0&dcssip=www.3docean.net"/></noscript>
  415. <!-- END OF SmartSource Data Collector TAG v10.2.0 -->
  416. <!--[if lt IE 7]>
  417. <script src="http://3.envato-static.com/assets/lib/DD_belatedPNG-27285c137194823d2b38f405dd132024.js" type="text/javascript"></script>
  418. <script src="http://2.envato-static.com/assets/utilities/ie6-bf43a1fe705b18ce14da6c1e3ab8f752.js" type="text/javascript"></script>
  419. <![endif]-->
  420. <script type="text/javascript">if (!NREUMQ.f) {
  421. NREUMQ.f = function () {
  422. NREUMQ.push(["load", new Date().getTime()]);
  423. var e = document.createElement("script"); <h2>
    </h2>
  424. e.type = "text/javascript";
  425. e.src = (("http:" === document.location.protocol) ? "http:" : "https:") + "//" +
  426. "d1ros97qkrwjf5.cloudfront.net/42/eum/rum.js";
  427. document.body.appendChild(e);
  428. if (NREUMQ.a) NREUMQ.a();
  429. };
  430. NREUMQ.a = window.onload; window.onload = NREUMQ.f;
  431. }; <h2>
    </h2>
  432. NREUMQ.push(["nrfj", "beacon-1.newrelic.com", "fcf8d519de", "13909,1601845,716468", "dA4NFkNbVV1URBcMRVIMTAREWFVuQlVKAFRZPhMQVEJQVEY=", 5, 37, new Date().getTime(), "", "", "", "", ""]);</script>
  433. </body>
  434. </html>
Output
sudo.jpg