CCC Libraries

Libraries for CCC 1.9

This script should not be not be installed directly. It is a library for other scripts to include with the meta directive // @require https://update.greatest.deepsurf.us/scripts/7952/35672/CCC%20Libraries.js

  1. var __VERSION__ = "1.9",
  2. __DEBUG__ = false;
  3. if (typeof CookieCheat === "undefined") {
  4. var CookieCheat = {
  5. models: {},
  6. views: {},
  7. currentTab: "tools",
  8. collections: {},
  9. cookieToKeep: 0,
  10. // CookHeaven: {},
  11. oldBeautify: Beautify,
  12. oldGameFuncs: {
  13. RefreshStore: new Function(Game.RefreshStore.toString().replace(/^function[\s\S]+?{/, '').replace(/}$/, 'if (CookieCheat.currentTab === "tools") $("#optimalBuying").html(CookieCheat.optimalBuyingUpgradesHtml()); else CookieCheat.optimalBuyingUpgradesHtml();')),
  14. RebuildUpgrades: new Function(Game.RebuildUpgrades.toString().replace(/^function[\s\S]+?{/, '').replace(/}$/, 'CookieCheat.optimalBuyingUpgradesHtml();'))
  15. },
  16. miscVars: {
  17. objectsAchievements: {
  18. 0: {
  19. 1: "Click",
  20. 2: "Double-click",
  21. 50: "Mouse wheel",
  22. 100: "Of Mice and Men",
  23. 200: "The Digital"
  24. },
  25. 1: {
  26. 1: "Grandma's cookies",
  27. 50: "Sloppy kisses",
  28. 100: "Retirement home",
  29. 150: "Friend of the ancients",
  30. 200: "Ruler of the ancients"
  31. },
  32. 2: {
  33. 1: "My first farm",
  34. 50: "Reap what you sow",
  35. 150: "Perfect Agriculture",
  36. 100: "Farm ill"
  37. },
  38. 3: {
  39. 1: "Production chain",
  40. 50: "Industrial revolution",
  41. 150: "Ultimate automation",
  42. 100: "Global warming"
  43. },
  44. 4: {
  45. 1: "You know the drill",
  46. 50: "Excavation site",
  47. 150: "Can you dig it",
  48. 100: "Hollow the planet"
  49. },
  50. 5: {
  51. 1: "Expedition",
  52. 50: "Galactic highway",
  53. 150: "Type II civilization",
  54. 100: "Far far away"
  55. },
  56. 6: {
  57. 1: "Transmutation",
  58. 50: "Transmogrification",
  59. 150: "Gild wars",
  60. 100: "Gold member"
  61. },
  62. 7: {
  63. 1: "A whole new world",
  64. 50: "Now you're thinking",
  65. 150: "Brain-split",
  66. 100: "Dimensional shift"
  67. },
  68. 8: {
  69. 1: "Time warp",
  70. 50: "Alternate timeline",
  71. 150: "Time duke",
  72. 100: "Rewriting history"
  73. },
  74. 9: {
  75. 1: "Antibatter",
  76. 50: "Quirky quarks",
  77. 100: "It does matter!",
  78. 150: "Molecular maestro"
  79. },
  80. 10: {
  81. 1: "Lone photon",
  82. 50: "Dazzling glimmer",
  83. 100: "Blinding flash",
  84. 150: "Unending glow"
  85. }
  86. },
  87. upgradesGenericsFunctions: {
  88. modifyObjectCps: [
  89. ["Reinforced index finger", 0],
  90. ["Thousand fingers", 0],
  91. ["Million fingers", 0],
  92. ["Billion fingers", 0],
  93. ["Trillion fingers", 0],
  94. ["Quadrillion fingers", 0],
  95. ["Ambidextrous", 0],
  96. ["Carpal tunnel prevention cream", 0],
  97. ["Sextillion fingers", 0],
  98. ["Quintillion fingers", 0],
  99. ["Forwards from grandma", 1],
  100. ["One mind", 1],
  101. ["Communal brainsweep", 1],
  102. ["Steel-plated rolling pins", 1],
  103. ["Lubricated dentures", 1],
  104. ["Prune juice", 1],
  105. ["Double-thick glasses", 1],
  106. ["Farmer grandmas", 1],
  107. ["Worker grandmas", 1],
  108. ["Miner grandmas", 1],
  109. ["Cosmic grandmas", 1],
  110. ["Transmuted grandmas", 1],
  111. ["Altered grandmas", 1],
  112. ["Grandmas' grandmas", 1],
  113. ["Antigrandmas", 1],
  114. ["Rainbow grandmas", 1],
  115. ["Bingo center/Research facility", 1],
  116. ["Ritual rolling pins", 1],
  117. ["Elder Pact", 1],
  118. ["Cheap hoes", 2],
  119. ["Fertilizer", 2],
  120. ["Cookie trees", 2],
  121. ["Genetically-modified cookies", 2],
  122. ["Gingerbread scarecrows", 2],
  123. ["Sturdier conveyor belts", 3],
  124. ["Child labor", 3],
  125. ["Sweatshop", 3],
  126. ["Radium reactors", 3],
  127. ["Recombobulators", 3],
  128. ["Sugar gas", 4],
  129. ["Megadrill", 4],
  130. ["Ultradrill", 4],
  131. ["Ultimadrill", 4],
  132. ["H-bomb mining", 4],
  133. ["Vanilla nebulae", 5],
  134. ["Wormholes", 5],
  135. ["Frequent flyer", 5],
  136. ["Warp drive", 5],
  137. ["Chocolate monoliths", 5],
  138. ["Antimony", 6],
  139. ["Essence of dough", 6],
  140. ["True chocolate", 6],
  141. ["Ambrosia", 6],
  142. ["Aqua crustulae", 6],
  143. ["Ancient tablet", 7],
  144. ["Insane oatling workers", 7],
  145. ["Soul bond", 7],
  146. ["Sanity dance", 7],
  147. ["Brane transplant", 7],
  148. ["Flux capacitors", 8],
  149. ["Time paradox resolver", 8],
  150. ["Quantum conundrum", 8],
  151. ["Causality enforcer", 8],
  152. ["Yestermorrow comparators", 8],
  153. ["Sugar bosons", 9],
  154. ["String theory", 9],
  155. ["Large macaron collider", 9],
  156. ["Big bang bake", 9],
  157. ["Reverse cyclotrons", 9],
  158. ["Gem polish", 10],
  159. ["9th color", 10],
  160. ["Chocolate light", 10],
  161. ["Grainbow", 10],
  162. ["Pure cosmic light", 10]
  163. ],
  164. modifyPercentCps: [
  165. ["Oatmeal raisin cookies", 5],
  166. ["Peanut butter cookies", 5],
  167. ["Plain cookies", 5],
  168. ["Sugar cookies", 5],
  169. ["Coconut cookies", 5],
  170. ["White chocolate cookies", 5],
  171. ["Macadamia nut cookies", 5],
  172. ["Double-chip cookies", 10],
  173. ["White chocolate macadamia nut cookies", 10],
  174. ["All-chocolate cookies", 10],
  175. ["Dark chocolate-coated cookies", 15],
  176. ["White chocolate-coated cookies", 15],
  177. ["Eclipse cookies", 15],
  178. ["Zebra cookies", 15],
  179. ["Snickerdoodles", 15],
  180. ["Stroopwafels", 15],
  181. ["Macaroons", 15],
  182. ["Empire biscuits", 15],
  183. ["British tea biscuits", 15],
  184. ["Chocolate british tea biscuits", 15],
  185. ["Round british tea biscuits", 15],
  186. ["Round chocolate british tea biscuits", 15],
  187. ["Round british tea biscuits with heart motif", 15],
  188. ["Round chocolate british tea biscuits with heart motif", 15],
  189. ["Madeleines", 20],
  190. ["Palmiers", 20],
  191. ["Palets", 20],
  192. ["Sablés", 20],
  193. ["Caramoas", 25],
  194. ["Sagalongs", 25],
  195. ["Shortfoils", 25],
  196. ["Win mints", 25],
  197. ["Fig gluttons", 25],
  198. ["Loreols", 25],
  199. ["Jaffa cakes", 25],
  200. ["Grease's cups", 25],
  201. ["Skull cookies", 20],
  202. ["Ghost cookies", 20],
  203. ["Bat cookies", 20],
  204. ["Slime cookies", 20],
  205. ["Pumpkin cookies", 20],
  206. ["Eyeball cookies", 20],
  207. ["Spider cookies", 20],
  208. ["Christmas tree biscuits", 20],
  209. ["Snowflake biscuits", 20],
  210. ["Snowman biscuits", 20],
  211. ["Holly biscuits", 20],
  212. ["Candy cane biscuits", 20],
  213. ["Bell biscuits", 20],
  214. ["Present biscuits", 20],
  215. ["Increased merriness", 15],
  216. ["Improved jolliness", 15],
  217. ["A lump of coal", 1],
  218. ["An itchy sweater", 1],
  219. ["Pure heart biscuits", 25],
  220. ["Ardent heart biscuits", 25],
  221. ["Sour heart biscuits", 25],
  222. ["Weeping heart biscuits", 25],
  223. ["Golden heart biscuits", 25],
  224. ["Eternal heart biscuits", 25],
  225. ["Specialized chocolate chips", 1],
  226. ["Designer cocoa beans", 2],
  227. ["Underworld ovens", 3],
  228. ["Exotic nuts", 4],
  229. ["Kitten helpers", function () {return (Game.milkProgress * 0.05);}],
  230. ["Kitten workers", function () {return (Game.milkProgress * 0.1);}],
  231. ["Kitten engineers", function () {return (Game.milkProgress * 0.2);}],
  232. ["Kitten overseers", function () {return (Game.milkProgress * 0.2);}],
  233. ["Arcane sugar", 5],
  234. ["Heavenly chip secret", function () {return (parseFloat(Game.prestige['Heavenly chips']) * 0.02 * 0.05);}],
  235. ["Heavenly cookie stand", function () {return (parseFloat(Game.prestige['Heavenly chips']) * 0.02 * 0.25);}],
  236. ["Heavenly bakery", function () {return (parseFloat(Game.prestige['Heavenly chips']) * 0.02 * 0.5);}],
  237. ["Heavenly confectionery", function () {return (parseFloat(Game.prestige['Heavenly chips']) * 0.02 * 0.75);}],
  238. ["Heavenly key", function () {return (parseFloat(Game.prestige['Heavenly chips']) * 0.02 * 1);}]
  239. ],
  240. addCpsForObjectUpgrades: function (arr) {
  241. _.each(arr, function (item) {
  242. var upgradeName = item[0];
  243. if (!Game.Upgrades[upgradeName])
  244. console.log('Upgrade [' + upgradeName + '] Doesnt exist.');
  245. Game.Upgrades[upgradeName].cps = CookieCheat.miscVars.upgradesGenericsFunctions.getCpsForUpgradeFunction(item[1], upgradeName);
  246. Game.Upgrades[upgradeName].realCps = CookieCheat.miscVars.upgradesGenericsFunctions.takeCareOfAchievements();
  247. });
  248. },
  249. getCpsForUpgradeFunction: function (objId, upgradeName) {
  250. var pattern = new RegExp('Game\\\.Has\\\([\'"]' + upgradeName + '[\'"]\\)', 'g');
  251. var cpsFuncModif = new Function(Game.ObjectsById[objId].cps.toString().replace(/}[^}]*?$/, "").replace(/^function[^{]+?{/, "").replace(pattern, 1));
  252. return function () {
  253. return ((cpsFuncModif() - Game.ObjectsById[objId].cps()) * Game.ObjectsById[objId].amount);
  254. }
  255. },
  256. getCpsForPercentUpgrade: function (percent) {
  257. if (typeof percent === "number")
  258. var nb = percent * 0.01;
  259. return function () {
  260. return (Game.cookiesPs * (1 + (nb || percent())) - Game.cookiesPs);
  261. }
  262. },
  263. addCpsForPercentUpgrades: function (arr) {
  264. _.each(arr, function (item) {
  265. var upgradeName = item[0];
  266. Game.Upgrades[upgradeName].cps = CookieCheat.miscVars.upgradesGenericsFunctions.getCpsForPercentUpgrade(item[1]);
  267. Game.Upgrades[upgradeName].realCps = CookieCheat.miscVars.upgradesGenericsFunctions.takeCareOfAchievements();
  268. });
  269. },
  270. achievsForAllObjects: function () {
  271. _.each(Game.ObjectsById, function (item) {
  272. var objectName = item.name;
  273. Game.Objects[objectName].realCps = CookieCheat.miscVars.upgradesGenericsFunctions.takeCareOfAchievements();
  274. });
  275. },
  276. takeCareOfAchievements: function () {
  277. return function () {
  278. var isUpgrade = this instanceof Game.Upgrade;
  279. var isObject = this instanceof Game.Object;
  280. var nb = 0;
  281. if (isObject) {
  282. if (this.amount === 0 && !_.isUndefined(CookieCheat.miscVars.objectsAchievements[this.id]) && !_.isUndefined(CookieCheat.miscVars.objectsAchievements[this.id][1]) && !Game.HasAchiev(CookieCheat.miscVars.objectsAchievements[this.id][1]))
  283. nb++;
  284. if (this.amount === 1 && !_.isUndefined(CookieCheat.miscVars.objectsAchievements[this.id]) && !_.isUndefined(CookieCheat.miscVars.objectsAchievements[this.id][2]) && !Game.HasAchiev(CookieCheat.miscVars.objectsAchievements[this.id][2]))
  285. nb++;
  286. if (this.amount === 49 && !_.isUndefined(CookieCheat.miscVars.objectsAchievements[this.id]) && !_.isUndefined(CookieCheat.miscVars.objectsAchievements[this.id][50]) && !Game.HasAchiev(CookieCheat.miscVars.objectsAchievements[this.id][50]))
  287. nb++;
  288. if (this.amount === 99 && !_.isUndefined(CookieCheat.miscVars.objectsAchievements[this.id]) && !_.isUndefined(CookieCheat.miscVars.objectsAchievements[this.id][100]) && !Game.HasAchiev(CookieCheat.miscVars.objectsAchievements[this.id][100]))
  289. nb++;
  290. if (this.amount === 149 && !_.isUndefined(CookieCheat.miscVars.objectsAchievements[this.id]) && !_.isUndefined(CookieCheat.miscVars.objectsAchievements[this.id][150]) && !Game.HasAchiev(CookieCheat.miscVars.objectsAchievements[this.id][150]))
  291. nb++;
  292. if (this.amount === 199 && !_.isUndefined(CookieCheat.miscVars.objectsAchievements[this.id]) && !_.isUndefined(CookieCheat.miscVars.objectsAchievements[this.id][200]) && !Game.HasAchiev(CookieCheat.miscVars.objectsAchievements[this.id][200]))
  293. nb++;
  294. if (!Game.HasAchiev('Builder') && Game.BuildingsOwned === 99)
  295. nb++;
  296. if (!Game.HasAchiev('Architect') && Game.BuildingsOwned === 399)
  297. nb++;
  298. if (!Game.HasAchiev('Engineer') && Game.BuildingsOwned === 799)
  299. nb++;
  300. var oneOfEach = 1;
  301. var mathematician = 1;
  302. var base10 = 1;
  303. var centennial = 1;
  304. for (var i = 0; i < Game.ObjectsById.length; i++) {
  305. if (i === this.id)
  306. continue;
  307. var obj = Game.ObjectsById[i];
  308. if (obj.amount == 0)
  309. oneOfEach = 0;
  310. if (obj.amount < Math.min(128, Math.pow(2, (Game.ObjectsById.length - obj.id) - 1)))
  311. mathematician = 0;
  312. if (obj.amount < (Game.ObjectsById.length - obj.id) * 10)
  313. base10 = 0;
  314. if (obj.amount < 100)
  315. centennial = 0;
  316. }
  317. if (!Game.HasAchiev('One with everything') && oneOfEach && this.amount === 0)
  318. nb++;
  319. if (!Game.HasAchiev('Mathematician') && mathematician && this.amount === Math.min(128, Math.pow(2, (Game.ObjectsById.length - this.id) - 1)) - 1)
  320. nb++;
  321. if (!Game.HasAchiev('Base 10') && base10 && this.amount === (Game.ObjectsById.length - this.id) * 10 - 1)
  322. nb++;
  323. if (!Game.HasAchiev('Centennial') && centennial && this.amount === 99)
  324. nb++;
  325. }
  326. if (isUpgrade) {
  327. if (!Game.HasAchiev("Enhancer") && Game.UpgradesOwned === 19)
  328. nb++;
  329. if (!Game.HasAchiev("Augmenter") && Game.UpgradesOwned === 49)
  330. nb++;
  331. if (!Game.HasAchiev("Upgrader") && Game.UpgradesOwned === 99)
  332. nb++;
  333. if (!Game.HasAchiev("Wholesome") && this.name === "Heavenly key")
  334. nb++;
  335. var howManyHalloweenUpgrades = 0;
  336. if (Game.Has('Skull cookies')) howManyHalloweenUpgrades++;
  337. if (Game.Has('Ghost cookies')) howManyHalloweenUpgrades++;
  338. if (Game.Has('Bat cookies')) howManyHalloweenUpgrades++;
  339. if (Game.Has('Slime cookies')) howManyHalloweenUpgrades++;
  340. if (Game.Has('Pumpkin cookies')) howManyHalloweenUpgrades++;
  341. if (Game.Has('Eyeball cookies')) howManyHalloweenUpgrades++;
  342. if (Game.Has('Spider cookies')) howManyHalloweenUpgrades++;
  343. var test = this.name === 'Skull cookies' || this.name === 'Ghost cookies' || this.name === 'Bat cookies' ||
  344. this.name === 'Slime cookies' || this.name === 'Pumpkin cookies' || this.name === 'Eyeball cookies' || this.name === 'Spider cookies';
  345. if (!Game.HasAchiev("Spooky cookies") && howManyHalloweenUpgrades === 6 && test)
  346. nb++;
  347. var howManyGrandmasUpgrades = 0;
  348. if (Game.Has('Farmer grandmas')) howManyGrandmasUpgrades++;
  349. if (Game.Has('Worker grandmas')) howManyGrandmasUpgrades++;
  350. if (Game.Has('Miner grandmas')) howManyGrandmasUpgrades++;
  351. if (Game.Has('Cosmic grandmas')) howManyGrandmasUpgrades++;
  352. if (Game.Has('Transmuted grandmas')) howManyGrandmasUpgrades++;
  353. if (Game.Has('Altered grandmas')) howManyGrandmasUpgrades++;
  354. if (Game.Has('Grandmas\' grandmas')) howManyGrandmasUpgrades++;
  355. if (Game.Has('Antigrandmas')) howManyGrandmasUpgrades++;
  356. if (Game.Has('Rainbow grandmas')) howManyGrandmasUpgrades++;
  357. var test = this.name === 'Antigrandmas' || this.name === 'Farmer grandmas' || this.name === 'Worker grandmas' || this.name === 'Altered grandmas' ||
  358. this.name === 'Miner grandmas' || this.name === 'Rainbow grandmas' || this.name === 'Cosmic grandmas' || this.name === 'Transmuted grandmas' || this.name === 'Grandmas\' grandmas';
  359. if (!Game.HasAchiev("Elder") && howManyGrandmasUpgrades === 6 && test)
  360. nb++;
  361. }
  362. var percent = (0.04 * nb) * (0.05 * Game.Has("Kitten helpers") + 0.1 * Game.Has("Kitten workers") + 0.2 * Game.Has("Kitten engineers") + 0.2 * Game.Has("Kitten overseers"));
  363. var diffCps = (Game.cookiesPs * (1 + percent) - Game.cookiesPs);
  364. return (this.cps() + diffCps);
  365. }
  366. }
  367. }
  368. },
  369. resetCookieCheat: function () {
  370. if (confirm("You will lose all your saves. Are you sure ?")) {
  371. _.each(CookieCheat.collections, function (collection, key) {
  372. while (collection.models.length > 0) {
  373. if (typeof collection.models[0].stop === "function")
  374. collection.models[0].stop();
  375. collection.models[0].clear();
  376. collection.remove(collection.models[0]);
  377. }
  378. collection.reset();
  379. });
  380. _.each(CookieCheat.models, function (model, key) {
  381. model.reset();
  382. delete model;
  383. });
  384. for (var k in localStorage) { if (k.indexOf("CookieClickerCheats") === 0) delete localStorage[k];}
  385. CookieCheat.miscVars.upgradesGenericsFunctions.addCpsForObjectUpgrades(CookieCheat.miscVars.upgradesGenericsFunctions.modifyObjectCps);
  386. CookieCheat.miscVars.upgradesGenericsFunctions.addCpsForPercentUpgrades(CookieCheat.miscVars.upgradesGenericsFunctions.modifyPercentCps);
  387. CookieCheat.miscVars.upgradesGenericsFunctions.achievsForAllObjects();
  388. CookieCheat.views = {};
  389. CookieCheat.collections = {};
  390. CookieCheat.models = {};
  391. CookieCheat.currentNumFormat = "restore";
  392. CookieCheat.shouldShowTimeLeft = "restore";
  393. CookieCheat.changeBeautify("restore");
  394. CookieCheat.processDesc("restore");
  395. CookieCheat.initAllBackbone();
  396. Game.UpdateMenu();
  397. }
  398. },
  399. howManySecondsUntilThisAmount: function (amount) {
  400. if (Game.cookiesPs == 0)
  401. return Infinity;
  402. var res = Math.floor((amount - Game.cookies) / Game.cookiesPs);
  403. return (res > 0 ? res : 0);
  404. },
  405. optimalBuyingHtml: function () {
  406. CookieCheat.miscVars.objectsOrder = _.map(Game.ObjectsById, function (obj) {
  407. return {
  408. id: obj.id,
  409. name: obj.name,
  410. val: 10000 * obj.realCps() / obj.price
  411. };
  412. }).sort(function(a, b) {
  413. return b.val - a.val;
  414. });
  415. _.each(CookieCheat.miscVars.objectsOrder, function (me, index) {
  416. var color = (index === 0 ? "#0f0" : (index === Game.ObjectsById.length - 1 ? '#f00' : '#ff0'));
  417. $('#product' + me.id).find('.price').css("color", color);
  418. CookieCheat.miscVars.objectsOrder[index].color = color;
  419. });
  420. },
  421. optimalBuyingUpgradesHtml: function () {
  422. CookieCheat.optimalBuyingHtml();
  423. var res = "";
  424. var nb0 = 0;
  425. var all = CookieCheat.miscVars.objectsOrder;
  426. var bestObjectVal = CookieCheat.miscVars.objectsOrder[0].val;
  427. var worstObjectVal = CookieCheat.miscVars.objectsOrder[CookieCheat.miscVars.objectsOrder.length - 1].val;
  428. _.each(_.map(Game.UpgradesInStore, function (upgrade, index) {
  429. if (typeof upgrade.realCps !== "function")
  430. nb0++;
  431. return {
  432. id: upgrade.id,
  433. name: upgrade.name,
  434. idInStore: index,
  435. val: 10000 * (typeof upgrade.realCps === "function" ? upgrade.realCps() : 0) / upgrade.basePrice
  436. };
  437. }).sort(function(a, b) {
  438. return b.val - a.val;
  439. }), function (me, index) {
  440. if (typeof Game.Upgrades[me.name].realCps === "function") {
  441. var color = (index === 0 ? "#0f0" : (index === Game.UpgradesInStore.length - nb0 - 1 ? '#f00' : '#ff0'));
  442. if (me.val > bestObjectVal || me.val < worstObjectVal)
  443. color = (me.val > bestObjectVal ? "#0ff" : "#f00");
  444. me.color = color;
  445. all.push(me);
  446. $('#upgrade' + me.idInStore).html('<div style="background-color:' + color + ';height:10px;width:100%;"></div>');
  447. }
  448. else
  449. $('#upgrade' + me.idInStore).html('<div style="background-color:#000;height:10px;width:100%;"></div>');
  450. });
  451. _.each(all.sort(function(a, b) {
  452. return b.val - a.val;
  453. }), function (me) {
  454. res += '<span style="color:' + me.color + ';font-family: Kavoon;">' + me.name + '</span><br><br>';
  455. });
  456. return res;
  457. },
  458. upgradeBlacklist: ['Gold hoard', "Neuromancy", "Ultrascience", "Elder Covenant", "Revoke Elder Covenant", "One mind", "Season switcher", "Lovesick biscuit", "Festive biscuit", "Ghostly biscuit", "Fool's biscuit"],
  459. strForFeatures: {
  460. topHeadBand: function () {
  461. return '<hr>' +
  462. '<div id="tabs">' +
  463. '<input type="button" class="superTabBtn superGood superBtn' + (CookieCheat.currentTab === "tools" ? " selectedTab" : "") + '" value="Tools" onclick="CookieCheat.changeTab(\'tools\')">' +
  464. '<input type="button" class="superTabBtn superBad superBtn' + (CookieCheat.currentTab === "cheats" ? " selectedTab" : "") + '" value="Cheats" onclick="CookieCheat.changeTab(\'cheats\')">' +
  465. '<input type="button" class="superTabBtn superWarning superBtn' + (CookieCheat.currentTab === "mods" ? " selectedTab" : "") + '" value="Mods" onclick="CookieCheat.changeTab(\'mods\')">' +
  466. '</div>' +
  467. '<div class="section ' + (CookieCheat.currentTab === "tools" ? " superGood" : (CookieCheat.currentTab === "mods" ? " superWarning" : " superBad")) + '" style="text-decoration:underline;font-size:25px;">' +
  468. '<hr>' +
  469. String.capitalize(CookieCheat.currentTab) + ("") +
  470. '</div>' +
  471. '<hr>';
  472. },
  473. cheats: function () {
  474. var a = (function () {
  475. var nb = $('.numberToSet').val();
  476. var id = $('#selectBuildingToSet').val();
  477. if (id === 'all') {
  478. _.each(Game.ObjectsById, function (me) {
  479. me.amount = nb;
  480. if (_.isFunction(me.buyFunction))
  481. me.buyFunction();
  482. me.refresh();
  483. });
  484. }
  485. else {
  486. var me = Game.ObjectsById[id];
  487. me.amount = nb;
  488. if (_.isFunction(me.buyFunction))
  489. me.buyFunction();
  490. me.refresh();
  491. }
  492. Game.storeToRebuild=1;
  493. Game.recalculateGains=1;
  494. }).toString();
  495. return '<div class="subsection"><br>' +
  496. '<br>' +
  497. '<br>' +
  498. '<div class="title">Give yourself some cookies</div>'+ // Cookies to earn
  499. '<div class="listing"><small>(Note : You can use negative numbers to remove cookies. (<span style="font-style: italic;">"God... Why would you do that..?"</span> - CookieGod).)</small></div><br>'+
  500. '<div class="listing" id="earnCookieDiv">' +
  501. '<p class="superFont">' +
  502. 'How many ? ' +
  503. '<input type="number" class="numberToEarn imAState superFont" value="0" style="width:25%"/>' +
  504. '<span class="infoToDisplay superGood simpleInfo superRight"></span>' +
  505. '</p>' +
  506. '</div>' +
  507. '<br>' +
  508. '<br>' +
  509. '<br>' +
  510. '<div class="title">Give yourself some HEAVENLY CHIPS</div>'+ // Heavenly chips to earn
  511. '<div class="listing"><small>(Note : You can use negative numbers to remove Heavenly chips. (<span style="font-style: italic;">"That.. Is... Really... DUMB !"</span> - CookieGod).)</small></div><br>'+
  512. '<div class="listing" id="earnHeavenDiv">' +
  513. '<p class="superFont">' +
  514. 'How many ? ' +
  515. '<input type="number" class="numberToEarn imAState superFont" value="0" style="width:25%"/>' +
  516. '<span class="infoToDisplay superGood simpleInfo superRight"></span>' +
  517. '</p>' +
  518. '</div>' +
  519. '<br>' +
  520. '<br>' +
  521. '<br>' +
  522. '<div class="title">AutoClick Cookie</div>'+ // AutoClick Cookie
  523. '<div class="listing"><small>(Note : I can\'t guarantee that the cheat will click as fast as you want. It depends on your computer.)</small></div><br>'+
  524. '<div class="listing" id="autoClickDiv">' +
  525. '<a id="autoClickButton" class="superBtn superGood">AutoClick</a>' +
  526. '<span class="superFont imAState">State :</span> <span class="superGood goodState">ON</span>/<span class="badState superBad currentState">OFF</span>' +
  527. '<div id="clickAmount" class="simpleInfo superRight"></div>' +
  528. '<br><br><input class="imAState" id="clickingSpeed" type="range" name="speed" min="1" max="1000" step="1" style="width:100%">' +
  529. '<br><br><span id="clickingSpeedText" class="superFont imAState"></span>' +
  530. '</div>' +
  531. '<br>' +
  532. '<br>' +
  533. '<br>' +
  534. '<div class="title">AutoClick Wrinklers</div>'+ // AutoClick Wrinklers
  535. '<div class="listing"><small>(Note : Hello, I\'m a note.)</small></div><br>'+
  536. '<div class="listing" id="autoClickWrinklersDiv">' +
  537. '<a id="autoClickWrinklersButton" class="superBtn superGood">Kill them all !</a>' +
  538. '<span class="superFont imAState">State :</span> <span class="superGood goodState">ON</span>/<span class="badState superBad currentState">OFF</span>' +
  539. '<div id="clickWrinklersAmount" class="simpleInfo superRight"></div>' +
  540. '</div>' +
  541. '<br>' +
  542. '<br>' +
  543. '<br>' +
  544. '<div class="title">Set building amount</div>'+ // Set building amount
  545. '<div class="listing"><small>(Note : I know you\'ll crash your game with this but... CookieCheat must do ANYTHING. (Yes, even crash your game).)</small></div>'+
  546. '<div class="listing"><small>(Note : Don\'t be too greedy... (I know you will...))</small></div><br>'+
  547. '<div class="listing" id="setBuildingDiv">' +
  548. '<br>' +
  549. '<p class="superFont">' +
  550. 'Which building ?' +
  551. '<select id="selectBuildingToSet" class="imAState superFont">' +
  552. '<option value="all">ALL !!!</option>' +
  553. (function () {var r = "";for(var i in Game.ObjectsById){r+='<option value="'+i+'">'+Game.ObjectsById[i].name+'</option>';}return r;})() +
  554. '</select>' +
  555. '</p>' +
  556. '<br>' +
  557. '<p class="superFont">' +
  558. 'How many ?' +
  559. '<input type="number" class="numberToSet imAState superFont" value="0" style="width:25%"/>' +
  560. '</p>' +
  561. '<br>' +
  562. '<p class="superFont">' +
  563. '<a id="setBuildingButton" class="superBtn superGood" onclick="' +
  564. (a.substring(a.indexOf('{') + 1, a.lastIndexOf('}'))).replace(/"/g, "'") +
  565. '">Set it ! OMFG HURRY UP I WANT A LOT OF THAT THINGS !!!!</a>' +
  566. '</p>' +
  567. '</div>' +
  568. '<br>' +
  569. '<br>' +
  570. '<br>' +
  571. '<div class="title">AutoClick Reindeers</div>'+ // AutoClick Reindeers
  572. '<div class="listing" id="autoReindeerClickDiv">' +
  573. '<a id="autoReindeerClickButton" class="superBtn superGood">AutoReindeerClick</a>' +
  574. '<span class="superFont imAState">State :</span> <span class="superGood goodState">ON</span>/<span class="badState superBad currentState">OFF</span>' +
  575. '<div id="reindeerClickAmount" class="simpleInfo superRight"></div>' +
  576. '</div>' +
  577. '<br>' +
  578. '<br>' +
  579. '<br>' +
  580. '<div class="title">AutoSpawn Golden Cookies</div>'+ // AutoSpawn golden Cookie
  581. '<div class="listing"><small>(Note : I can\'t guarantee that the cheat will spawn golden cookies as fast as you want. It depends on your computer.)</small></div>'+
  582. '<div class="listing"><small>(Note : Sometimes, "legit" golden cookies will spawn. They do not depend on my cheat.)</small></div><br>'+
  583. '<div class="listing" id="autoSpawnDiv">' +
  584. '<a id="autoSpawnButton" class="superBtn superGood">AutoSpawn</a>' +
  585. '<span class="superFont imAState">State :</span> <span class="superGood goodState">ON</span>/<span class="badState superBad currentState">OFF</span>' +
  586. '<div id="spawnAmount" class="simpleInfo superRight"></div>' +
  587. '<br><br><input class="imAState" id="spawningSpeed" type="range" name="speed" min="100" max="600000" step="100" style="width:100%">' +
  588. '<br><br><span id="spawningSpeedText" class="superFont imAState"></span>' +
  589. '</div>' +
  590. '<br>' +
  591. '<br>' +
  592. '<br>' +
  593. '<div class="title">AutoClick GoldenCookies</div>'+ // AutoClick GoldenCookies
  594. '<div class="listing" id="autoGoldenClickDiv">' +
  595. '<a id="autoGoldenClickButton" class="superBtn superGood">AutoGoldenClick</a>' +
  596. '<span class="superFont imAState">State :</span> <span class="superGood goodState">ON</span>/<span class="badState superBad currentState">OFF</span>' +
  597. '<div id="goldenClickAmount" class="simpleInfo superRight"></div>' +
  598. '</div>' +
  599. '<br>' +
  600. '<br>' +
  601. '<br>' +
  602. '<div class="title">Spawn GoldenCookies</div>'+ // Spawn GoldenCookie
  603. '<div class="listing" id="goldenSpawnDiv">' +
  604. '<a id="goldenSpawnButton" class="superBtn superGood">Spawn a golden cookie NOW ! <span style="font-size:50%;">...please</span></a>' +
  605. '<div id="goldenSpawnedAmount" class="simpleInfo superRight"></div>' +
  606. '</div></div>';
  607. },
  608. tools: function () {
  609. var a = (function () {
  610. if (!confirm('Do you really want to sell ALL your buildings ?'))
  611. return;
  612. _.each(Game.ObjectsById, function (obj) {
  613. while (obj.amount > 1) {
  614. var price=obj.basePrice*Math.pow(Game.priceIncrease,obj.amount);
  615. price=Math.floor(price*0.5);
  616. Game.cookies += price;
  617. obj.amount--;
  618. Game.BuildingsOwned--;
  619. }
  620. obj.sell();
  621. });
  622. }).toString();
  623. return '<div class="subsection"><br>' +
  624. '<br>' +
  625. '<br>' +
  626. '<div class="title">Save manager</div>'+ // Save manager
  627. '<div class="listing">' +
  628. '<div id="newSaveForm">' +
  629. '<form>' +
  630. '<p class="superFont">' +
  631. 'Custom save name :' +
  632. '<input type="text" id="enterNameSave" class="superRight superFont" style="width:50%"></input>' +
  633. '</p>' +
  634. '<br />' +
  635. '<br />' +
  636. '<p class="superFont">' +
  637. 'Save code :' +
  638. '<select id="selectSaveCode" class="superRight superFont">' +
  639. '<option value="' + CookieCheat.miscVars.newGame + '">New game</option>' +
  640. '<option value="current">--Current game--</option>' +
  641. '<option value="manual">--Import a save--</option>' +
  642. '</select>' +
  643. '</p>' +
  644. '<br />' +
  645. '<br />' +
  646. '<input type="text" id="saveCode" class="superRight superFont" disabled="1" value="' + CookieCheat.miscVars.newGame + '" style="width:100%;"></input>' +
  647. '<br />' +
  648. '<br />' +
  649. '<p style="text-align:center">' +
  650. '<input type="submit" id="newSaveButton" class="submit superBtn superGood" value="Give me that save !" />' +
  651. '</p>' +
  652. '</form>' +
  653. '</div>' +
  654. '<br /><br />' +
  655. '<div class="superHidden" id="savesListContainer"></div>'+
  656. '</div>' +
  657. '<br>' +
  658. '<br>' +
  659. '<br>' +
  660. '<div class="title">Cookie amount to keep safely (It\'s soooo safe)</div>'+ // Cookies to keep
  661. '<div class="listing" id="safeCookieDiv">' +
  662. '<p>' +
  663. '<p>' +
  664. '<a class="superBtn" id="fixCookies" style="font-size:1em;color:#333;">Fix my cookies please... (Infinity or NaN cookies ? Push this button and let the CookieGod work !)</a>' +
  665. '</p>' +
  666. '<br><br>' +
  667. '<p>' +
  668. '<a class="superBtn superRadioBtn _pseudoRadio" id="checkBoxToKeepForLucky" style="font-size:1.2em;">Automatically keep cookies to maximize "Lucky!".</a>' +
  669. '<span class="infoToDisplay superGood simpleInfo superRight"></span>' +
  670. '</p>' +
  671. '<br><br>' +
  672. '<p>' +
  673. '<a class="superBtn superRadioBtn _pseudoRadio" id="checkBoxToKeepForFrenzy" style="font-size:1.2em;">Automatically keep cookies to maximize "Lucky!+Frenzy!".</a>' +
  674. '</p>' +
  675. '<br><br>' +
  676. '<p>' +
  677. '<a class="superBtn superRadioBtn _pseudoRadio" id="checkBoxToKeepAny" style="font-size:1.2em;">By yourself ? Game boy.</a>' +
  678. '<input type="number" class="numberToKeep imAState superFont" value="0" style="width:25%"/>' +
  679. '<span class="whatAboutYou superGood simpleInfo superRight"></span>' +
  680. '</p>' +
  681. '<p>' +
  682. '<br>' +
  683. '<input type="checkbox" id="hitMePlease"/>' +
  684. '<label for="hitMePlease" class="superBad" id="hitLabel">Don\'t let me break this limit, CookieGod !</label>' +
  685. '<span class="cookieGod superBad simpleInfo superRight">The CookieGod doesn\'t care</span>' +
  686. '</p>' +
  687. '</p>' +
  688. '</div>'+
  689. '<br>' +
  690. '<br>' +
  691. '<br>' +
  692. '<div class="title">Optimal Building order</div>'+ // Optimal buying
  693. '<div class="listing" id="optimalBuying">' +
  694. CookieCheat.optimalBuyingUpgradesHtml() +
  695. '</div>' +
  696. '<br>' +
  697. '<br>' +
  698. '<br>' +
  699. '<div class="title">Sell buildings</div>'+ // Sell everything !!!
  700. '<div class="listing">' +
  701. '<a class="superBtn superBad" onclick="' + (a.substring(a.indexOf('{') + 1, a.lastIndexOf('}'))).replace(/"/g, "'") + '" style="font-size:1.2em;">Sell ALL your buildings (EVERYTHING !!!)</a>' +
  702. (function () {
  703. var res = "";
  704. _.each(Game.ObjectsById, function (obj) {
  705. res += "<br><br><br>";
  706. res += '<a class="superFont superBtn superWarning" onclick="' +
  707. 'var objName = \'' + obj.name + '\';' +
  708. 'var obj = Game.Objects[objName];' +
  709. 'var goal = Game.Objects[objName].amount - 10;' +
  710. 'goal = (goal < 0 ? goal = 0 : goal = goal);' +
  711. 'if (!confirm(\'Do you really want to sell \' + (Game.Objects[objName].amount - goal) + \' \' + objName + \' ?\'))' +
  712. 'return;' +
  713. 'goal++;' +
  714. 'while (obj.amount > goal) {' +
  715. 'var price=obj.basePrice*Math.pow(Game.priceIncrease,obj.amount);' +
  716. 'price=Math.floor(price*0.5);' +
  717. 'Game.cookies += price;' +
  718. 'obj.amount--;' +
  719. 'Game.BuildingsOwned--;' +
  720. '}' +
  721. 'obj.sell();" style="font-size:1.2em;">Sell 10 ' + obj.name + '</a>\t';
  722. res += '<a class="superFont superBtn superBad" onclick="' +
  723. 'var objName = \'' + obj.name + '\';' +
  724. 'var obj = Game.Objects[objName];' +
  725. 'if (!confirm(\'Do you really want to sell ALL your \' + objName + \' ?\'))' +
  726. 'return;' +
  727. 'while (obj.amount > 1) {' +
  728. 'var price=obj.basePrice*Math.pow(Game.priceIncrease,obj.amount);' +
  729. 'price=Math.floor(price*0.5);' +
  730. 'Game.cookies += price;' +
  731. 'obj.amount--;' +
  732. 'Game.BuildingsOwned--;' +
  733. '}' +
  734. 'obj.sell();" style="font-size:1.2em;">Sell all your ' + obj.name + '</a>';
  735. });
  736. return res;
  737. })() +
  738. '</div>' +
  739. '<br>' +
  740. '<br>' +
  741. '<br>' +
  742. '<div class="title">AutoBuy Buildings</div>'+ // AutoBuy buildings
  743. '<div class="listing">' +
  744. '<div id="newForm">' +
  745. '<form>' +
  746. '<p class="superFont">' +
  747. 'Building : ' +
  748. '<select id="selectBuilding" class="superRight superFont">' +
  749. '<option value="all">ALL !!!</option>' +
  750. '</select>' +
  751. '</p>' +
  752. '<br />' +
  753. '<br />' +
  754. '<p class="superFont">' +
  755. 'Amount to reach : ' +
  756. '<input type="number" class="superRight number superFont" min="0" max="1000" value="0"/>' +
  757. '</p>' +
  758. '<br />' +
  759. '<br />' +
  760. '<p style="text-align:center">' +
  761. '<input type="submit" id="newAutoBuyBuildingsButton" class="submit superBtn superGood" value="Add it !" />' +
  762. '</p>' +
  763. '</form>' +
  764. '</div>' +
  765. '<br /><br />' +
  766. '<div class="superHidden" id="buildingsListContainer"></div>'+
  767. '</div>' +
  768. '<br>' +
  769. '<br>' +
  770. '<br>' +
  771. '<div class="title">AutoBuy Upgrades</div>'+ // AutoBuy upgrades
  772. '<div class="listing">' +
  773. '<div id="newUpgradeForm">' +
  774. '<form>' +
  775. '<p class="superFont">' +
  776. 'Upgrade : ' +
  777. '<select id="selectUpgrade" class="superRight superFont" style="width:70%;">' +
  778. '<option value="all">ALL !!!</option>' +
  779. '</select>' +
  780. '</p>' +
  781. '<br />' +
  782. '<br />' +
  783. '<p class="superFont">' +
  784. 'Or enter its name here : ' +
  785. '<input type="text" id="enterNameUpgrade" class="superRight superFont" style="width:40%"></input>' +
  786. '</p>' +
  787. '<br />' +
  788. '<br />' +
  789. '<p style="text-align:center">' +
  790. '<input type="submit" id="newAutoBuyUpgradesButton" class="submit superBtn superGood" value="Buy it !" />' +
  791. '</p>' +
  792. '</form>' +
  793. '</div>' +
  794. '<br /><br />' +
  795. '<div class="superHidden" id="upgradesListContainer"></div>'+
  796. '</div></div>';
  797. },
  798. mods: function () {
  799. var a = (function () {
  800. var name = $('#fontSet').val();
  801. CookieCheat.changeBeautify(name);
  802. }).toString();
  803. return '<div class="subsection">' +
  804. '<br>' +
  805. '<br>' +
  806. '<br>' +
  807. '<div class="title">Modify the number display</div>'+ // Beautify
  808. '<div class="listing">' +
  809. '<p class="superFont">' +
  810. 'Which format do you want ?' +
  811. '<select class="imAState superFont" id="fontSet" onchange="' + (a.substring(a.indexOf('{') + 1, a.lastIndexOf('}'))).replace(/"/g, "'") + '">' +
  812. '<option value="restore">Default</option>' +
  813. (function () {var r = "";for(var i in CookieCheat.numFormats){r+='<option value="'+i+'" + ' + (CookieCheat.currentNumFormat === i ? " selected " : "") + '>'+CookieCheat.lowCamelCaseToSentence(i)+'</option>';}return r;})() +
  814. '</select>' +
  815. '</p>' +
  816. '</div>' +
  817. // '<br>' +
  818. // '<br>' +
  819. // '<br>' +
  820. // '<div class="title">About the remaining time</div>'+ // Remaining time
  821. // '<div class="listing">' +
  822. // '<p class="superFont">' +
  823. // 'Do you want to show the remaining time in buildings/upgrades tooltips ?<br><br>' +
  824. // '<input id="aboutTheTimeLeft" onchange="' + "$('#shouldLabel').toggleClass('superGood', CookieCheat.shouldShowTimeLeft === 'restore').toggleClass('superBad', CookieCheat.shouldShowTimeLeft !== 'restore');CookieCheat.shouldShowTimeLeft = (CookieCheat.shouldShowTimeLeft === 'restore' ? 'hello' : 'restore');CookieCheat.processDesc(CookieCheat.shouldShowTimeLeft);" + '" type="checkbox" ' + (CookieCheat.shouldShowTimeLeft === "restore" ? "" : "checked") + '/>' +
  825. // '<label for="aboutTheTimeLeft" class="' + (CookieCheat.shouldShowTimeLeft === 'restore' ? 'superBad' : 'superGood') + '" id="shouldLabel">I want to see that information !!!!</label>' +
  826. // '</p>' +
  827. // '</div>' +
  828. '<br>' +
  829. '<br>' +
  830. '<br>' +
  831. '<div class="title">Golden cookie effects</div>'+ // Golden cookie choices
  832. '<div class="listing">' +
  833. '<br><br>' +
  834. '<div class="superHidden" id="choicesListContainer"></div>'+
  835. '</div>' +
  836. '</div>';
  837. }
  838. },
  839. processNb: function (amount) {
  840. var result = "", len;
  841. var _results = [];
  842. if (CookieCheat.currentNumFormat === "restore")
  843. return;
  844. _datas = CookieCheat.numFormats[CookieCheat.currentNumFormat];
  845. _.each(_datas, function (data) {
  846. var tmpVal = 0;
  847. tmpVal = Math.floor(amount / data.num);
  848. amount -= (data.num * tmpVal);
  849. if (tmpVal.toString().length < 3)
  850. tmpVal = (tmpVal.toString().length === 2 ? "0" : "00") + tmpVal;
  851. if (tmpVal != 0) {
  852. _results.push({
  853. val: tmpVal,
  854. unit: ((typeof data.plural !== "undefined" && tmpVal > 1) ? data.plural : data.name)
  855. });
  856. }
  857. });
  858. if (_results.length === 0)
  859. _results.push({val: 0, unit: ""});
  860. result = "" + parseInt(_results[0].val, 10) + (_results.length > 1 ? "." + _results[1].val : "") + " " + _results[0].unit;
  861. return result;
  862. },
  863. lowCamelCaseToSentence: function (word, capitalize) {
  864. var res = "";
  865. var wasNum = false;
  866. capitalize = capitalize || true;
  867. _.each(word, function (char) {
  868. if (!_.isNaN(char * 123)) {
  869. if (!wasNum)
  870. res += " " + char;
  871. else
  872. res += char;
  873. wasNum = true;
  874. }
  875. else {
  876. if (char === char.toUpperCase()) { // La lettre est en majuscule
  877. res += " " + char;
  878. }
  879. else
  880. res += (wasNum ? " " : "") + char;
  881. wasNum = false;
  882. }
  883. });
  884. return (capitalize ? String.capitalize(res) : res);
  885. },
  886. changeBeautify: function (name) {
  887. localStorage["CookieClickerCheatsBeautifyThem"] = JSON.stringify(name);
  888. if (name == null || name === "restore")
  889. Beautify = CookieCheat.oldBeautify;
  890. else {
  891. CookieCheat.currentNumFormat = name;
  892. Beautify = CookieCheat.processNb;
  893. }
  894. Game.storeToRebuild = 1;
  895. },
  896. processDesc: function (name, shouldRe) {
  897. shouldRe = _.isUndefined(shouldRe) ? true : (_.isUndefined(CookieCheat.lastUpMenu) ? shouldRe : (Math.abs(CookieCheat.lastUpMenu - new Date().getTime()) > 1000) ? true : false);
  898. localStorage["CookieClickerCheatsShouldShowTimeLeft"] = JSON.stringify(name);
  899. if (name === "restore") {
  900. if (Game.RefreshStore.toString() !== CookieCheat.oldGameFuncs.RefreshStore.toString()) {
  901. Game.RefreshStore = CookieCheat.oldGameFuncs.RefreshStore;
  902. Game.RebuildUpgrades = CookieCheat.oldGameFuncs.RebuildUpgrades;
  903. }
  904. if (_.isUndefined(CookieCheat.objSaves)) {
  905. CookieCheat.objSaves = {};
  906. _.each(Game.ObjectsById, function (me) {
  907. CookieCheat.objSaves[me.name] = {};
  908. CookieCheat.objSaves[me.name].desc = me.desc;
  909. me.desc = CookieCheat.objSaves[me.name].desc;
  910. });
  911. }
  912. else {
  913. _.each(Game.ObjectsById, function (me) {
  914. me.desc = CookieCheat.objSaves[me.name].desc;
  915. });
  916. }
  917. if (_.isUndefined(CookieCheat.upgSaves)) {
  918. CookieCheat.upgSaves = {};
  919. _.each(Game.UpgradesById, function (me) {
  920. CookieCheat.upgSaves[me.name] = {};
  921. CookieCheat.upgSaves[me.name].desc = me.desc;
  922. me.desc = CookieCheat.upgSaves[me.name].desc;
  923. });
  924. }
  925. else {
  926. _.each(Game.UpgradesById, function (me) {
  927. me.desc = CookieCheat.upgSaves[me.name].desc;
  928. });
  929. }
  930. }
  931. else {
  932. if (Game.RefreshStore.toString() === CookieCheat.oldGameFuncs.RefreshStore.toString()) {
  933. Game.RefreshStore = function () {
  934. CookieCheat.processDesc(CookieCheat.shouldShowTimeLeft, false);
  935. var str = '';
  936. for (var i in Game.Objects) {
  937. var me = Game.Objects[i];
  938. str += '<div class="product" ' +
  939. Game.getTooltip('<div style="min-width:300px;"><div style="float:right;"><span class="price">' + Beautify(Math.round(me.price)) + '</span></div><div class="name">' + me.name + '</div>' + '<small>[owned : ' + me.amount + '</small>]<div class="description">' + me.desc + '</div></div>', 0, 0, 'left') +
  940. ' id="product' + me.id + '"><div class="icon" id="productIcon' + me.id + '" style="background-image:url(img/' + me.icon + '.png);"></div><div class="content"><div class="title">' + me.displayName + '</div><span class="price">' + Beautify(Math.round(me.price)) + '</span>' + (me.amount > 0 ? ('<div class="title owned">' + me.amount + '</div>') : '') + '</div></div>';
  941. }
  942. l('products').innerHTML = str;
  943. for (var i in Game.Objects) {
  944. var me = Game.Objects[i];
  945. AddEvent(l('product' + me.id), 'mouseover', function (what) {
  946. return function () {
  947. var f = function () {
  948. $('#timeInfo').html((CookieCheat.howManySecondsUntilThisAmount(Game.ObjectsById[what].price) > 0 ? '<span class=' + (CookieCheat.howManySecondsUntilThisAmount(Game.ObjectsById[what].price) > 60 * 60 * 24 ? "superBad":"superWarning")+'>Available in ' + CookieCheat.processMs(1000 * CookieCheat.howManySecondsUntilThisAmount(Game.ObjectsById[what].price)) + '</span>': '<span class="superGood">Already enabled !</span>'));
  949. };
  950. clearInterval(window.memoInterval);
  951. window.memoInterval = setInterval(f, 1000);
  952. };
  953. }(me.id));
  954. AddEvent(l('product' + me.id), 'mouseout', function () {
  955. CookieCheat.processDesc(CookieCheat.shouldShowTimeLeft, true);
  956. clearInterval(window.memoInterval);
  957. });
  958. AddEvent(l('product' + me.id), 'click', function (what) {
  959. return function () {
  960. Game.ObjectsById[what].buy()
  961. };
  962. }(me.id));
  963. }
  964. Game.storeToRebuild = 0;
  965. if (CookieCheat.currentTab == "tools")
  966. $('#optimalBuying').html(CookieCheat.optimalBuyingUpgradesHtml());
  967. else
  968. CookieCheat.optimalBuyingUpgradesHtml();
  969. };
  970. Game.RebuildUpgrades = function () {
  971. CookieCheat.processDesc(CookieCheat.shouldShowTimeLeft, false);
  972. Game.upgradesToRebuild = 0;
  973. var list = [];
  974. for (var i in Game.Upgrades) {
  975. var me = Game.Upgrades[i];
  976. if (!me.bought) {
  977. if (me.unlocked) list.push(me);
  978. }
  979. }
  980. var sortMap = function (a, b) {
  981. if (a.basePrice > b.basePrice) return 1;
  982. else if (a.basePrice < b.basePrice) return -1;
  983. else return 0;
  984. }
  985. list.sort(sortMap);
  986. Game.UpgradesInStore = [];
  987. for (var i in list) {
  988. Game.UpgradesInStore.push(list[i]);
  989. }
  990. var str = '';
  991. for (var i in Game.UpgradesInStore) {
  992. var me = Game.UpgradesInStore[i];
  993. str += '<div class="crate upgrade" ' + Game.getTooltip('<div style="min-width:200px;"><div style="float:right;"><span class="price">' + Beautify(Math.round(me.basePrice)) + '</span></div><small>[Upgrade]</small><div class="name">' + me.name + '</div><div class="description">' + me.desc + '</div></div>', 0, 16, 'bottom-right') + ' onclick="Game.UpgradesById[' + me.id + '].buy();" id="upgrade' + i + '" style="background-position:' + (-me.icon[0] * 48 + 6) + 'px ' + (-me.icon[1] * 48 + 6) + 'px;"></div>';
  994. }
  995. l('upgrades').innerHTML = str;
  996. for (var i in Game.UpgradesInStore) {
  997. var me = Game.UpgradesInStore[i];
  998. AddEvent(l('upgrade' + i), 'mouseover', function (what) {
  999. return function () {
  1000. var f = function () {
  1001. $('#timeInfo').html((CookieCheat.howManySecondsUntilThisAmount(Game.UpgradesInStore[what].basePrice) > 0 ? '<span class=' + (CookieCheat.howManySecondsUntilThisAmount(Game.UpgradesInStore[what].basePrice) > 60 * 60 * 24 ? "superBad":"superWarning")+'>Available in ' + CookieCheat.processMs(1000 * CookieCheat.howManySecondsUntilThisAmount(Game.UpgradesInStore[what].basePrice)) + '</span>': '<span class="superGood">Already enabled !</span>'));
  1002. };
  1003. clearInterval(window.memoInterval);
  1004. window.memoInterval = setInterval(f, 1000);
  1005. };
  1006. }(i));
  1007. AddEvent(l('upgrade' + i), 'mouseout', function () {
  1008. CookieCheat.processDesc(CookieCheat.shouldShowTimeLeft, true);
  1009. clearInterval(window.memoInterval);
  1010. });
  1011. }
  1012. CookieCheat.optimalBuyingUpgradesHtml();
  1013. }
  1014. }
  1015. if (_.isUndefined(CookieCheat.objSaves)) {
  1016. CookieCheat.objSaves = {};
  1017. _.each(Game.ObjectsById, function (me) {
  1018. CookieCheat.objSaves[me.name] = {};
  1019. CookieCheat.objSaves[me.name].desc = me.desc;
  1020. me.desc = CookieCheat.objSaves[me.name].desc + '<br><div id="timeInfo">' + (CookieCheat.howManySecondsUntilThisAmount(me.price) > 0 ? '<span class=' + (CookieCheat.howManySecondsUntilThisAmount(me.price) > 60 * 60 * 24 ? "superBad":"superWarning")+'>Available in ' + CookieCheat.processMs(1000 * CookieCheat.howManySecondsUntilThisAmount(me.price)) + '</span>': '<span class="superGood">Already enabled !</span></div>');
  1021. });
  1022. }
  1023. else {
  1024. _.each(Game.ObjectsById, function (me) {
  1025. me.desc = CookieCheat.objSaves[me.name].desc + '<br><div id="timeInfo">' + (CookieCheat.howManySecondsUntilThisAmount(me.price) > 0 ? '<span class=' + (CookieCheat.howManySecondsUntilThisAmount(me.price) > 60 * 60 * 24 ? "superBad":"superWarning")+'>Available in ' + CookieCheat.processMs(1000 * CookieCheat.howManySecondsUntilThisAmount(me.price)) + '</span>': '<span class="superGood">Already enabled !</span></div>');
  1026. });
  1027. }
  1028. if (_.isUndefined(CookieCheat.upgSaves)) {
  1029. CookieCheat.upgSaves = {};
  1030. _.each(Game.UpgradesById, function (me) {
  1031. CookieCheat.upgSaves[me.name] = {};
  1032. CookieCheat.upgSaves[me.name].desc = me.desc;
  1033. me.desc = CookieCheat.upgSaves[me.name].desc + '<br><div id="timeInfo">' + (CookieCheat.howManySecondsUntilThisAmount(me.basePrice) > 0 ? '<span class=' + (CookieCheat.howManySecondsUntilThisAmount(me.basePrice) > 60 * 60 * 24 ? "superBad":"superWarning")+'>Available in ' + CookieCheat.processMs(1000 * CookieCheat.howManySecondsUntilThisAmount(me.basePrice)) + '</span>': '<span class="superGood">Already enabled !</span></div>');
  1034. });
  1035. }
  1036. else {
  1037. _.each(Game.UpgradesById, function (me) {
  1038. me.desc = CookieCheat.upgSaves[me.name].desc + '<br><div id="timeInfo">' + (CookieCheat.howManySecondsUntilThisAmount(me.basePrice) > 0 ? '<span class=' + (CookieCheat.howManySecondsUntilThisAmount(me.basePrice) > 60 * 60 * 24 ? "superBad":"superWarning")+'>Available in ' + CookieCheat.processMs(1000 * CookieCheat.howManySecondsUntilThisAmount(me.basePrice)) + '</span>': '<span class="superGood">Already enabled !</span></div>');
  1039. });
  1040. }
  1041. }
  1042. if (shouldRe) {
  1043. CookieCheat.lastUpMenu = new Date().getTime();
  1044. Game.RefreshStore();
  1045. Game.RebuildUpgrades();
  1046. }
  1047. },
  1048. currentNumFormat: "restore",
  1049. shouldShowTimeLeft: "restore",
  1050. numFormats: {
  1051. "international": [
  1052. { name: "Y", num : Math.pow(1000, 8) },
  1053. { name: "Z", num : Math.pow(1000, 7) },
  1054. { name: "E", num : Math.pow(1000, 6) },
  1055. { name: "P", num: Math.pow(1000, 5) },
  1056. { name: "T", num: Math.pow(1000, 4) },
  1057. { name: "G", num: Math.pow(1000, 3) },
  1058. { name: "M", num: Math.pow(1000, 2) },
  1059. { name: "k", num: 1000 },
  1060. { name: "", num: 1 }
  1061. ],
  1062. "tenPowerBased": [
  1063. { name: "x10^42", num: Math.pow(1000, 14) },
  1064. { name: "x10^39", num: Math.pow(1000, 13) },
  1065. { name: "x10^36", num: Math.pow(1000, 12) },
  1066. { name: "x10^33", num: Math.pow(1000, 11) },
  1067. { name: "x10^30", num: Math.pow(1000, 10) },
  1068. { name: "x10^27", num: Math.pow(1000, 9) },
  1069. { name: "x10^24", num: Math.pow(1000, 8) },
  1070. { name: "x10^21", num: Math.pow(1000, 7) },
  1071. { name: "x10^18", num: Math.pow(1000, 6) },
  1072. { name: "x10^15", num: Math.pow(1000, 5) },
  1073. { name: "x10^12", num: Math.pow(1000, 4) },
  1074. { name: "x10^9", num: Math.pow(1000, 3) },
  1075. { name: "x10^6", num: Math.pow(1000, 2) },
  1076. { name: "x10^3", num: 1000 },
  1077. { name: "", num: 1 }
  1078. ],
  1079. "fullNamesShortScale": [
  1080. { name: "Tredecillion", plural: "Tredecillion", num: Math.pow(1000, 14) },
  1081. { name: "Duodecillion", plural: "Duodecillion", num: Math.pow(1000, 13) },
  1082. { name: "Undecillion", plural: "Undecillion", num: Math.pow(1000, 12) },
  1083. { name: "Decillion", plural: "Decillion", num: Math.pow(1000, 11) },
  1084. { name: "Nonillion", plural: "Nonillion", num: Math.pow(1000, 10) },
  1085. { name: "Octillion", plural: "Octillion", num: Math.pow(1000, 9) },
  1086. { name: "Septillion", plural: "Septillion", num: Math.pow(1000, 8) },
  1087. { name: "Sextillion", plural: "Sextillion", num: Math.pow(1000, 7) },
  1088. { name: "Quintillion", plural: "Quintillion", num: Math.pow(1000, 6) },
  1089. { name: "Quadrillion", plural: "Quadrillion", num: Math.pow(1000, 5) },
  1090. { name: "Trillion", plural: "Trillion", num: Math.pow(1000, 4) },
  1091. { name: "Billion", plural: "Billion", num: Math.pow(1000, 3) },
  1092. { name: "Million", plural: "Million", num: Math.pow(1000, 2) },
  1093. { name: "Thousand", plural: "Thousand", num: 1000 },
  1094. { name: "", num: 1 }
  1095. ],
  1096. "fullNamesShortScaleShortened": [
  1097. { name: "Tred", num: Math.pow(1000, 14) },
  1098. { name: "Dud", num: Math.pow(1000, 13) },
  1099. { name: "Und", num: Math.pow(1000, 12) },
  1100. { name: "De", num: Math.pow(1000, 11) },
  1101. { name: "No", num: Math.pow(1000, 10) },
  1102. { name: "Oc", num: Math.pow(1000, 9) },
  1103. { name: "Sp", num: Math.pow(1000, 8) },
  1104. { name: "Sx", num: Math.pow(1000, 7) },
  1105. { name: "Qi", num: Math.pow(1000, 6) },
  1106. { name: "Qa", num: Math.pow(1000, 5) },
  1107. { name: "Tr", num: Math.pow(1000, 4) },
  1108. { name: "Bi", num: Math.pow(1000, 3) },
  1109. { name: "Mi", num: Math.pow(1000, 2) },
  1110. { name: "Th", num: 1000 },
  1111. { name: "", num: 1 }
  1112. ],
  1113. "fullNamesLongScale": [
  1114. { name: "Octillion", plural: "Octillion", num: Math.pow(1000, 16) },
  1115. { name: "Septilliard", plural: "Septilliard", num: Math.pow(1000, 15) },
  1116. { name: "Septillion", plural: "Septillion", num: Math.pow(1000, 14) },
  1117. { name: "Sextilliard", plural: "Sextilliard", num: Math.pow(1000, 13) },
  1118. { name: "Sextillion", plural: "Sextillion", num: Math.pow(1000, 12) },
  1119. { name: "Quintilliard", plural: "Quintilliard", num: Math.pow(1000, 11) },
  1120. { name: "Quintillion", plural: "Quintillion", num: Math.pow(1000, 10) },
  1121. { name: "Quadrilliard", plural: "Quadrilliard", num: Math.pow(1000, 9) },
  1122. { name: "Quadrillion", plural: "Quadrillion", num: Math.pow(1000, 8) },
  1123. { name: "Trilliard", plural: "Trilliard", num: Math.pow(1000, 7) },
  1124. { name: "Trillion", plural: "Trillion", num: Math.pow(1000, 6) },
  1125. { name: "Billiard", plural: "Billiard", num: Math.pow(1000, 5) },
  1126. { name: "Billion", plural: "Billion", num: Math.pow(1000, 4) },
  1127. { name: "Milliard", plural: "Milliard", num: Math.pow(1000, 3) },
  1128. { name: "Million", plural: "Million", num: Math.pow(1000, 2) },
  1129. { name: "Thousand", plural: "Thousand", num: 1000 },
  1130. { name: "", num: 1 }
  1131. ],
  1132. "fullNamesLongScaleShortened": [
  1133. { name: "Oco", num: Math.pow(1000, 16) },
  1134. { name: "Spd", num: Math.pow(1000, 15) },
  1135. { name: "Spo", num: Math.pow(1000, 14) },
  1136. { name: "Sxd", num: Math.pow(1000, 13) },
  1137. { name: "Sxo", num: Math.pow(1000, 12) },
  1138. { name: "Qid", num: Math.pow(1000, 11) },
  1139. { name: "Qio", num: Math.pow(1000, 10) },
  1140. { name: "Qad", num: Math.pow(1000, 9) },
  1141. { name: "Qao", num: Math.pow(1000, 8) },
  1142. { name: "Trd", num: Math.pow(1000, 7) },
  1143. { name: "Tio", num: Math.pow(1000, 6) },
  1144. { name: "Brd", num: Math.pow(1000, 5) },
  1145. { name: "Bio", num: Math.pow(1000, 4) },
  1146. { name: "Mrd", num: Math.pow(1000, 3) },
  1147. { name: "Mio", num: Math.pow(1000, 2) },
  1148. { name: "Ths", num: 1000 },
  1149. { name: "", num: 1 }
  1150. ]
  1151. },
  1152. launch: function () {
  1153. CookieCheat.addCSS();
  1154. CookieCheat.initModels();
  1155. CookieCheat.initCollections();
  1156. CookieCheat.initViews();
  1157. CookieCheat.addButton();
  1158. CookieCheat.loadChoices();
  1159. CookieCheat.updateMouseCps();
  1160. CookieCheat.computeChoose();
  1161. CookieCheat.updateGoldenCookieclick();
  1162. CookieCheat.initAllBackbone();
  1163. CookieCheat.protectToKeepSafe();
  1164. if (!_.isUndefined(localStorage["CookieClickerCheatsBeautifyThem"])) {
  1165. CookieCheat.currentNumFormat = JSON.parse(localStorage["CookieClickerCheatsBeautifyThem"]);
  1166. CookieCheat.changeBeautify(CookieCheat.currentNumFormat)
  1167. }
  1168. if (!_.isUndefined(localStorage["CookieClickerCheatsShouldShowTimeLeft"])) {
  1169. CookieCheat.shouldShowTimeLeft = JSON.parse(localStorage["CookieClickerCheatsShouldShowTimeLeft"]);
  1170. }
  1171. CookieCheat.miscVars.upgradesGenericsFunctions.addCpsForObjectUpgrades(CookieCheat.miscVars.upgradesGenericsFunctions.modifyObjectCps);
  1172. CookieCheat.miscVars.upgradesGenericsFunctions.addCpsForPercentUpgrades(CookieCheat.miscVars.upgradesGenericsFunctions.modifyPercentCps);
  1173. CookieCheat.miscVars.upgradesGenericsFunctions.achievsForAllObjects();
  1174. Game.RefreshStore = CookieCheat.oldGameFuncs.RefreshStore;
  1175. Game.RebuildUpgrades = CookieCheat.oldGameFuncs.RebuildUpgrades;
  1176. CookieCheat.processDesc(CookieCheat.shouldShowTimeLeft);
  1177. Game.Popup("Cookie Clicker Cheats v." + __VERSION__ + " launched !");
  1178. // CookieCheat.CookHeaven.init();
  1179. }
  1180. };
  1181. (function () {
  1182. if (String.capitalize == null) {
  1183. String.capitalize = function (string) {
  1184. var res = "";
  1185. res += string.charAt(0).toUpperCase();
  1186. res += string.substring(1).toLowerCase();
  1187. return res;
  1188. };
  1189. }
  1190. // ------ Some libraries ------
  1191. (function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="<div class='a'></div><div class='a i'></div>",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav></:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t
  1192. }({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Ct=/^(?:checkbox|radio)$/i,Nt=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:x.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle);
  1193. u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=un(e,t),Pt.detach()),Gt[e]=n),n}function un(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[0],"display");return n.remove(),r}x.each(["height","width"],function(e,n){x.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(x.css(e,"display"))?x.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,i),i):0)}}}),x.support.opacity||(x.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=x.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===x.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),x(function(){x.support.reliableMarginRight||(x.cssHooks.marginRight={get:function(e,n){return n?x.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!x.support.pixelPosition&&x.fn.position&&x.each(["top","left"],function(e,n){x.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?x(e).position()[n]+"px":r):t}}})}),x.expr&&x.expr.filters&&(x.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!x.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||x.css(e,"display"))},x.expr.filters.visible=function(e){return!x.expr.filters.hidden(e)}),x.each({margin:"",padding:"",border:"Width"},function(e,t){x.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(x.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=x.prop(this,"elements");return e?x.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!x(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Ct.test(e))}).map(function(e,t){var n=x(this).val();return null==n?null:x.isArray(n)?x.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),x.param=function(e,n){var r,i=[],o=function(e,t){t=x.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=x.ajaxSettings&&x.ajaxSettings.traditional),x.isArray(e)||e.jquery&&!x.isPlainObject(e))x.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==x.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}x.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){x.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),x.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var mn,yn,vn=x.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Cn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Nn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=x.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=o.href}catch(Ln){yn=a.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(T)||[];if(x.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(l){var u;return o[l]=!0,x.each(e[l]||[],function(e,l){var c=l(n,r,i);return"string"!=typeof c||a||o[c]?a?!(u=c):t:(n.dataTypes.unshift(c),s(c),!1)}),u}return s(n.dataTypes[0])||!o["*"]&&s("*")}function _n(e,n){var r,i,o=x.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,l=e.indexOf(" ");return l>=0&&(i=e.slice(l,e.length),e=e.slice(0,l)),x.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&x.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?x("<div>").append(x.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Cn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":x.parseJSON,"text xml":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?_n(_n(e,x.ajaxSettings),t):_n(x.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,l,u,c,p=x.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?x(f):x.event,h=x.Deferred(),g=x.Callbacks("once memory"),m=p.statusCode||{},y={},v={},b=0,w="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return b||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else C.always(e[C.status]);return this},abort:function(e){var t=e||w;return u&&u.abort(t),k(0,t),this}};if(h.promise(C).complete=g.add,C.success=C.done,C.error=C.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=x.trim(p.dataType||"*").toLowerCase().match(T)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?"80":"443"))===(mn[3]||("http:"===mn[1]?"80":"443")))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=x.param(p.data,p.traditional)),qn(An,p,n,C),2===b)return C;l=p.global,l&&0===x.active++&&x.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Nn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(x.lastModified[o]&&C.setRequestHeader("If-Modified-Since",x.lastModified[o]),x.etag[o]&&C.setRequestHeader("If-None-Match",x.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&C.setRequestHeader("Content-Type",p.contentType),C.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)C.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,C,p)===!1||2===b))return C.abort();w="abort";for(i in{success:1,error:1,complete:1})C[i](p[i]);if(u=qn(jn,p,n,C)){C.readyState=1,l&&d.trigger("ajaxSend",[C,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){C.abort("timeout")},p.timeout));try{b=1,u.send(y,k)}catch(N){if(!(2>b))throw N;k(-1,N)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,N=n;2!==b&&(b=2,s&&clearTimeout(s),u=t,a=i||"",C.readyState=e>0?4:0,c=e>=200&&300>e||304===e,r&&(w=Mn(p,C,r)),w=On(p,w,C,c),c?(p.ifModified&&(T=C.getResponseHeader("Last-Modified"),T&&(x.lastModified[o]=T),T=C.getResponseHeader("etag"),T&&(x.etag[o]=T)),204===e||"HEAD"===p.type?N="nocontent":304===e?N="notmodified":(N=w.state,y=w.data,v=w.error,c=!v)):(v=N,(e||!N)&&(N="error",0>e&&(e=0))),C.status=e,C.statusText=(n||N)+"",c?h.resolveWith(f,[y,N,C]):h.rejectWith(f,[C,N,v]),C.statusCode(m),m=t,l&&d.trigger(c?"ajaxSuccess":"ajaxError",[C,p,c?y:v]),g.fireWith(f,[C,N]),l&&(d.trigger("ajaxComplete",[C,p]),--x.active||x.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return x.get(e,t,n,"json")},getScript:function(e,n){return x.get(e,t,n,"script")}}),x.each(["get","post"],function(e,n){x[n]=function(e,r,i,o){return x.isFunction(r)&&(o=o||i,i=r,r=t),x.ajax({url:e,type:n,dataType:o,data:r,success:i})}});function Mn(e,n,r){var i,o,a,s,l=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in l)if(l[s]&&l[s].test(o)){u.unshift(s);break}if(u[0]in r)a=u[0];else{for(s in r){if(!u[0]||e.converters[s+" "+u[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==u[0]&&u.unshift(a),r[a]):t}function On(e,t,n,r){var i,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(a=u[l+" "+o]||u["* "+o],!a)for(i in u)if(s=i.split(" "),s[1]===o&&(a=u[l+" "+s[0]]||u["* "+s[0]])){a===!0?a=u[i]:u[i]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(p){return{state:"parsererror",error:a?p:"No conversion from "+l+" to "+o}}}return{state:"success",data:t}}x.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),x.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=a.head||x("head")[0]||a.documentElement;return{send:function(t,i){n=a.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Fn=[],Bn=/(=)\?(?=&|$)|\?\?/;x.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Fn.pop()||x.expando+"_"+vn++;return this[e]=!0,e}}),x.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,l=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return l||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=x.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,l?n[l]=n[l].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||x.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Fn.push(o)),s&&x.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}x.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=x.ajaxSettings.xhr(),x.support.cors=!!Rn&&"withCredentials"in Rn,Rn=x.support.ajax=!!Rn,Rn&&x.ajaxTransport(function(n){if(!n.crossDomain||x.support.cors){var r;return{send:function(i,o){var a,s,l=n.xhr();if(n.username?l.open(n.type,n.url,n.async,n.username,n.password):l.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)l[s]=n.xhrFields[s];n.mimeType&&l.overrideMimeType&&l.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)l.setRequestHeader(s,i[s])}catch(u){}l.send(n.hasContent&&n.data||null),r=function(e,i){var s,u,c,p;try{if(r&&(i||4===l.readyState))if(r=t,a&&(l.onreadystatechange=x.noop,$n&&delete Pn[a]),i)4!==l.readyState&&l.abort();else{p={},s=l.status,u=l.getAllResponseHeaders(),"string"==typeof l.responseText&&(p.text=l.responseText);try{c=l.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,u)},n.async?4===l.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},x(e).unload($n)),Pn[a]=r),l.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+w+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Yn.exec(t),o=i&&i[3]||(x.cssNumber[e]?"":"px"),a=(x.cssNumber[e]||"px"!==o&&+r)&&Yn.exec(x.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==o){o=o||a[3],i=i||[],a=+r||1;do s=s||".5",a/=s,x.style(n.elem,e,a+o);while(s!==(s=n.cur()/r)&&1!==s&&--l)}return i&&(a=n.start=+a||+r||0,n.unit=o,n.end=i[1]?a+(i[1]+1)*i[2]:+i[2]),n}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=x.now()}function Zn(e,t,n){var r,i=(Qn[t]||[]).concat(Qn["*"]),o=0,a=i.length;for(;a>o;o++)if(r=i[o].call(n,t,e))return r}function er(e,t,n){var r,i,o=0,a=Gn.length,s=x.Deferred().always(function(){delete l.elem}),l=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,u.startTime+u.duration-t),r=n/u.duration||0,o=1-r,a=0,l=u.tweens.length;for(;l>a;a++)u.tweens[a].run(o);return s.notifyWith(e,[u,o,n]),1>o&&l?n:(s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)u.tweens[n].run(1);return t?s.resolveWith(e,[u,t]):s.rejectWith(e,[u,t]),this}}),c=u.props;for(tr(c,u.opts.specialEasing);a>o;o++)if(r=Gn[o].call(u,e,c,u.opts))return r;return x.map(c,Zn,u),x.isFunction(u.opts.start)&&u.opts.start.call(e,u),x.fx.timer(x.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function tr(e,t){var n,r,i,o,a;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=x.cssHooks[r],a&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(er,{tweener:function(e,t){x.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,l,u=this,c={},p=e.style,f=e.nodeType&&nn(e),d=x._data(e,"fxshow");n.queue||(s=x._queueHooks(e,"fx"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always(function(){u.always(function(){s.unqueued--,x.queue(e,"fx").length||s.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],"inline"===x.css(e,"display")&&"none"===x.css(e,"float")&&(x.support.inlineBlockNeedsLayout&&"inline"!==ln(e.nodeName)?p.zoom=1:p.display="inline-block")),n.overflow&&(p.overflow="hidden",x.support.shrinkWrapBlocks||u.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],Vn.exec(i)){if(delete t[r],o=o||"toggle"===i,i===(f?"hide":"show"))continue;c[r]=d&&d[r]||x.style(e,r)}if(!x.isEmptyObject(c)){d?"hidden"in d&&(f=d.hidden):d=x._data(e,"fxshow",{}),o&&(d.hidden=!f),f?x(e).show():u.done(function(){x(e).hide()}),u.done(function(){var t;x._removeData(e,"fxshow");for(t in c)x.style(e,t,c[t])});for(r in c)a=Zn(f?d[r]:0,r,u),r in d||(d[r]=a.start,f&&(a.end=a.start,a.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}x.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each(["toggle","show","hide"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),a=function(){var t=er(this,x.extend({},e),o);(i||x._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=x.timers,a=x._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=x._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=x.timers,a=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&"object"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=rr.prototype.init,x.fx.tick=function(){var e,n=x.timers,r=0;for(Xn=x.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||x.fx.stop(),Xn=t},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){Un||(Un=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(Un),Un=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){x.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,x.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},x.offset={setOffset:function(e,t,n){var r=x.css(e,"position");"static"===r&&(e.style.position="relative");var i=x(e),o=i.offset(),a=x.css(e,"top"),s=x.css(e,"left"),l=("absolute"===r||"fixed"===r)&&x.inArray("auto",[a,s])>-1,u={},c={},p,f;l?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),x.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(u.top=t.top-o.top+p),null!=t.left&&(u.left=t.left-o.left+f),"using"in t?t.using.call(e,u):i.css(u)}},x.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===x.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],"html")||(n=e.offset()),n.top+=x.css(e[0],"borderTopWidth",!0),n.left+=x.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-x.css(r,"marginTop",!0),left:t.left-n.left-x.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,"html")&&"static"===x.css(e,"position"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);x.fn[e]=function(i){return x.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?x(a).scrollLeft():o,r?o:x(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return x.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}x.each({Height:"height",Width:"width"},function(e,n){x.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){x.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return x.access(this,function(n,r,i){var o;return x.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?x.css(n,r,s):x.style(n,r,i,s)},n,a?i:t,a,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,"object"==typeof module&&module&&"object"==typeof module.exports?module.exports=x:(e.jQuery=e.$=x,"function"==typeof define&&define.amd&&define("jquery",[],function(){return x}))})(window);
  1194. // End jQuery
  1195. !function(){var n=this,t=n._,r={},e=Array.prototype,u=Object.prototype,i=Function.prototype,a=e.push,o=e.slice,c=e.concat,l=u.toString,f=u.hasOwnProperty,s=e.forEach,p=e.map,v=e.reduce,h=e.reduceRight,d=e.filter,g=e.every,m=e.some,y=e.indexOf,b=e.lastIndexOf,x=Array.isArray,_=Object.keys,w=i.bind,j=function(n){return n instanceof j?n:this instanceof j?(this._wrapped=n,void 0):new j(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=j),exports._=j):n._=j,j.VERSION="1.5.0";var A=j.each=j.forEach=function(n,t,e){if(null!=n)if(s&&n.forEach===s)n.forEach(t,e);else if(n.length===+n.length){for(var u=0,i=n.length;i>u;u++)if(t.call(e,n[u],u,n)===r)return}else for(var a in n)if(j.has(n,a)&&t.call(e,n[a],a,n)===r)return};j.map=j.collect=function(n,t,r){var e=[];return null==n?e:p&&n.map===p?n.map(t,r):(A(n,function(n,u,i){e.push(t.call(r,n,u,i))}),e)};var E="Reduce of empty array with no initial value";j.reduce=j.foldl=j.inject=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),v&&n.reduce===v)return e&&(t=j.bind(t,e)),u?n.reduce(t,r):n.reduce(t);if(A(n,function(n,i,a){u?r=t.call(e,r,n,i,a):(r=n,u=!0)}),!u)throw new TypeError(E);return r},j.reduceRight=j.foldr=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),h&&n.reduceRight===h)return e&&(t=j.bind(t,e)),u?n.reduceRight(t,r):n.reduceRight(t);var i=n.length;if(i!==+i){var a=j.keys(n);i=a.length}if(A(n,function(o,c,l){c=a?a[--i]:--i,u?r=t.call(e,r,n[c],c,l):(r=n[c],u=!0)}),!u)throw new TypeError(E);return r},j.find=j.detect=function(n,t,r){var e;return O(n,function(n,u,i){return t.call(r,n,u,i)?(e=n,!0):void 0}),e},j.filter=j.select=function(n,t,r){var e=[];return null==n?e:d&&n.filter===d?n.filter(t,r):(A(n,function(n,u,i){t.call(r,n,u,i)&&e.push(n)}),e)},j.reject=function(n,t,r){return j.filter(n,function(n,e,u){return!t.call(r,n,e,u)},r)},j.every=j.all=function(n,t,e){t||(t=j.identity);var u=!0;return null==n?u:g&&n.every===g?n.every(t,e):(A(n,function(n,i,a){return(u=u&&t.call(e,n,i,a))?void 0:r}),!!u)};var O=j.some=j.any=function(n,t,e){t||(t=j.identity);var u=!1;return null==n?u:m&&n.some===m?n.some(t,e):(A(n,function(n,i,a){return u||(u=t.call(e,n,i,a))?r:void 0}),!!u)};j.contains=j.include=function(n,t){return null==n?!1:y&&n.indexOf===y?n.indexOf(t)!=-1:O(n,function(n){return n===t})},j.invoke=function(n,t){var r=o.call(arguments,2),e=j.isFunction(t);return j.map(n,function(n){return(e?t:n[t]).apply(n,r)})},j.pluck=function(n,t){return j.map(n,function(n){return n[t]})},j.where=function(n,t,r){return j.isEmpty(t)?r?void 0:[]:j[r?"find":"filter"](n,function(n){for(var r in t)if(t[r]!==n[r])return!1;return!0})},j.findWhere=function(n,t){return j.where(n,t,!0)},j.max=function(n,t,r){if(!t&&j.isArray(n)&&n[0]===+n[0]&&n.length<65535)return Math.max.apply(Math,n);if(!t&&j.isEmpty(n))return-1/0;var e={computed:-1/0,value:-1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;a>e.computed&&(e={value:n,computed:a})}),e.value},j.min=function(n,t,r){if(!t&&j.isArray(n)&&n[0]===+n[0]&&n.length<65535)return Math.min.apply(Math,n);if(!t&&j.isEmpty(n))return 1/0;var e={computed:1/0,value:1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;a<e.computed&&(e={value:n,computed:a})}),e.value},j.shuffle=function(n){var t,r=0,e=[];return A(n,function(n){t=j.random(r++),e[r-1]=e[t],e[t]=n}),e};var F=function(n){return j.isFunction(n)?n:function(t){return t[n]}};j.sortBy=function(n,t,r){var e=F(t);return j.pluck(j.map(n,function(n,t,u){return{value:n,index:t,criteria:e.call(r,n,t,u)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.index<t.index?-1:1}),"value")};var k=function(n,t,r,e){var u={},i=F(null==t?j.identity:t);return A(n,function(t,a){var o=i.call(r,t,a,n);e(u,o,t)}),u};j.groupBy=function(n,t,r){return k(n,t,r,function(n,t,r){(j.has(n,t)?n[t]:n[t]=[]).push(r)})},j.countBy=function(n,t,r){return k(n,t,r,function(n,t){j.has(n,t)||(n[t]=0),n[t]++})},j.sortedIndex=function(n,t,r,e){r=null==r?j.identity:F(r);for(var u=r.call(e,t),i=0,a=n.length;a>i;){var o=i+a>>>1;r.call(e,n[o])<u?i=o+1:a=o}return i},j.toArray=function(n){return n?j.isArray(n)?o.call(n):n.length===+n.length?j.map(n,j.identity):j.values(n):[]},j.size=function(n){return null==n?0:n.length===+n.length?n.length:j.keys(n).length},j.first=j.head=j.take=function(n,t,r){return null==n?void 0:null==t||r?n[0]:o.call(n,0,t)},j.initial=function(n,t,r){return o.call(n,0,n.length-(null==t||r?1:t))},j.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:o.call(n,Math.max(n.length-t,0))},j.rest=j.tail=j.drop=function(n,t,r){return o.call(n,null==t||r?1:t)},j.compact=function(n){return j.filter(n,j.identity)};var R=function(n,t,r){return t&&j.every(n,j.isArray)?c.apply(r,n):(A(n,function(n){j.isArray(n)||j.isArguments(n)?t?a.apply(r,n):R(n,t,r):r.push(n)}),r)};j.flatten=function(n,t){return R(n,t,[])},j.without=function(n){return j.difference(n,o.call(arguments,1))},j.uniq=j.unique=function(n,t,r,e){j.isFunction(t)&&(e=r,r=t,t=!1);var u=r?j.map(n,r,e):n,i=[],a=[];return A(u,function(r,e){(t?e&&a[a.length-1]===r:j.contains(a,r))||(a.push(r),i.push(n[e]))}),i},j.union=function(){return j.uniq(j.flatten(arguments,!0))},j.intersection=function(n){var t=o.call(arguments,1);return j.filter(j.uniq(n),function(n){return j.every(t,function(t){return j.indexOf(t,n)>=0})})},j.difference=function(n){var t=c.apply(e,o.call(arguments,1));return j.filter(n,function(n){return!j.contains(t,n)})},j.zip=function(){return j.unzip.apply(j,o.call(arguments))},j.unzip=function(){for(var n=j.max(j.pluck(arguments,"length").concat(0)),t=new Array(n),r=0;n>r;r++)t[r]=j.pluck(arguments,""+r);return t},j.object=function(n,t){if(null==n)return{};for(var r={},e=0,u=n.length;u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},j.indexOf=function(n,t,r){if(null==n)return-1;var e=0,u=n.length;if(r){if("number"!=typeof r)return e=j.sortedIndex(n,t),n[e]===t?e:-1;e=0>r?Math.max(0,u+r):r}if(y&&n.indexOf===y)return n.indexOf(t,r);for(;u>e;e++)if(n[e]===t)return e;return-1},j.lastIndexOf=function(n,t,r){if(null==n)return-1;var e=null!=r;if(b&&n.lastIndexOf===b)return e?n.lastIndexOf(t,r):n.lastIndexOf(t);for(var u=e?r:n.length;u--;)if(n[u]===t)return u;return-1},j.range=function(n,t,r){arguments.length<=1&&(t=n||0,n=0),r=arguments[2]||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=0,i=new Array(e);e>u;)i[u++]=n,n+=r;return i};var M=function(){};j.bind=function(n,t){var r,e;if(w&&n.bind===w)return w.apply(n,o.call(arguments,1));if(!j.isFunction(n))throw new TypeError;return r=o.call(arguments,2),e=function(){if(!(this instanceof e))return n.apply(t,r.concat(o.call(arguments)));M.prototype=n.prototype;var u=new M;M.prototype=null;var i=n.apply(u,r.concat(o.call(arguments)));return Object(i)===i?i:u}},j.partial=function(n){var t=o.call(arguments,1);return function(){return n.apply(this,t.concat(o.call(arguments)))}},j.bindAll=function(n){var t=o.call(arguments,1);if(0===t.length)throw new Error("bindAll must be passed function names");return A(t,function(t){n[t]=j.bind(n[t],n)}),n},j.memoize=function(n,t){var r={};return t||(t=j.identity),function(){var e=t.apply(this,arguments);return j.has(r,e)?r[e]:r[e]=n.apply(this,arguments)}},j.delay=function(n,t){var r=o.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},j.defer=function(n){return j.delay.apply(j,[n,1].concat(o.call(arguments,1)))},j.throttle=function(n,t,r){var e,u,i,a=null,o=0;r||(r={});var c=function(){o=new Date,a=null,i=n.apply(e,u)};return function(){var l=new Date;o||r.leading!==!1||(o=l);var f=t-(l-o);return e=this,u=arguments,0>=f?(clearTimeout(a),a=null,o=l,i=n.apply(e,u)):a||r.trailing===!1||(a=setTimeout(c,f)),i}},j.debounce=function(n,t,r){var e,u=null;return function(){var i=this,a=arguments,o=function(){u=null,r||(e=n.apply(i,a))},c=r&&!u;return clearTimeout(u),u=setTimeout(o,t),c&&(e=n.apply(i,a)),e}},j.once=function(n){var t,r=!1;return function(){return r?t:(r=!0,t=n.apply(this,arguments),n=null,t)}},j.wrap=function(n,t){return function(){var r=[n];return a.apply(r,arguments),t.apply(this,r)}},j.compose=function(){var n=arguments;return function(){for(var t=arguments,r=n.length-1;r>=0;r--)t=[n[r].apply(this,t)];return t[0]}},j.after=function(n,t){return function(){return--n<1?t.apply(this,arguments):void 0}},j.keys=_||function(n){if(n!==Object(n))throw new TypeError("Invalid object");var t=[];for(var r in n)j.has(n,r)&&t.push(r);return t},j.values=function(n){var t=[];for(var r in n)j.has(n,r)&&t.push(n[r]);return t},j.pairs=function(n){var t=[];for(var r in n)j.has(n,r)&&t.push([r,n[r]]);return t},j.invert=function(n){var t={};for(var r in n)j.has(n,r)&&(t[n[r]]=r);return t},j.functions=j.methods=function(n){var t=[];for(var r in n)j.isFunction(n[r])&&t.push(r);return t.sort()},j.extend=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)n[r]=t[r]}),n},j.pick=function(n){var t={},r=c.apply(e,o.call(arguments,1));return A(r,function(r){r in n&&(t[r]=n[r])}),t},j.omit=function(n){var t={},r=c.apply(e,o.call(arguments,1));for(var u in n)j.contains(r,u)||(t[u]=n[u]);return t},j.defaults=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)n[r]===void 0&&(n[r]=t[r])}),n},j.clone=function(n){return j.isObject(n)?j.isArray(n)?n.slice():j.extend({},n):n},j.tap=function(n,t){return t(n),n};var S=function(n,t,r,e){if(n===t)return 0!==n||1/n==1/t;if(null==n||null==t)return n===t;n instanceof j&&(n=n._wrapped),t instanceof j&&(t=t._wrapped);var u=l.call(n);if(u!=l.call(t))return!1;switch(u){case"[object String]":return n==String(t);case"[object Number]":return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case"[object Date]":case"[object Boolean]":return+n==+t;case"[object RegExp]":return n.source==t.source&&n.global==t.global&&n.multiline==t.multiline&&n.ignoreCase==t.ignoreCase}if("object"!=typeof n||"object"!=typeof t)return!1;for(var i=r.length;i--;)if(r[i]==n)return e[i]==t;var a=n.constructor,o=t.constructor;if(a!==o&&!(j.isFunction(a)&&a instanceof a&&j.isFunction(o)&&o instanceof o))return!1;r.push(n),e.push(t);var c=0,f=!0;if("[object Array]"==u){if(c=n.length,f=c==t.length)for(;c--&&(f=S(n[c],t[c],r,e)););}else{for(var s in n)if(j.has(n,s)&&(c++,!(f=j.has(t,s)&&S(n[s],t[s],r,e))))break;if(f){for(s in t)if(j.has(t,s)&&!c--)break;f=!c}}return r.pop(),e.pop(),f};j.isEqual=function(n,t){return S(n,t,[],[])},j.isEmpty=function(n){if(null==n)return!0;if(j.isArray(n)||j.isString(n))return 0===n.length;for(var t in n)if(j.has(n,t))return!1;return!0},j.isElement=function(n){return!(!n||1!==n.nodeType)},j.isArray=x||function(n){return"[object Array]"==l.call(n)},j.isObject=function(n){return n===Object(n)},A(["Arguments","Function","String","Number","Date","RegExp"],function(n){j["is"+n]=function(t){return l.call(t)=="[object "+n+"]"}}),j.isArguments(arguments)||(j.isArguments=function(n){return!(!n||!j.has(n,"callee"))}),"function"!=typeof/./&&(j.isFunction=function(n){return"function"==typeof n}),j.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},j.isNaN=function(n){return j.isNumber(n)&&n!=+n},j.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"==l.call(n)},j.isNull=function(n){return null===n},j.isUndefined=function(n){return n===void 0},j.has=function(n,t){return f.call(n,t)},j.noConflict=function(){return n._=t,this},j.identity=function(n){return n},j.times=function(n,t,r){for(var e=Array(Math.max(0,n)),u=0;n>u;u++)e[u]=t.call(r,u);return e},j.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))};var I={escape:{"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","/":"&#x2F;"}};I.unescape=j.invert(I.escape);var T={escape:new RegExp("["+j.keys(I.escape).join("")+"]","g"),unescape:new RegExp("("+j.keys(I.unescape).join("|")+")","g")};j.each(["escape","unescape"],function(n){j[n]=function(t){return null==t?"":(""+t).replace(T[n],function(t){return I[n][t]})}}),j.result=function(n,t){if(null==n)return void 0;var r=n[t];return j.isFunction(r)?r.call(n):r},j.mixin=function(n){A(j.functions(n),function(t){var r=j[t]=n[t];j.prototype[t]=function(){var n=[this._wrapped];return a.apply(n,arguments),D.call(this,r.apply(j,n))}})};var N=0;j.uniqueId=function(n){var t=++N+"";return n?n+t:t},j.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var q=/(.)^/,B={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},z=/\\|'|\r|\n|\t|\u2028|\u2029/g;j.template=function(n,t,r){var e;r=j.defaults({},r,j.templateSettings);var u=new RegExp([(r.escape||q).source,(r.interpolate||q).source,(r.evaluate||q).source].join("|")+"|$","g"),i=0,a="__p+='";n.replace(u,function(t,r,e,u,o){return a+=n.slice(i,o).replace(z,function(n){return"\\"+B[n]}),r&&(a+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'"),e&&(a+="'+\n((__t=("+e+"))==null?'':__t)+\n'"),u&&(a+="';\n"+u+"\n__p+='"),i=o+t.length,t}),a+="';\n",r.variable||(a="with(obj||{}){\n"+a+"}\n"),a="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";try{e=new Function(r.variable||"obj","_",a)}catch(o){throw o.source=a,o}if(t)return e(t,j);var c=function(n){return e.call(this,n,j)};return c.source="function("+(r.variable||"obj")+"){\n"+a+"}",c},j.chain=function(n){return j(n).chain()};var D=function(n){return this._chain?j(n).chain():n};j.mixin(j),A(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=e[n];j.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!=n&&"splice"!=n||0!==r.length||delete r[0],D.call(this,r)}}),A(["concat","join","slice"],function(n){var t=e[n];j.prototype[n]=function(){return D.call(this,t.apply(this._wrapped,arguments))}}),j.extend(j.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}})}.call(this);
  1196. // End Underscore
  1197. (function(){var t=this;var e=t.Backbone;var i=[];var r=i.push;var s=i.slice;var n=i.splice;var a;if(typeof exports!=="undefined"){a=exports}else{a=t.Backbone={}}a.VERSION="1.0.0";var h=t._;if(!h&&typeof require!=="undefined")h=require("underscore");a.$=t.jQuery||t.Zepto||t.ender||t.$;a.noConflict=function(){t.Backbone=e;return this};a.emulateHTTP=false;a.emulateJSON=false;var o=a.Events={on:function(t,e,i){if(!l(this,"on",t,[e,i])||!e)return this;this._events||(this._events={});var r=this._events[t]||(this._events[t]=[]);r.push({callback:e,context:i,ctx:i||this});return this},once:function(t,e,i){if(!l(this,"once",t,[e,i])||!e)return this;var r=this;var s=h.once(function(){r.off(t,s);e.apply(this,arguments)});s._callback=e;return this.on(t,s,i)},off:function(t,e,i){var r,s,n,a,o,u,c,f;if(!this._events||!l(this,"off",t,[e,i]))return this;if(!t&&!e&&!i){this._events={};return this}a=t?[t]:h.keys(this._events);for(o=0,u=a.length;o<u;o++){t=a[o];if(n=this._events[t]){this._events[t]=r=[];if(e||i){for(c=0,f=n.length;c<f;c++){s=n[c];if(e&&e!==s.callback&&e!==s.callback._callback||i&&i!==s.context){r.push(s)}}}if(!r.length)delete this._events[t]}}return this},trigger:function(t){if(!this._events)return this;var e=s.call(arguments,1);if(!l(this,"trigger",t,e))return this;var i=this._events[t];var r=this._events.all;if(i)c(i,e);if(r)c(r,arguments);return this},stopListening:function(t,e,i){var r=this._listeners;if(!r)return this;var s=!e&&!i;if(typeof e==="object")i=this;if(t)(r={})[t._listenerId]=t;for(var n in r){r[n].off(e,i,this);if(s)delete this._listeners[n]}return this}};var u=/\s+/;var l=function(t,e,i,r){if(!i)return true;if(typeof i==="object"){for(var s in i){t[e].apply(t,[s,i[s]].concat(r))}return false}if(u.test(i)){var n=i.split(u);for(var a=0,h=n.length;a<h;a++){t[e].apply(t,[n[a]].concat(r))}return false}return true};var c=function(t,e){var i,r=-1,s=t.length,n=e[0],a=e[1],h=e[2];switch(e.length){case 0:while(++r<s)(i=t[r]).callback.call(i.ctx);return;case 1:while(++r<s)(i=t[r]).callback.call(i.ctx,n);return;case 2:while(++r<s)(i=t[r]).callback.call(i.ctx,n,a);return;case 3:while(++r<s)(i=t[r]).callback.call(i.ctx,n,a,h);return;default:while(++r<s)(i=t[r]).callback.apply(i.ctx,e)}};var f={listenTo:"on",listenToOnce:"once"};h.each(f,function(t,e){o[e]=function(e,i,r){var s=this._listeners||(this._listeners={});var n=e._listenerId||(e._listenerId=h.uniqueId("l"));s[n]=e;if(typeof i==="object")r=this;e[t](i,r,this);return this}});o.bind=o.on;o.unbind=o.off;h.extend(a,o);var d=a.Model=function(t,e){var i;var r=t||{};e||(e={});this.cid=h.uniqueId("c");this.attributes={};h.extend(this,h.pick(e,p));if(e.parse)r=this.parse(r,e)||{};if(i=h.result(this,"defaults")){r=h.defaults({},r,i)}this.set(r,e);this.changed={};this.initialize.apply(this,arguments)};var p=["url","urlRoot","collection"];h.extend(d.prototype,o,{changed:null,validationError:null,idAttribute:"id",initialize:function(){},toJSON:function(t){return h.clone(this.attributes)},sync:function(){return a.sync.apply(this,arguments)},get:function(t){return this.attributes[t]},escape:function(t){return h.escape(this.get(t))},has:function(t){return this.get(t)!=null},set:function(t,e,i){var r,s,n,a,o,u,l,c;if(t==null)return this;if(typeof t==="object"){s=t;i=e}else{(s={})[t]=e}i||(i={});if(!this._validate(s,i))return false;n=i.unset;o=i.silent;a=[];u=this._changing;this._changing=true;if(!u){this._previousAttributes=h.clone(this.attributes);this.changed={}}c=this.attributes,l=this._previousAttributes;if(this.idAttribute in s)this.id=s[this.idAttribute];for(r in s){e=s[r];if(!h.isEqual(c[r],e))a.push(r);if(!h.isEqual(l[r],e)){this.changed[r]=e}else{delete this.changed[r]}n?delete c[r]:c[r]=e}if(!o){if(a.length)this._pending=true;for(var f=0,d=a.length;f<d;f++){this.trigger("change:"+a[f],this,c[a[f]],i)}}if(u)return this;if(!o){while(this._pending){this._pending=false;this.trigger("change",this,i)}}this._pending=false;this._changing=false;return this},unset:function(t,e){return this.set(t,void 0,h.extend({},e,{unset:true}))},clear:function(t){var e={};for(var i in this.attributes)e[i]=void 0;return this.set(e,h.extend({},t,{unset:true}))},hasChanged:function(t){if(t==null)return!h.isEmpty(this.changed);return h.has(this.changed,t)},changedAttributes:function(t){if(!t)return this.hasChanged()?h.clone(this.changed):false;var e,i=false;var r=this._changing?this._previousAttributes:this.attributes;for(var s in t){if(h.isEqual(r[s],e=t[s]))continue;(i||(i={}))[s]=e}return i},previous:function(t){if(t==null||!this._previousAttributes)return null;return this._previousAttributes[t]},previousAttributes:function(){return h.clone(this._previousAttributes)},fetch:function(t){t=t?h.clone(t):{};if(t.parse===void 0)t.parse=true;var e=this;var i=t.success;t.success=function(r){if(!e.set(e.parse(r,t),t))return false;if(i)i(e,r,t);e.trigger("sync",e,r,t)};R(this,t);return this.sync("read",this,t)},save:function(t,e,i){var r,s,n,a=this.attributes;if(t==null||typeof t==="object"){r=t;i=e}else{(r={})[t]=e}if(r&&(!i||!i.wait)&&!this.set(r,i))return false;i=h.extend({validate:true},i);if(!this._validate(r,i))return false;if(r&&i.wait){this.attributes=h.extend({},a,r)}if(i.parse===void 0)i.parse=true;var o=this;var u=i.success;i.success=function(t){o.attributes=a;var e=o.parse(t,i);if(i.wait)e=h.extend(r||{},e);if(h.isObject(e)&&!o.set(e,i)){return false}if(u)u(o,t,i);o.trigger("sync",o,t,i)};R(this,i);s=this.isNew()?"create":i.patch?"patch":"update";if(s==="patch")i.attrs=r;n=this.sync(s,this,i);if(r&&i.wait)this.attributes=a;return n},destroy:function(t){t=t?h.clone(t):{};var e=this;var i=t.success;var r=function(){e.trigger("destroy",e,e.collection,t)};t.success=function(s){if(t.wait||e.isNew())r();if(i)i(e,s,t);if(!e.isNew())e.trigger("sync",e,s,t)};if(this.isNew()){t.success();return false}R(this,t);var s=this.sync("delete",this,t);if(!t.wait)r();return s},url:function(){var t=h.result(this,"urlRoot")||h.result(this.collection,"url")||U();if(this.isNew())return t;return t+(t.charAt(t.length-1)==="/"?"":"/")+encodeURIComponent(this.id)},parse:function(t,e){return t},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return this.id==null},isValid:function(t){return this._validate({},h.extend(t||{},{validate:true}))},_validate:function(t,e){if(!e.validate||!this.validate)return true;t=h.extend({},this.attributes,t);var i=this.validationError=this.validate(t,e)||null;if(!i)return true;this.trigger("invalid",this,i,h.extend(e||{},{validationError:i}));return false}});var v=["keys","values","pairs","invert","pick","omit"];h.each(v,function(t){d.prototype[t]=function(){var e=s.call(arguments);e.unshift(this.attributes);return h[t].apply(h,e)}});var g=a.Collection=function(t,e){e||(e={});if(e.url)this.url=e.url;if(e.model)this.model=e.model;if(e.comparator!==void 0)this.comparator=e.comparator;this._reset();this.initialize.apply(this,arguments);if(t)this.reset(t,h.extend({silent:true},e))};var m={add:true,remove:true,merge:true};var y={add:true,merge:false,remove:false};h.extend(g.prototype,o,{model:d,initialize:function(){},toJSON:function(t){return this.map(function(e){return e.toJSON(t)})},sync:function(){return a.sync.apply(this,arguments)},add:function(t,e){return this.set(t,h.defaults(e||{},y))},remove:function(t,e){t=h.isArray(t)?t.slice():[t];e||(e={});var i,r,s,n;for(i=0,r=t.length;i<r;i++){n=this.get(t[i]);if(!n)continue;delete this._byId[n.id];delete this._byId[n.cid];s=this.indexOf(n);this.models.splice(s,1);this.length--;if(!e.silent){e.index=s;n.trigger("remove",n,this,e)}this._removeReference(n)}return this},set:function(t,e){e=h.defaults(e||{},m);if(e.parse)t=this.parse(t,e);if(!h.isArray(t))t=t?[t]:[];var i,s,a,o,u,l;var c=e.at;var f=this.comparator&&c==null&&e.sort!==false;var d=h.isString(this.comparator)?this.comparator:null;var p=[],v=[],g={};for(i=0,s=t.length;i<s;i++){if(!(a=this._prepareModel(t[i],e)))continue;if(u=this.get(a)){if(e.remove)g[u.cid]=true;if(e.merge){u.set(a.attributes,e);if(f&&!l&&u.hasChanged(d))l=true}}else if(e.add){p.push(a);a.on("all",this._onModelEvent,this);this._byId[a.cid]=a;if(a.id!=null)this._byId[a.id]=a}}if(e.remove){for(i=0,s=this.length;i<s;++i){if(!g[(a=this.models[i]).cid])v.push(a)}if(v.length)this.remove(v,e)}if(p.length){if(f)l=true;this.length+=p.length;if(c!=null){n.apply(this.models,[c,0].concat(p))}else{r.apply(this.models,p)}}if(l)this.sort({silent:true});if(e.silent)return this;for(i=0,s=p.length;i<s;i++){(a=p[i]).trigger("add",a,this,e)}if(l)this.trigger("sort",this,e);return this},reset:function(t,e){e||(e={});for(var i=0,r=this.models.length;i<r;i++){this._removeReference(this.models[i])}e.previousModels=this.models;this._reset();this.add(t,h.extend({silent:true},e));if(!e.silent)this.trigger("reset",this,e);return this},push:function(t,e){t=this._prepareModel(t,e);this.add(t,h.extend({at:this.length},e));return t},pop:function(t){var e=this.at(this.length-1);this.remove(e,t);return e},unshift:function(t,e){t=this._prepareModel(t,e);this.add(t,h.extend({at:0},e));return t},shift:function(t){var e=this.at(0);this.remove(e,t);return e},slice:function(t,e){return this.models.slice(t,e)},get:function(t){if(t==null)return void 0;return this._byId[t.id!=null?t.id:t.cid||t]},at:function(t){return this.models[t]},where:function(t,e){if(h.isEmpty(t))return e?void 0:[];return this[e?"find":"filter"](function(e){for(var i in t){if(t[i]!==e.get(i))return false}return true})},findWhere:function(t){return this.where(t,true)},sort:function(t){if(!this.comparator)throw new Error("Cannot sort a set without a comparator");t||(t={});if(h.isString(this.comparator)||this.comparator.length===1){this.models=this.sortBy(this.comparator,this)}else{this.models.sort(h.bind(this.comparator,this))}if(!t.silent)this.trigger("sort",this,t);return this},sortedIndex:function(t,e,i){e||(e=this.comparator);var r=h.isFunction(e)?e:function(t){return t.get(e)};return h.sortedIndex(this.models,t,r,i)},pluck:function(t){return h.invoke(this.models,"get",t)},fetch:function(t){t=t?h.clone(t):{};if(t.parse===void 0)t.parse=true;var e=t.success;var i=this;t.success=function(r){var s=t.reset?"reset":"set";i[s](r,t);if(e)e(i,r,t);i.trigger("sync",i,r,t)};R(this,t);return this.sync("read",this,t)},create:function(t,e){e=e?h.clone(e):{};if(!(t=this._prepareModel(t,e)))return false;if(!e.wait)this.add(t,e);var i=this;var r=e.success;e.success=function(s){if(e.wait)i.add(t,e);if(r)r(t,s,e)};t.save(null,e);return t},parse:function(t,e){return t},clone:function(){return new this.constructor(this.models)},_reset:function(){this.length=0;this.models=[];this._byId={}},_prepareModel:function(t,e){if(t instanceof d){if(!t.collection)t.collection=this;return t}e||(e={});e.collection=this;var i=new this.model(t,e);if(!i._validate(t,e)){this.trigger("invalid",this,t,e);return false}return i},_removeReference:function(t){if(this===t.collection)delete t.collection;t.off("all",this._onModelEvent,this)},_onModelEvent:function(t,e,i,r){if((t==="add"||t==="remove")&&i!==this)return;if(t==="destroy")this.remove(e,r);if(e&&t==="change:"+e.idAttribute){delete this._byId[e.previous(e.idAttribute)];if(e.id!=null)this._byId[e.id]=e}this.trigger.apply(this,arguments)}});var _=["forEach","each","map","collect","reduce","foldl","inject","reduceRight","foldr","find","detect","filter","select","reject","every","all","some","any","include","contains","invoke","max","min","toArray","size","first","head","take","initial","rest","tail","drop","last","without","indexOf","shuffle","lastIndexOf","isEmpty","chain"];h.each(_,function(t){g.prototype[t]=function(){var e=s.call(arguments);e.unshift(this.models);return h[t].apply(h,e)}});var w=["groupBy","countBy","sortBy"];h.each(w,function(t){g.prototype[t]=function(e,i){var r=h.isFunction(e)?e:function(t){return t.get(e)};return h[t](this.models,r,i)}});var b=a.View=function(t){this.cid=h.uniqueId("view");this._configure(t||{});this._ensureElement();this.initialize.apply(this,arguments);this.delegateEvents()};var x=/^(\S+)\s*(.*)$/;var E=["model","collection","el","id","attributes","className","tagName","events"];h.extend(b.prototype,o,{tagName:"div",$:function(t){return this.$el.find(t)},initialize:function(){},render:function(){return this},remove:function(){this.$el.remove();this.stopListening();return this},setElement:function(t,e){if(this.$el)this.undelegateEvents();this.$el=t instanceof a.$?t:a.$(t);this.el=this.$el[0];if(e!==false)this.delegateEvents();return this},delegateEvents:function(t){if(!(t||(t=h.result(this,"events"))))return this;this.undelegateEvents();for(var e in t){var i=t[e];if(!h.isFunction(i))i=this[t[e]];if(!i)continue;var r=e.match(x);var s=r[1],n=r[2];i=h.bind(i,this);s+=".delegateEvents"+this.cid;if(n===""){this.$el.on(s,i)}else{this.$el.on(s,n,i)}}return this},undelegateEvents:function(){this.$el.off(".delegateEvents"+this.cid);return this},_configure:function(t){if(this.options)t=h.extend({},h.result(this,"options"),t);h.extend(this,h.pick(t,E));this.options=t},_ensureElement:function(){if(!this.el){var t=h.extend({},h.result(this,"attributes"));if(this.id)t.id=h.result(this,"id");if(this.className)t["class"]=h.result(this,"className");var e=a.$("<"+h.result(this,"tagName")+">").attr(t);this.setElement(e,false)}else{this.setElement(h.result(this,"el"),false)}}});a.sync=function(t,e,i){var r=k[t];h.defaults(i||(i={}),{emulateHTTP:a.emulateHTTP,emulateJSON:a.emulateJSON});var s={type:r,dataType:"json"};if(!i.url){s.url=h.result(e,"url")||U()}if(i.data==null&&e&&(t==="create"||t==="update"||t==="patch")){s.contentType="application/json";s.data=JSON.stringify(i.attrs||e.toJSON(i))}if(i.emulateJSON){s.contentType="application/x-www-form-urlencoded";s.data=s.data?{model:s.data}:{}}if(i.emulateHTTP&&(r==="PUT"||r==="DELETE"||r==="PATCH")){s.type="POST";if(i.emulateJSON)s.data._method=r;var n=i.beforeSend;i.beforeSend=function(t){t.setRequestHeader("X-HTTP-Method-Override",r);if(n)return n.apply(this,arguments)}}if(s.type!=="GET"&&!i.emulateJSON){s.processData=false}if(s.type==="PATCH"&&window.ActiveXObject&&!(window.external&&window.external.msActiveXFilteringEnabled)){s.xhr=function(){return new ActiveXObject("Microsoft.XMLHTTP")}}var o=i.xhr=a.ajax(h.extend(s,i));e.trigger("request",e,o,i);return o};var k={create:"POST",update:"PUT",patch:"PATCH","delete":"DELETE",read:"GET"};a.ajax=function(){return a.$.ajax.apply(a.$,arguments)};var S=a.Router=function(t){t||(t={});if(t.routes)this.routes=t.routes;this._bindRoutes();this.initialize.apply(this,arguments)};var $=/\((.*?)\)/g;var T=/(\(\?)?:\w+/g;var H=/\*\w+/g;var A=/[\-{}\[\]+?.,\\\^$|#\s]/g;h.extend(S.prototype,o,{initialize:function(){},route:function(t,e,i){if(!h.isRegExp(t))t=this._routeToRegExp(t);if(h.isFunction(e)){i=e;e=""}if(!i)i=this[e];var r=this;a.history.route(t,function(s){var n=r._extractParameters(t,s);i&&i.apply(r,n);r.trigger.apply(r,["route:"+e].concat(n));r.trigger("route",e,n);a.history.trigger("route",r,e,n)});return this},navigate:function(t,e){a.history.navigate(t,e);return this},_bindRoutes:function(){if(!this.routes)return;this.routes=h.result(this,"routes");var t,e=h.keys(this.routes);while((t=e.pop())!=null){this.route(t,this.routes[t])}},_routeToRegExp:function(t){t=t.replace(A,"\\$&").replace($,"(?:$1)?").replace(T,function(t,e){return e?t:"([^/]+)"}).replace(H,"(.*?)");return new RegExp("^"+t+"$")},_extractParameters:function(t,e){var i=t.exec(e).slice(1);return h.map(i,function(t){return t?decodeURIComponent(t):null})}});var I=a.History=function(){this.handlers=[];h.bindAll(this,"checkUrl");if(typeof window!=="undefined"){this.location=window.location;this.history=window.history}};var N=/^[#\/]|\s+$/g;var P=/^\/+|\/+$/g;var O=/msie [\w.]+/;var C=/\/$/;I.started=false;h.extend(I.prototype,o,{interval:50,getHash:function(t){var e=(t||this).location.href.match(/#(.*)$/);return e?e[1]:""},getFragment:function(t,e){if(t==null){if(this._hasPushState||!this._wantsHashChange||e){t=this.location.pathname;var i=this.root.replace(C,"");if(!t.indexOf(i))t=t.substr(i.length)}else{t=this.getHash()}}return t.replace(N,"")},start:function(t){if(I.started)throw new Error("Backbone.history has already been started");I.started=true;this.options=h.extend({},{root:"/"},this.options,t);this.root=this.options.root;this._wantsHashChange=this.options.hashChange!==false;this._wantsPushState=!!this.options.pushState;this._hasPushState=!!(this.options.pushState&&this.history&&this.history.pushState);var e=this.getFragment();var i=document.documentMode;var r=O.exec(navigator.userAgent.toLowerCase())&&(!i||i<=7);this.root=("/"+this.root+"/").replace(P,"/");if(r&&this._wantsHashChange){this.iframe=a.$('<iframe src="javascript:0" tabindex="-1" />').hide().appendTo("body")[0].contentWindow;this.navigate(e)}if(this._hasPushState){a.$(window).on("popstate",this.checkUrl)}else if(this._wantsHashChange&&"onhashchange"in window&&!r){a.$(window).on("hashchange",this.checkUrl)}else if(this._wantsHashChange){this._checkUrlInterval=setInterval(this.checkUrl,this.interval)}this.fragment=e;var s=this.location;var n=s.pathname.replace(/[^\/]$/,"$&/")===this.root;if(this._wantsHashChange&&this._wantsPushState&&!this._hasPushState&&!n){this.fragment=this.getFragment(null,true);this.location.replace(this.root+this.location.search+"#"+this.fragment);return true}else if(this._wantsPushState&&this._hasPushState&&n&&s.hash){this.fragment=this.getHash().replace(N,"");this.history.replaceState({},document.title,this.root+this.fragment+s.search)}if(!this.options.silent)return this.loadUrl()},stop:function(){a.$(window).off("popstate",this.checkUrl).off("hashchange",this.checkUrl);clearInterval(this._checkUrlInterval);I.started=false},route:function(t,e){this.handlers.unshift({route:t,callback:e})},checkUrl:function(t){var e=this.getFragment();if(e===this.fragment&&this.iframe){e=this.getFragment(this.getHash(this.iframe))}if(e===this.fragment)return false;if(this.iframe)this.navigate(e);this.loadUrl()||this.loadUrl(this.getHash())},loadUrl:function(t){var e=this.fragment=this.getFragment(t);var i=h.any(this.handlers,function(t){if(t.route.test(e)){t.callback(e);return true}});return i},navigate:function(t,e){if(!I.started)return false;if(!e||e===true)e={trigger:e};t=this.getFragment(t||"");if(this.fragment===t)return;this.fragment=t;var i=this.root+t;if(this._hasPushState){this.history[e.replace?"replaceState":"pushState"]({},document.title,i)}else if(this._wantsHashChange){this._updateHash(this.location,t,e.replace);if(this.iframe&&t!==this.getFragment(this.getHash(this.iframe))){if(!e.replace)this.iframe.document.open().close();this._updateHash(this.iframe.location,t,e.replace)}}else{return this.location.assign(i)}if(e.trigger)this.loadUrl(t)},_updateHash:function(t,e,i){if(i){var r=t.href.replace(/(javascript:|#).*$/,"");t.replace(r+"#"+e)}else{t.hash="#"+e}}});a.history=new I;var j=function(t,e){var i=this;var r;if(t&&h.has(t,"constructor")){r=t.constructor}else{r=function(){return i.apply(this,arguments)}}h.extend(r,i,e);var s=function(){this.constructor=r};s.prototype=i.prototype;r.prototype=new s;if(t)h.extend(r.prototype,t);r.__super__=i.prototype;return r};d.extend=g.extend=S.extend=b.extend=I.extend=j;var U=function(){throw new Error('A "url" property or function must be specified')};var R=function(t,e){var i=e.error;e.error=function(r){if(i)i(t,r,e);t.trigger("error",t,r,e)}}}).call(this);
  1198. // End Backbone
  1199. (function(e,t){if(typeof define==="function"&&define.amd){define(["underscore","backbone"],function(n,r){return t(n||e._,r||e.Backbone)})}else{t(_,Backbone)}})(this,function(e,t){function n(){return((1+Math.random())*65536|0).toString(16).substring(1)}function r(){return n()+n()+"-"+n()+"-"+n()+"-"+n()+"-"+n()+n()+n()}t.LocalStorage=window.Store=function(e){this.name=e;var t=this.localStorage().getItem(this.name);this.records=t&&t.split(",")||[]};e.extend(t.LocalStorage.prototype,{save:function(){this.localStorage().setItem(this.name,this.records.join(","))},create:function(e){if(!e.id){e.id=r();e.set(e.idAttribute,e.id)}this.localStorage().setItem(this.name+"-"+e.id,JSON.stringify(e));this.records.push(e.id.toString());this.save();return this.find(e)},update:function(t){this.localStorage().setItem(this.name+"-"+t.id,JSON.stringify(t));if(!e.include(this.records,t.id.toString()))this.records.push(t.id.toString());this.save();return this.find(t)},find:function(e){return this.jsonData(this.localStorage().getItem(this.name+"-"+e.id))},findAll:function(){return e(this.records).chain().map(function(e){return this.jsonData(this.localStorage().getItem(this.name+"-"+e))},this).compact().value()},destroy:function(t){if(t.isNew())return false;this.localStorage().removeItem(this.name+"-"+t.id);this.records=e.reject(this.records,function(e){return e===t.id.toString()});this.save();return t},localStorage:function(){return localStorage},jsonData:function(e){return e&&JSON.parse(e)}});t.LocalStorage.sync=window.Store.sync=t.localSync=function(e,t,n){var r=t.localStorage||t.collection.localStorage;var i,s,o=$.Deferred&&$.Deferred();try{switch(e){case"read":i=t.id!=undefined?r.find(t):r.findAll();break;case"create":i=r.create(t);break;case"update":i=r.update(t);break;case"delete":i=r.destroy(t);break}}catch(u){if(u.code===DOMException.QUOTA_EXCEEDED_ERR&&window.localStorage.length===0)s="Private browsing is unsupported";else s=u.message}if(i){t.trigger("sync",t,i,n);if(n&&n.success)n.success(i);if(o)o.resolve(i)}else{s=s?s:"Record Not Found";if(n&&n.error)n.error(s);if(o)o.reject(s)}if(n&&n.complete)n.complete(i);return o&&o.promise()};t.ajaxSync=t.sync;t.getSyncMethod=function(e){if(e.localStorage||e.collection&&e.collection.localStorage){return t.localSync}return t.ajaxSync};t.sync=function(e,n,r){return t.getSyncMethod(n).apply(this,[e,n,r])};return t.LocalStorage})
  1200. // End localStorage
  1201. // ------ End libraries ------
  1202. $ = jQuery;
  1203. })();
  1204. CookieCheat.miscVars.cssText = "" +
  1205. "<style>" +
  1206. "#tabs" +
  1207. "{" +
  1208. "width: 100%;" +
  1209. "}" +
  1210. "#hitLabel" +
  1211. "{" +
  1212. "font-size:2em;" +
  1213. "border-color:#f00;" +
  1214. "font-weight:bold;" +
  1215. "opacity:1;" +
  1216. "}" +
  1217. "#shouldLabel" +
  1218. "{" +
  1219. "font-size:2em;" +
  1220. "font-weight:bold;" +
  1221. "opacity:1;" +
  1222. "}" +
  1223. "#shouldLabel:hover" +
  1224. "{" +
  1225. "cursor:pointer;" +
  1226. "}" +
  1227. "#hitLabel:hover" +
  1228. "{" +
  1229. "color:#FF5555;" +
  1230. "cursor:pointer;" +
  1231. "}" +
  1232. ".superTabBtn.selectedTab" +
  1233. "{" +
  1234. "background-color:#C9C9C9 !important;" +
  1235. "box-shadow:2px 2px 5px rgba(0, 0, 0, 0.6) inset, -1px -1px 3px rgba(0, 0, 0, 0.8) inset !important" +
  1236. "}" +
  1237. ".superTabBtn" +
  1238. "{" +
  1239. "width: 33.333333333333333333333333333333333333333333333333333%;" +
  1240. "font-size: 30px;" +
  1241. "}" +
  1242. ".superRadioBtn" +
  1243. "{" +
  1244. "color: #444 !important;" +
  1245. "background-color: white !important;" +
  1246. "}" +
  1247. ".superRadioBtn:hover" +
  1248. "{" +
  1249. "color: white !important;" +
  1250. "background-color: #444 !important;" +
  1251. "}" +
  1252. ".tabElem" +
  1253. "{" +
  1254. "border:solid 2px;" +
  1255. "background-color:#333;" +
  1256. "padding:10px 10px;" +
  1257. "font-family:\"Kavoon\";" +
  1258. "margin-top:5px;" +
  1259. "margin-bottom:5px;" +
  1260. "}" +
  1261. "input[type=text]:focus" +
  1262. "{" +
  1263. "outline:0;" +
  1264. "}" +
  1265. ".tabElem:hover" +
  1266. "{" +
  1267. "background-color:#555;" +
  1268. "}" +
  1269. ".tabElemDone" +
  1270. "{" +
  1271. "border:solid 2px;" +
  1272. "background: #4DBD33;" +
  1273. "background: -webkit-linear-gradient(left, #4DBD33, #395D33);" +
  1274. "background: -moz-linear-gradient(left, #4DBD33, #395D33);" +
  1275. "background: -ms-linear-gradient(left, #4DBD33, #395D33);" +
  1276. "background: -o-linear-gradient(left, #4DBD33, #395D33);" +
  1277. "background: linear-gradient(left, #4DBD33, #395D33);" +
  1278. "padding:10px 10px;" +
  1279. "font-family:\"Kavoon\";" +
  1280. "margin-top:5px;" +
  1281. "margin-bottom:5px;" +
  1282. "}" +
  1283. ".tabElemDone:hover" +
  1284. "{" +
  1285. "background: #6FDF55;" +
  1286. "background: -webkit-linear-gradient(left, #6FDF55, #5B7F55);" +
  1287. "background: -moz-linear-gradient(left, #6FDF55, #5B7F55);" +
  1288. "background: -ms-linear-gradient(left, #6FDF55, #5B7F55);" +
  1289. "background: -o-linear-gradient(left, #6FDF55, #5B7F55);" +
  1290. "background: linear-gradient(left, #6FDF55, #5B7F55);" +
  1291. "}" +
  1292. ".superBtn" +
  1293. "{" +
  1294. "border:0;" +
  1295. "font-family:\"Kavoon\";" +
  1296. "box-shadow:2px 2px 5px;" +
  1297. "padding:2px;" +
  1298. "background-color:#fff;" +
  1299. "}" +
  1300. ".btns" +
  1301. "{" +
  1302. "float:right;" +
  1303. "}" +
  1304. ".superFont" +
  1305. "{" +
  1306. "font-family:\"Kavoon\"" +
  1307. "}" +
  1308. ".currentState" +
  1309. "{" +
  1310. "border:1px solid;" +
  1311. "border-radius:100px;" +
  1312. "padding:2px;" +
  1313. "box-shadow:1px 1px 5px;" +
  1314. "}" +
  1315. ".currentState.superBad" +
  1316. "{" +
  1317. "background-color:#EEB4B4;" +
  1318. "}" +
  1319. ".currentState.superGood" +
  1320. "{" +
  1321. "background-color:#BCED91;" +
  1322. "}" +
  1323. ".superBtn:active" +
  1324. "{" +
  1325. "box-shadow:1px 1px 2px #000 inset;" +
  1326. "}" +
  1327. ".superBtn:hover" +
  1328. "{" +
  1329. "cursor:pointer;" +
  1330. "background-color:#eee;" +
  1331. "text-decoration:underline;" +
  1332. "border:0;" +
  1333. "}" +
  1334. ".superGood, .superGood:hover" +
  1335. "{" +
  1336. "font-family:\"Kavoon\";" +
  1337. "color:#4CBB17 !important;" +
  1338. "border-color:#4CBB17;" +
  1339. "}" +
  1340. ".superBad, .superBad:hover" +
  1341. "{" +
  1342. "font-family:\"Kavoon\";" +
  1343. "color:#CD0000;" +
  1344. "border-color:#CD0000;" +
  1345. "}" +
  1346. ".superWarning, .superWarning:hover" +
  1347. "{" +
  1348. "font-family:\"Kavoon\";" +
  1349. "color:#EE7621;" +
  1350. "border-color:#EE7621;" +
  1351. "}" +
  1352. "#cheatButton" +
  1353. "{" +
  1354. "text-decoration:underline;" +
  1355. "padding:14px 16px 10px 0px;" +
  1356. "top:0px;" +
  1357. "right:-16px;" +
  1358. "}" +
  1359. "#cheatButton:hover" +
  1360. "{" +
  1361. "right:-8px;" +
  1362. "text-decoration:underline;" +
  1363. "}" +
  1364. ".simpleInfo" +
  1365. "{" +
  1366. "border:solid 2px;" +
  1367. "background-color:#333;" +
  1368. "padding:5px 10px;" +
  1369. "display:inline-block;" +
  1370. "}" +
  1371. ".superRight" +
  1372. "{" +
  1373. "float:right" +
  1374. "}" +
  1375. ".imAState" +
  1376. "{" +
  1377. "margin-left:10px;" +
  1378. "}" +
  1379. "#newForm, #newUpgradeForm, #newSaveForm" +
  1380. "{" +
  1381. "border:2px solid;" +
  1382. "padding:10px;" +
  1383. "width:50%;" +
  1384. "margin:0 auto;" +
  1385. "box-shadow:5px 5px 10px;" +
  1386. "background-color:#222;" +
  1387. "}" +
  1388. "#newAutoBuyBuildingsButton" +
  1389. "{" +
  1390. "width:75%;" +
  1391. "margin:0 auto;" +
  1392. "}" +
  1393. ".signatureNinetainedo" +
  1394. "{" +
  1395. "font-size:120%;" +
  1396. "}" +
  1397. "#upgradesListContainer, #buildingsListContainer, #savesListContainer, #choicesListContainer" +
  1398. "{" +
  1399. "border:2px white solid;" +
  1400. "box-shadow:5px 5px 10px;" +
  1401. "padding:5px;" +
  1402. "overflow:auto;" +
  1403. "max-height:500px" +
  1404. "}" +
  1405. ".superHidden" +
  1406. '{' +
  1407. "display:none;" +
  1408. '}' +
  1409. "</style>";
  1410. CookieCheat.miscVars.buildingTemplate = '<span class="superGood buildingName"></span> <span class="imAState howManyBought"></span> <span class="imAState">State :</span> <span class="superGood goodState">ON</span>/<span class="badState superBad currentState">OFF</span>' +
  1411. '<div class="btns">' +
  1412. '<a class="superBtn superGood myGoBtn">Go</a> <a class="superBtn superWarning myPauseBtn">Pause</a> <a class="superBtn superBad myRemoveBtn">Remove</a>' +
  1413. '</div>';
  1414. CookieCheat.miscVars.upgradeTemplate = '<span class="superGood upgradeName"></span> <span class="imAState unlockedOrNot"></span> <span class="imAState">State :</span> <span class="superGood goodState">ON</span>/<span class="badState superBad currentState">OFF</span>' +
  1415. '<div class="btns">' +
  1416. '<a class="superBtn superGood myGoBtn">Go</a> <a class="superBtn superWarning myPauseBtn">Pause</a> <a class="superBtn superBad myRemoveBtn">Remove</a>' +
  1417. '</div>';
  1418. CookieCheat.miscVars.saveTemplate = '<span class="superGood saveName""></span><input type="text" class="enterNameSave" class="superFont" style="display:none;></input> <span class="imAState saveDate"></span>' +
  1419. '<div class="btns">' +
  1420. '<a class="superBtn superWarning mySaveHereBtn">Save current game here</a> <a class="superBtn superGood myLoadBtn">Load</a> <a class="superBtn superWarning myExportBtn">Export</a> <a class="superBtn superBad myRemoveBtn">Remove</a>' +
  1421. '</div>';
  1422. CookieCheat.miscVars.specialTemplate = '<div class="tabElem"><div style="height:20px;text-align:center;padding:10px">' +
  1423. '<a class="superBtn superGood myGoAllBtn" style="padding:10px;font-size:16px;margin:10px;">Go all !</a> <a class="superBtn superWarning myPauseAllBtn" style="padding:10px;font-size:16px;margin:10px;">Pause all !</a> <a class="superBtn superBad myRemoveAllBtn" style="padding:10px;font-size:16px;margin:10px;">Remove all !</a> <a class="superBtn superBad myRemoveDoneBtn" style="padding:10px;font-size:16px;margin:10px;">Remove completed !</a>' +
  1424. '</div></div>';
  1425. CookieCheat.miscVars.choiceTemplate = '<span class="superGood choiceName"></span> <span class="imAState activeOrNot"></span> <span class="imAState">State :</span> <span class="superGood goodState">ON</span>/<span class="badState superBad currentState">OFF</span>' +
  1426. '<div class="btns">' +
  1427. '<a class="superBtn superGood myToggleBtn">Toggle</a> <a class="superBtn superWarning mySpawnBtn">Spawn !</a>' +
  1428. '</div>';
  1429. CookieCheat.miscVars.newGame = "MS4wNDExfHwxMzkyNTkwNzE3Njk4OzEzOTI1OTA3MTc3MzI7MTM5MjU5MDcyMTA3OHwxMTExMTEwMHwwOzA7MDswOzA7MDstMTstMTswOzA7MDswOzA7MDswOzA7MDswOzA7MDswOzA7dmFsZW50aW5lczt8MCwwLDAsMDswLDAsMCwwOzAsMCwwLDA7MCwwLDAsMDswLDAsMCwwOzAsMCwwLDA7MCwwLDAsMDswLDAsMCwwOzAsMCwwLDA7MCwwLDAsMDswLDAsMCwwO3wyMjUxNzk5ODEzNjg1MjQ5OzIyNTE3OTk4MTM2ODUyNDk7MjI1MTc5OTgxMzY4NTI0OTsyMjUxNzk5ODEzNjg1MjQ5OzIyNTE3OTk4MTM2ODUyNDk7MjI1MTc5OTgxMzY4NTI0OTsyMjUxNzk5ODEzNjg1MjQ5OzIwOTcxNTN8MjI1MTc5OTgxMzY4NTI0OTsyMjUxNzk5ODEzNjg1MjQ5OzQyOTQ5NjcyOTc%3D%21END%21";
  1430. CookieCheat.addCSS = function () {
  1431. $("head").append(CookieCheat.miscVars.cssText);
  1432. };
  1433. CookieCheat.initModels = function () {
  1434. CookieCheat.Models = {
  1435. AutoClickWrinklersModel: Backbone.Model.extend({
  1436. initialize: function() {
  1437. if (this.get("count") !== 0)
  1438. this.set({count: 0});
  1439. if (this.get("running") !== false)
  1440. this.set({running:false});
  1441. if (!_.isUndefined(localStorage["CookieClickerCheatsAutoClickWrinklers"])) {
  1442. this.set(JSON.parse(localStorage["CookieClickerCheatsAutoClickWrinklers"]));
  1443. }
  1444. this.save();
  1445. this.set({
  1446. intervalId: 0
  1447. });
  1448. if (typeof this.get("timeOut") === "undefined")
  1449. this.set({timeOut: 1000});
  1450. if (this.get("running"))
  1451. this.go();
  1452. },
  1453. save: function () {
  1454. localStorage["CookieClickerCheatsAutoClickWrinklers"] = JSON.stringify(this.toJSON());
  1455. },
  1456. go: function() {
  1457. var that = this;
  1458. var t = function () {
  1459. var tmpCount = 0;
  1460. _.each(Game.wrinklers, function (w) {
  1461. if (w.phase > 0 && w.hp > 0 && w.sucked > 0) {
  1462. w.hp = 0;
  1463. tmpCount++;
  1464. }
  1465. });
  1466. that.set({
  1467. count: that.get("count") + tmpCount
  1468. });
  1469. var tmp = setTimeout(t, that.get("timeOut"));
  1470. that.set({intervalId:tmp});
  1471. };
  1472. var tmp = setTimeout(t, that.get("timeOut"));
  1473. this.set({intervalId:tmp, running:true});
  1474. this.save();
  1475. },
  1476. stop: function() {
  1477. var that = this;
  1478. if (typeof that.get("intervalId") !== "undefined")
  1479. clearTimeout(that.get("intervalId"));
  1480. that.set({running:false});
  1481. this.save();
  1482. },
  1483. reset: function () {
  1484. this.stop();
  1485. this.set({
  1486. running: false,
  1487. count: 0,
  1488. timeOut: 1000
  1489. });
  1490. }
  1491. }),
  1492. AutoClickModel: Backbone.Model.extend({
  1493. initialize: function() {
  1494. if (this.get("count") !== 0)
  1495. this.set({count: 0});
  1496. if (this.get("running") !== false)
  1497. this.set({running:false});
  1498. if (!_.isUndefined(localStorage["CookieClickerCheatsAutoClick"])) {
  1499. this.set(JSON.parse(localStorage["CookieClickerCheatsAutoClick"]));
  1500. }
  1501. this.save();
  1502. this.set({
  1503. intervalId: 0
  1504. });
  1505. if (typeof this.get("timeOut") === "undefined")
  1506. this.set({timeOut: 50});
  1507. if (this.get("running"))
  1508. this.go();
  1509. },
  1510. save: function () {
  1511. localStorage["CookieClickerCheatsAutoClick"] = JSON.stringify(this.toJSON());
  1512. },
  1513. go: function() {
  1514. var that = this;
  1515. var t = function () {
  1516. Game.ClickCookie();
  1517. that.set({
  1518. count: that.get("count") + 1
  1519. });
  1520. var tmp = setTimeout(t, that.get("timeOut"));
  1521. that.set({intervalId:tmp});
  1522. };
  1523. var tmp = setTimeout(t, that.get("timeOut"));
  1524. this.set({intervalId:tmp, running:true});
  1525. this.save();
  1526. },
  1527. stop: function() {
  1528. var that = this;
  1529. if (typeof that.get("intervalId") !== "undefined")
  1530. clearTimeout(that.get("intervalId"));
  1531. that.set({running:false});
  1532. this.save();
  1533. },
  1534. reset: function () {
  1535. this.stop();
  1536. this.set({
  1537. running: false,
  1538. count: 0,
  1539. timeOut: 50
  1540. });
  1541. }
  1542. }),
  1543. AutoSpawnModel: Backbone.Model.extend({
  1544. initialize: function() {
  1545. if (this.get("count") !== 0)
  1546. this.set({count: 0});
  1547. if (this.get("running") !== false)
  1548. this.set({running:false});
  1549. if (!_.isUndefined(localStorage["CookieClickerCheatsAutoSpawn"])) {
  1550. this.set(JSON.parse(localStorage["CookieClickerCheatsAutoSpawn"]));
  1551. }
  1552. this.save();
  1553. this.set({
  1554. intervalId: 0
  1555. });
  1556. if (typeof this.get("timeOut") === "undefined")
  1557. this.set({timeOut: 1000 * 60 * 10});
  1558. if (this.get("running"))
  1559. this.go();
  1560. },
  1561. save: function () {
  1562. localStorage["CookieClickerCheatsAutoSpawn"] = JSON.stringify(this.toJSON());
  1563. },
  1564. go: function() {
  1565. var that = this;
  1566. var t = function () {
  1567. Game.goldenCookie.life = 0;
  1568. Game.goldenCookie.time = Game.goldenCookie.minTime;
  1569. Game.goldenCookie.spawn();
  1570. that.set({
  1571. count: that.get("count") + 1
  1572. });
  1573. var tmp = setTimeout(t, that.get("timeOut"));
  1574. that.set({intervalId:tmp});
  1575. };
  1576. var tmp = setTimeout(t, that.get("timeOut"));
  1577. this.set({intervalId:tmp, running:true});
  1578. this.save();
  1579. },
  1580. stop: function() {
  1581. var that = this;
  1582. if (typeof that.get("intervalId") !== "undefined")
  1583. clearTimeout(that.get("intervalId"));
  1584. that.set({running:false});
  1585. this.save();
  1586. },
  1587. reset: function () {
  1588. this.stop();
  1589. this.set({
  1590. running: false,
  1591. count: 0,
  1592. timeOut: 50
  1593. });
  1594. }
  1595. }),
  1596. GoldenSpawnModel: Backbone.Model.extend({
  1597. initialize: function() {
  1598. if (this.get("count") !== 0)
  1599. this.set({count: 0});
  1600. },
  1601. incr: function() {
  1602. this.set({
  1603. count: this.get("count") + 1
  1604. });
  1605. },
  1606. reset: function () {
  1607. this.set({
  1608. count: 0
  1609. });
  1610. }
  1611. }),
  1612. AutoGoldenClickModel: Backbone.Model.extend({
  1613. save: function () {
  1614. localStorage["CookieClickerCheatsAutoGoldenClick"] = JSON.stringify(this.toJSON());
  1615. },
  1616. initialize: function() {
  1617. if (this.get("count") !== 0)
  1618. this.set({count: 0});
  1619. if (this.get("running") !== false)
  1620. this.set({running:false});
  1621. if (!_.isUndefined(localStorage["CookieClickerCheatsAutoGoldenClick"])) {
  1622. this.set(JSON.parse(localStorage["CookieClickerCheatsAutoGoldenClick"]));
  1623. }
  1624. this.save();
  1625. this.set({intervalId:0});
  1626. if (this.get("running"))
  1627. this.go();
  1628. },
  1629. go: function() {
  1630. var that = this;
  1631. var tmp = setInterval(function() {
  1632. if (Game.goldenCookie.life > 0) {
  1633. Game.goldenCookie.click();
  1634. that.set({
  1635. count: that.get("count") + 1
  1636. });
  1637. }
  1638. }, 1000);
  1639. this.set({intervalId:tmp, running:true});
  1640. this.save();
  1641. },
  1642. stop: function() {
  1643. var that = this;
  1644. if (typeof that.get("intervalId") !== "undefined")
  1645. clearInterval(that.get("intervalId"));
  1646. that.set({running:false});
  1647. this.save();
  1648. },
  1649. reset: function () {
  1650. this.stop();
  1651. this.set({
  1652. running: false,
  1653. count: 0
  1654. });
  1655. }
  1656. }),
  1657. AutoReindeerClickModel: Backbone.Model.extend({
  1658. save: function () {
  1659. localStorage["CookieClickerCheatsAutoReindeerClick"] = JSON.stringify(this.toJSON());
  1660. },
  1661. initialize: function() {
  1662. if (this.get("count") !== 0)
  1663. this.set({count: 0});
  1664. if (this.get("running") !== false)
  1665. this.set({running:false});
  1666. if (!_.isUndefined(localStorage["CookieClickerCheatsAutoReindeerClick"])) {
  1667. this.set(JSON.parse(localStorage["CookieClickerCheatsAutoReindeerClick"]));
  1668. }
  1669. this.save();
  1670. this.set({intervalId:0});
  1671. if (this.get("running"))
  1672. this.go();
  1673. },
  1674. go: function() {
  1675. var that = this;
  1676. var tmp = setInterval(function() {
  1677. if (Game.seasonPopup.life > 0) {
  1678. Game.seasonPopup.click();
  1679. that.set({
  1680. count: that.get("count") + 1
  1681. });
  1682. }
  1683. }, 1000);
  1684. this.set({intervalId:tmp, running:true});
  1685. this.save();
  1686. },
  1687. stop: function() {
  1688. var that = this;
  1689. if (typeof that.get("intervalId") !== "undefined")
  1690. clearInterval(that.get("intervalId"));
  1691. that.set({running:false});
  1692. this.save();
  1693. },
  1694. reset: function () {
  1695. this.stop();
  1696. this.set({
  1697. running: false,
  1698. count: 0
  1699. });
  1700. }
  1701. }),
  1702. AutoBuyBuilding: Backbone.Model.extend({
  1703. initialize: function() {
  1704. if (typeof this.get("maxAmount") === "undefined" || this.get("maxAmount") < 1)
  1705. this.set({maxAmount:1});
  1706. if (this.get("count") !== 0)
  1707. this.set({count: 0});
  1708. if (this.get("running") !== false && this.get("running") !== true)
  1709. this.set({running:false});
  1710. if (this.get("bought") !== 0)
  1711. this.set({bought:0});
  1712. this.set({count: Game.ObjectsById[this.get("buildingId")].amount});
  1713. this.set({maxBought:this.get("maxAmount") - this.get("count")});
  1714. if (this.get("running") === true) {
  1715. this.toJSON().first = true;
  1716. this.go();
  1717. }
  1718. this.set({intervalId:0, first:true});
  1719. },
  1720. validate: function(attrs, options) {
  1721. if (typeof Game.ObjectsById[this.get("buildingId")] === "undefined") {
  1722. return "Invalid buildingId specified.";
  1723. }
  1724. if (this.get("count") >= this.get("maxAmount")) {
  1725. return "[" + Game.ObjectsById[this.get("buildingId")].name + "] :Your current amount is above your maxAmount.";
  1726. }
  1727. },
  1728. functionToDo: function () {
  1729. if (__DEBUG__)
  1730. console.log("In");
  1731. var that = this;
  1732. var running = that.get("running");
  1733. var buildingId = that.get("buildingId");
  1734. if (running && Game.ObjectsById[buildingId].amount < that.get("maxAmount")) {
  1735. if (Game.cookies - Game.ObjectsById[buildingId].price >= CookieCheat.cookieToKeep) {
  1736. Game.ObjectsById[buildingId].buy();
  1737. if (that.get("count") !== Game.ObjectsById[buildingId].amount) {
  1738. that.set({bought: that.get("bought") + 1});
  1739. that.save();
  1740. }
  1741. }
  1742. }
  1743. else if (Game.ObjectsById[buildingId].amount >= that.get("maxAmount")) {
  1744. that.stop();
  1745. }
  1746. that.set({count: Game.ObjectsById[buildingId].amount});
  1747. if (this.get("again"))
  1748. setTimeout(_.bind(this.functionToDo, this), (running ? 100 : 2000));
  1749. else if (__DEBUG__)
  1750. console.log("Finished for real");
  1751. },
  1752. go: function() {
  1753. var that = this;
  1754. if (typeof this.toJSON().first === "undefined" || this.toJSON().first === true) {
  1755. setTimeout(_.bind(this.functionToDo, this), 200);
  1756. this.toJSON().first = false;
  1757. }
  1758. this.set({running:true, again: true});
  1759. this.save();
  1760. },
  1761. stop: function() {
  1762. var that = this;
  1763. that.set({running:false});
  1764. that.save();
  1765. },
  1766. reset: function () {
  1767. this.stop();
  1768. this.set({
  1769. running: false,
  1770. maxAmount: 1,
  1771. bought: 0,
  1772. count: 0
  1773. });
  1774. }
  1775. }),
  1776. AutoBuyUpgrade: Backbone.Model.extend({
  1777. initialize: function() {
  1778. if (this.get("running") !== false && this.get("running") !== true)
  1779. this.set({running:false});
  1780. if (this.get("running") === true)
  1781. this.go();
  1782. this.set({intervalId:0});
  1783. },
  1784. validate: function(attrs, options) {
  1785. if (typeof Game.UpgradesById[this.get("upgradeId")] === "undefined") {
  1786. return "Invalid upgradeId specified.";
  1787. }
  1788. },
  1789. go: function() {
  1790. var that = this;
  1791. var tmp = setInterval(function() {
  1792. if (Game.UpgradesById[that.get("upgradeId")].unlocked === 1) {
  1793. if (Game.cookies - Game.UpgradesById[that.get("upgradeId")].basePrice >= CookieCheat.cookieToKeep) {
  1794. Game.UpgradesById[that.get("upgradeId")].buy();
  1795. that.save();
  1796. }
  1797. }
  1798. }, 100);
  1799. this.set({intervalId:tmp, running:true});
  1800. that.save();
  1801. },
  1802. stop: function() {
  1803. var that = this;
  1804. if (typeof that.get("intervalId") !== "undefined")
  1805. clearInterval(that.get("intervalId"));
  1806. that.set({running:false});
  1807. that.save();
  1808. },
  1809. reset: function () {
  1810. this.stop();
  1811. this.set({
  1812. running: false,
  1813. upgradeId: -1
  1814. });
  1815. }
  1816. }),
  1817. SaveModel: Backbone.Model.extend({
  1818. initialize: function () {
  1819. if (typeof this.get("name") === "undefined")
  1820. this.set({name: "NoName"});
  1821. if (typeof this.get("date") === "undefined")
  1822. this.set({date: new Date()});
  1823. if (typeof this.get("code") === "undefined")
  1824. this.set({code: ""});
  1825. },
  1826. validate: function(attrs, options) {
  1827. var str = unescape(this.get("code")).split('!END!')[0];
  1828. str = b64_to_utf8(str);
  1829. if (str === "")
  1830. return ("Bad save")
  1831. },
  1832. saveGame: function (save) {
  1833. this.set({backUp: this.get("code"), code: save});
  1834. },
  1835. loadGame: function () {
  1836. Game.LoadSave(this.get("code"));
  1837. },
  1838. loadBackup: function () {
  1839. Game.LoadSave(this.get("backUp"));
  1840. },
  1841. generateSavePreview: function (save) {
  1842. var preview = {
  1843. prefs: {},
  1844. upgrades: {},
  1845. achievements: {},
  1846. objects: {}
  1847. };
  1848. var str = unescape(save);
  1849. var version = 0;
  1850. var oldstr = str.split('|');
  1851. if (oldstr[0] < 1) {} else {
  1852. str = str.split('!END!')[0];
  1853. str = b64_to_utf8(str);
  1854. }
  1855. if (str != '') {
  1856. var spl = '';
  1857. str = str.split('|');
  1858. preview.version = version = parseFloat(str[0]);
  1859. if (version >= 1 && version > Game.version) {
  1860. alert('Error : you are attempting to load a save from a later version (v.' + version + '; you are using v.' + Game.version + ').');
  1861. return;
  1862. }
  1863. else if (version >= 1) {
  1864. spl = str[2].split(';'); //save stats
  1865. preview.startDate = parseInt(spl[0]);
  1866. spl = str[3].split(''); //prefs
  1867. preview.prefs.particles = parseInt(spl[0]);
  1868. preview.prefs.numbers = parseInt(spl[1]);
  1869. preview.prefs.autosave = parseInt(spl[2]);
  1870. preview.prefs.autoupdate = spl[3] ? parseInt(spl[3]) : 1;
  1871. preview.prefs.milk = spl[4] ? parseInt(spl[4]) : 1;
  1872. preview.prefs.fancy = parseInt(spl[5]);
  1873. spl = str[4].split(';'); //cookies
  1874. preview.cookies = parseFloat(spl[0]);
  1875. preview.cookiesEarned = parseFloat(spl[1]);
  1876. preview.cookieClicks = spl[2] ? parseInt(spl[2]) : 0;
  1877. preview.goldenClicks = spl[3] ? parseInt(spl[3]) : 0;
  1878. preview.handmadeCookies = spl[4] ? parseFloat(spl[4]) : 0;
  1879. preview.missedGoldenClicks = spl[5] ? parseInt(spl[5]) : 0;
  1880. preview.backgroundType = spl[6] ? parseInt(spl[6]) : 0;
  1881. preview.milkType = spl[7] ? parseInt(spl[7]) : 0;
  1882. preview.cookiesReset = spl[8] ? parseFloat(spl[8]) : 0;
  1883. preview.elderWrath = spl[9] ? parseInt(spl[9]) : 0;
  1884. preview.pledges = spl[10] ? parseInt(spl[10]) : 0;
  1885. preview.pledgeT = spl[11] ? parseInt(spl[11]) : 0;
  1886. preview.nextResearch = spl[12] ? parseInt(spl[12]) : 0;
  1887. preview.researchT = spl[13] ? parseInt(spl[13]) : 0;
  1888. spl = str[5].split(';'); //buildings
  1889. preview.BuildingsOwned = 0;
  1890. for (var i in Game.ObjectsById) {
  1891. var me = Game.ObjectsById[i];
  1892. preview.objects[me.name] = {};
  1893. me = preview.objects[me.name];
  1894. if (spl[i]) {
  1895. var mestr = spl[i].toString().split(',');
  1896. me.amount = parseInt(mestr[0]);
  1897. me.bought = parseInt(mestr[1]);
  1898. me.totalCookies = parseInt(mestr[2]);
  1899. me.specialUnlocked = parseInt(mestr[3]);
  1900. preview.BuildingsOwned += me.amount;
  1901. } else {
  1902. me.unlocked = 0;
  1903. me.bought = 0;
  1904. me.totalCookies = 0;
  1905. }
  1906. }
  1907. if (version < 1.035) //old non-binary algorithm
  1908. {
  1909. spl = str[6].split(';'); //upgrades
  1910. preview.UpgradesOwned = 0;
  1911. for (var i in Game.UpgradesById) {
  1912. var me = Game.UpgradesById[i];
  1913. preview.upgrades[me.name] = {};
  1914. me = preview.upgrades[me.name];
  1915. if (spl[i]) {
  1916. var mestr = spl[i].split(',');
  1917. me.unlocked = parseInt(mestr[0]);
  1918. me.bought = parseInt(mestr[1]);
  1919. if (me.bought) preview.UpgradesOwned++;
  1920. } else {
  1921. me.unlocked = 0;
  1922. me.bought = 0;
  1923. }
  1924. }
  1925. if (str[7]) spl = str[7].split(';');
  1926. else spl = []; //achievements
  1927. preview.AchievementsOwned = 0;
  1928. for (var i in Game.AchievementsById) {
  1929. var me = Game.AchievementsById[i];
  1930. preview.achievements[me.name] = {};
  1931. me = preview.achievements[me.name];
  1932. if (spl[i]) {
  1933. var mestr = spl[i].split(',');
  1934. me.won = parseInt(mestr[0]);
  1935. } else {
  1936. me.won = 0;
  1937. }
  1938. if (me.won && me.hide != 3) preview.AchievementsOwned++;
  1939. }
  1940. } else {
  1941. if (str[6]) spl = str[6];
  1942. else spl = []; //upgrades
  1943. spl = UncompressLargeBin(spl);
  1944. preview.UpgradesOwned = 0;
  1945. for (var i in Game.UpgradesById) {
  1946. var me = Game.UpgradesById[i];
  1947. preview.upgrades[me.name] = {};
  1948. me = preview.upgrades[me.name];
  1949. if (spl[i * 2]) {
  1950. var mestr = [spl[i * 2], spl[i * 2 + 1]];
  1951. me.unlocked = parseInt(mestr[0]);
  1952. me.bought = parseInt(mestr[1]);
  1953. if (me.bought) preview.UpgradesOwned++;
  1954. } else {
  1955. me.unlocked = 0;
  1956. me.bought = 0;
  1957. }
  1958. }
  1959. if (str[7]) spl = str[7];
  1960. else spl = []; //achievements
  1961. spl = UncompressLargeBin(spl);
  1962. preview.AchievementsOwned = 0;
  1963. for (var i in Game.AchievementsById) {
  1964. var me = Game.AchievementsById[i];
  1965. preview.achievements[me.name] = {};
  1966. me = preview.achievements[me.name];
  1967. if (spl[i]) {
  1968. var mestr = [spl[i]];
  1969. me.won = parseInt(mestr[0]);
  1970. } else {
  1971. me.won = 0;
  1972. }
  1973. if (me.won && me.hide != 3) preview.AchievementsOwned++;
  1974. }
  1975. }
  1976. }
  1977. }
  1978. return preview;
  1979. }
  1980. }),
  1981. ChoiceModel: Backbone.Model.extend({})
  1982. };
  1983. };
  1984. CookieCheat.initCollections = function () {
  1985. CookieCheat.Collections = {
  1986. BuildingsCollection: Backbone.Collection.extend({
  1987. model: CookieCheat.Models.AutoBuyBuilding,
  1988. localStorage: new Store("CookieClickerCheatsBuildings"),
  1989. initialize: function () {
  1990. return this;
  1991. }
  1992. }),
  1993. UpgradesCollection: Backbone.Collection.extend({
  1994. model: CookieCheat.Models.AutoBuyUpgrade,
  1995. localStorage: new Store("CookieClickerCheatsUpgrades"),
  1996. initialize: function () {
  1997. return this;
  1998. }
  1999. }),
  2000. ChoicesCollection: Backbone.Collection.extend({
  2001. model: CookieCheat.Models.ChoiceModel,
  2002. localStorage: new Store("CookieClickerCheatsGoldenChoices"),
  2003. initialize: function () {
  2004. return this;
  2005. },
  2006. getFromArray: function (arr) {
  2007. for (var i in arr) {
  2008. var t = CookieCheat.clone(arr[i]);
  2009. t.id = arr[i].name;
  2010. this.add(t);
  2011. }
  2012. this.saveAll();
  2013. },
  2014. saveAll: function () {
  2015. for (var i in this.models) {
  2016. this.models[i].save();
  2017. }
  2018. },
  2019. computeAndApply: function () {
  2020. var that = this;
  2021. var out = _.map(this.models, function (item) {return item.toJSON();});
  2022. Game.goldenCookie.choose = CookieCheat.generateChooseFunc(out);
  2023. }
  2024. }),
  2025. SavesCollection: Backbone.Collection.extend({
  2026. model: CookieCheat.Models.SaveModel,
  2027. localStorage: new Store("CookieClickerCheatsSaves"),
  2028. initialize: function () {
  2029. return this;
  2030. },
  2031. getModelByName: function (name) {
  2032. var res = "";
  2033. _.each(this.models, function (model) {
  2034. if (model.get("name") === name)
  2035. res = model;
  2036. });
  2037. return (res);
  2038. }
  2039. })
  2040. };
  2041. };
  2042. CookieCheat.initViews = function () {
  2043. CookieCheat.Views = {
  2044. AutoClickWrinklersView: Backbone.View.extend({
  2045. elName: '#autoClickWrinklersDiv',
  2046. initialize: function() {
  2047. this.listenTo(this.model, "change", this.render);
  2048. this.render();
  2049. return (this);
  2050. },
  2051. render: function() {
  2052. var toChange = $(this.elName);
  2053. var that = this;
  2054. $(toChange).find('#autoClickWrinklersButton').off("click");
  2055. $(toChange).find('#autoClickWrinklersButton').click(function() {that.clicked.apply(that)});
  2056. $(toChange).find('#autoClickWrinklersButton').toggleClass("superGood", this.model.get("running"));
  2057. $(toChange).find('#autoClickWrinklersButton').toggleClass("superBad", !this.model.get("running"));
  2058. $(toChange).find("#clickWrinklersAmount").text("Clicked " + this.model.get("count") + " Wrinkler" + (this.model.get("count") > 1 ? "s.":"."));
  2059. $(toChange).find(".goodState").toggleClass("currentState", this.model.get("running"));
  2060. $(toChange).find(".badState").toggleClass("currentState", !this.model.get("running"));
  2061. return (this);
  2062. },
  2063. clicked: function() {
  2064. if (this.model.get("running"))
  2065. this.model.stop();
  2066. else
  2067. this.model.go();
  2068. }
  2069. }),
  2070. SafeCookiesView: Backbone.View.extend({
  2071. elName: '#safeCookieDiv',
  2072. initialize: function() {
  2073. var that = this;
  2074. CookieCheat.cookieToKeep = JSON.parse(localStorage["CookieClickerCheatsSafeAmount"] || 0);
  2075. CookieCheat.godMustCheck = JSON.parse(localStorage["CookieClickerCheatsGodCheck"] || 0);
  2076. this.radioChecked = JSON.parse(localStorage["CookieClickerCheatsRadioChecked"] || 3);
  2077. this.f();
  2078. this.render();
  2079. _.bindAll(this, "f", "checkLimit");
  2080. this.checkId = setInterval(this.checkLimit, 1000);
  2081. return (this);
  2082. },
  2083. checkLimit: function () {
  2084. var toChange = $(this.elName);
  2085. $(toChange).find(".whatAboutYou").text((Game.cookies >= CookieCheat.cookieToKeep) ? "You are above the limit ! ;)" : "You are below the limit ! :(");
  2086. $(toChange).find(".whatAboutYou").toggleClass("superGood", Game.cookies >= CookieCheat.cookieToKeep);
  2087. $(toChange).find(".whatAboutYou").toggleClass("superBad", Game.cookies < CookieCheat.cookieToKeep);
  2088. },
  2089. render: function() {
  2090. var toChange = $(this.elName);
  2091. var that = this;
  2092. var textToDisplayInInfo = "";
  2093. $(toChange).find("#fixCookies").off("click");
  2094. $(toChange).find("#fixCookies").click(function() {if (confirm("CookieGod will reset your cookies ! Are you sure ?")) {Game.Popup("Respect from CookHeaven... - CookieGod");Game.cookies = Game.cookiesd = 0;}else Game.Popup('"Coward... - CookieGod"')});
  2095. $(toChange).find("#checkBoxToKeepForLucky").toggleClass("superGood", this.radioChecked === 1);
  2096. $(toChange).find("#checkBoxToKeepForLucky").off("click");
  2097. $(toChange).find("#checkBoxToKeepForLucky").click(function() {that.radioChecked = 1;that.changed.apply(that)});
  2098. $(toChange).find("#checkBoxToKeepForFrenzy").off("click");
  2099. $(toChange).find("#checkBoxToKeepForFrenzy").toggleClass("superGood", this.radioChecked === 2);
  2100. $(toChange).find("#checkBoxToKeepForFrenzy").click(function() {that.radioChecked = 2;that.changed.apply(that)});
  2101. $(toChange).find("#checkBoxToKeepAny").toggleClass("superGood", this.radioChecked === 3);
  2102. $(toChange).find("#checkBoxToKeepAny").off("click");
  2103. $(toChange).find("#checkBoxToKeepAny").click(function() {that.radioChecked = 3;that.changed.apply(that)});
  2104. $(toChange).find("#hitMePlease").off("change");
  2105. $(toChange).find("#hitMePlease").change(function() {that.changedGod.apply(that)});
  2106. $(toChange).find('#hitMePlease').prop("checked", CookieCheat.godMustCheck);
  2107. $(toChange).find('.numberToKeep').off("change");
  2108. $(toChange).find('.numberToKeep').change(function() {that.changed.apply(that)});
  2109. $(toChange).find('.numberToKeep').val(CookieCheat.cookieToKeep);
  2110. $(toChange).find('.numberToKeep').prop("disabled", this.radioChecked !== 3);
  2111. $(toChange).find(".cookieGod").text((CookieCheat.godMustCheck) ? "The CookieGod look on your cookies. Trust him" : "The CookieGod doesn't care at all");
  2112. $(toChange).find(".cookieGod").toggleClass("superGood", CookieCheat.godMustCheck > 0);
  2113. $(toChange).find(".cookieGod").toggleClass("superBad", !CookieCheat.godMustCheck);
  2114. $(toChange).find(".infoToDisplay").toggleClass("superGood", CookieCheat.cookieToKeep > 0 && !(this.radioChecked <= 2 && Game.cookiesPs <= 0));
  2115. $(toChange).find(".infoToDisplay").toggleClass("superBad", CookieCheat.cookieToKeep <= 0 && !(this.radioChecked <= 2 && Game.cookiesPs <= 0));
  2116. $(toChange).find(".infoToDisplay").toggleClass("superWarning", this.radioChecked <= 2 && Game.cookiesPs <= 0);
  2117. if (CookieCheat.cookieToKeep <= 0)
  2118. textToDisplayInInfo = "Your cookies aren't safe !";
  2119. if (CookieCheat.cookieToKeep === 1)
  2120. textToDisplayInInfo = "One cookie is safe !";
  2121. if (CookieCheat.cookieToKeep > 1)
  2122. textToDisplayInInfo = "" + Beautify(CookieCheat.cookieToKeep) + " cookies are safe !";
  2123. if (this.radioChecked <= 2 && Game.cookiesPs <= 0)
  2124. textToDisplayInInfo = "You do not product cookies... =/";
  2125. $(toChange).find(".infoToDisplay").text(textToDisplayInInfo);
  2126. this.checkLimit();
  2127. return (this);
  2128. },
  2129. changed: function() {
  2130. localStorage["CookieClickerCheatsRadioChecked"] = JSON.stringify(this.radioChecked);
  2131. if (this.radioChecked === 3) {
  2132. CookieCheat.cookieToKeep = parseInt("0" + $(this.elName).find(".numberToKeep").val(), 10);
  2133. localStorage["CookieClickerCheatsSafeAmount"] = JSON.stringify(CookieCheat.cookieToKeep);
  2134. this.render();
  2135. } else {
  2136. this.f();
  2137. }
  2138. },
  2139. changedGod: function() {
  2140. CookieCheat.godMustCheck = $("#hitMePlease").is(":checked") ? 1 : 0;
  2141. localStorage["CookieClickerCheatsGodCheck"] = JSON.stringify(CookieCheat.godMustCheck);
  2142. this.render();
  2143. },
  2144. f: function () {
  2145. if (this.radioChecked === 1 || this.radioChecked === 2) {
  2146. CookieCheat.cookieToKeep = Math.floor((this.radioChecked === 1 ? Game.cookiesPs * 12000 : Game.cookiesPs * 12000 * 7));
  2147. this.render();
  2148. setTimeout(this.f, 500)
  2149. }
  2150. }
  2151. }),
  2152. EarnChipsView: Backbone.View.extend({
  2153. elName: '#earnHeavenDiv',
  2154. initialize: function() {
  2155. this.heavenEarned = JSON.parse(localStorage["CookieClickerCheatsEarnHeavenAmount"] || 0);
  2156. this.render();
  2157. return (this);
  2158. },
  2159. render: function() {
  2160. var toChange = $(this.elName);
  2161. var that = this;
  2162. $(toChange).find('.numberToEarn').off("change");
  2163. $(toChange).find('.numberToEarn').change(function() {that.changed.apply(that)});
  2164. $(toChange).find(".numberToEarn").val("0");
  2165. $(toChange).find(".infoToDisplay").text((that.heavenEarned <= 0) ? "You didn't cheat chips !" : (that.heavenEarned === 1) ? "You gave yourself one chip !" : Beautify(that.heavenEarned) + " chips were given to you by the CookieGod !");
  2166. $(toChange).find(".infoToDisplay").toggleClass("superGood", that.heavenEarned > 0);
  2167. $(toChange).find(".infoToDisplay").toggleClass("superBad", that.heavenEarned <= 0);
  2168. return (this);
  2169. },
  2170. changed: function() {
  2171. if (_.isUndefined(Game.prestige["Heavenly chips"]))
  2172. Game.prestige["Heavenly chips"] = 0;
  2173. var toGive = parseInt($(this.elName).find(".numberToEarn").val(), 10);
  2174. if (_.isFinite(toGive + Game.prestige["Heavenly chips"])) {
  2175. this.heavenEarned += toGive;
  2176. Game.prestige["Heavenly chips"] += toGive;
  2177. localStorage["CookieClickerCheatsEarnHeavenAmount"] = JSON.stringify(this.heavenEarned);
  2178. Game.recalculateGains = 1;
  2179. Game.Popup("The CookieGod gave you " + Beautify(toGive) + " chips from Heaven !");
  2180. } else {
  2181. Game.Popup("The CookieGod hates infinity, sorry...");
  2182. }
  2183. $(this.elName).find(".numberToEarn").val(0);
  2184. this.render();
  2185. }
  2186. }),
  2187. EarnCookiesView: Backbone.View.extend({
  2188. elName: '#earnCookieDiv',
  2189. initialize: function() {
  2190. this.cookieEarned = JSON.parse(localStorage["CookieClickerCheatsEarnAmount"] || 0);
  2191. this.render();
  2192. return (this);
  2193. },
  2194. render: function() {
  2195. var toChange = $(this.elName);
  2196. var that = this;
  2197. $(toChange).find('.numberToEarn').off("change");
  2198. $(toChange).find('.numberToEarn').change(function() {that.changed.apply(that)});
  2199. $(toChange).find(".numberToEarn").val("0");
  2200. $(toChange).find(".infoToDisplay").text((that.cookieEarned <= 0) ? "You didn't cheat cookies !" : (that.cookieEarned === 1) ? "You gave yourself one cookie !" : Beautify(that.cookieEarned) + " cookies were given to you by the CookieGod !");
  2201. $(toChange).find(".infoToDisplay").toggleClass("superGood", that.cookieEarned > 0);
  2202. $(toChange).find(".infoToDisplay").toggleClass("superBad", that.cookieEarned <= 0);
  2203. return (this);
  2204. },
  2205. changed: function() {
  2206. var toGive = parseInt($(this.elName).find(".numberToEarn").val(), 10);
  2207. if (_.isFinite(toGive + Game.cookies)) {
  2208. this.cookieEarned += toGive;
  2209. Game.Earn(toGive);
  2210. localStorage["CookieClickerCheatsEarnAmount"] = JSON.stringify(this.cookieEarned);
  2211. Game.Popup("The CookieGod gave you " + Beautify(toGive) + " cookies !");
  2212. } else {
  2213. Game.Popup("The CookieGod hates infinity, sorry...");
  2214. }
  2215. $(this.elName).find(".numberToEarn").val(0);
  2216. this.render();
  2217. }
  2218. }),
  2219. GoldenSpawnView: Backbone.View.extend({
  2220. elName: '#goldenSpawnDiv',
  2221. initialize: function() {
  2222. this.listenTo(this.model, "change", this.render);
  2223. this.render();
  2224. return (this);
  2225. },
  2226. render: function() {
  2227. var toChange = $(this.elName);
  2228. var that = this;
  2229. $(toChange).find('#goldenSpawnButton').off("click");
  2230. $(toChange).find('#goldenSpawnButton').click(function() {that.clicked.apply(that)});
  2231. $(toChange).find("#goldenSpawnedAmount").text(this.model.get("count") + " golden cookie" + (this.model.get("count") > 1 ? "s spawned.":" spawned."));
  2232. return (this);
  2233. },
  2234. clicked: function() {
  2235. Game.goldenCookie.life = 0;
  2236. Game.goldenCookie.time = Game.goldenCookie.minTime;
  2237. Game.goldenCookie.spawn();
  2238. this.model.incr();
  2239. }
  2240. }),
  2241. AutoClickView: Backbone.View.extend({
  2242. elName: '#autoClickDiv',
  2243. initialize: function() {
  2244. this.listenTo(this.model, "change", this.render);
  2245. this.render();
  2246. return (this);
  2247. },
  2248. render: function() {
  2249. var toChange = $(this.elName);
  2250. var that = this;
  2251. var perSecond = 1000 / this.model.get("timeOut");
  2252. $(toChange).find('#autoClickButton').off("click");
  2253. $(toChange).find('#clickingSpeed').off("change");
  2254. $(toChange).find('#autoClickButton').click(function() {that.clicked.apply(that)});
  2255. $(toChange).find('#clickingSpeed').change(function() {that.changed.apply(that)});
  2256. $(toChange).find('#clickingSpeed').val(perSecond);
  2257. $(toChange).find('#autoClickButton').toggleClass("superGood", this.model.get("running"));
  2258. $(toChange).find('#autoClickButton').toggleClass("superBad", !this.model.get("running"));
  2259. $(toChange).find("#clickAmount").text("Clicked " + this.model.get("count") + " time" + (this.model.get("count") > 1 ? "s.":"."));
  2260. $(toChange).find(".goodState").toggleClass("currentState", this.model.get("running"));
  2261. $(toChange).find(".badState").toggleClass("currentState", !this.model.get("running"));
  2262. $(toChange).find("#clickingSpeedText").text("Clicking speed : " + perSecond.toPrecision(5) + " clicks per second");
  2263. return (this);
  2264. },
  2265. clicked: function() {
  2266. if (this.model.get("running"))
  2267. this.model.stop();
  2268. else
  2269. this.model.go();
  2270. },
  2271. changed: function() {
  2272. var t = (1000 / parseInt($(this.elName).find('#clickingSpeed').val(), 10));
  2273. this.model.set({
  2274. timeOut: t
  2275. });
  2276. this.model.save();
  2277. }
  2278. }),
  2279. AutoSpawnView: Backbone.View.extend({
  2280. elName: '#autoSpawnDiv',
  2281. initialize: function() {
  2282. this.listenTo(this.model, "change", this.render);
  2283. this.render();
  2284. return (this);
  2285. },
  2286. render: function() {
  2287. var toChange = $(this.elName);
  2288. var that = this;
  2289. var perSecond = this.model.get("timeOut");
  2290. $(toChange).find('#autoSpawnButton').off("click");
  2291. $(toChange).find('#spawningSpeed').off("change");
  2292. $(toChange).find('#autoSpawnButton').click(function() {that.clicked.apply(that)});
  2293. $(toChange).find('#spawningSpeed').change(function() {that.changed.apply(that)});
  2294. $(toChange).find('#spawningSpeed').val(perSecond);
  2295. $(toChange).find('#autoSpawnButton').toggleClass("superGood", this.model.get("running"));
  2296. $(toChange).find('#autoSpawnButton').toggleClass("superBad", !this.model.get("running"));
  2297. $(toChange).find("#spawnAmount").text("Spawned " + this.model.get("count") + " golden cookie" + (this.model.get("count") > 1 ? "s.":"."));
  2298. $(toChange).find(".goodState").toggleClass("currentState", this.model.get("running"));
  2299. $(toChange).find(".badState").toggleClass("currentState", !this.model.get("running"));
  2300. $(toChange).find("#spawningSpeedText").text("Spawning interval : " + CookieCheat.processMs(perSecond.toPrecision(5)));
  2301. return (this);
  2302. },
  2303. clicked: function() {
  2304. if (this.model.get("running"))
  2305. this.model.stop();
  2306. else
  2307. this.model.go();
  2308. },
  2309. changed: function() {
  2310. var t = parseInt($(this.elName).find('#spawningSpeed').val(), 10);
  2311. this.model.stop();
  2312. this.model.set({
  2313. timeOut: t
  2314. });
  2315. this.model.go();
  2316. }
  2317. }),
  2318. AutoGoldenClickView: Backbone.View.extend({
  2319. elName: '#autoGoldenClickDiv',
  2320. initialize: function() {
  2321. this.listenTo(this.model, "change", this.render);
  2322. this.render();
  2323. return (this);
  2324. },
  2325. render: function() {
  2326. var toChange = $(this.elName);
  2327. var that = this;
  2328. $(toChange).find('#autoGoldenClickButton').off("click");
  2329. $(toChange).find('#autoGoldenClickButton').click(function() {that.clicked.apply(that)});
  2330. $(toChange).find('#autoGoldenClickButton').toggleClass("superGood", this.model.get("running"));
  2331. $(toChange).find('#autoGoldenClickButton').toggleClass("superBad", !this.model.get("running"));
  2332. $(toChange).find("#goldenClickAmount").text("Clicked " + this.model.get("count") + " golden cookie" + (this.model.get("count") > 1 ? "s.":"."));
  2333. $(toChange).find(".goodState").toggleClass("currentState", this.model.get("running"));
  2334. $(toChange).find(".badState").toggleClass("currentState", !this.model.get("running"));
  2335. return (this);
  2336. },
  2337. clicked: function() {
  2338. if (this.model.get("running"))
  2339. this.model.stop();
  2340. else
  2341. this.model.go();
  2342. }
  2343. }),
  2344. AutoReindeerClickView: Backbone.View.extend({
  2345. elName: '#autoReindeerClickDiv',
  2346. initialize: function() {
  2347. this.listenTo(this.model, "change", this.render);
  2348. this.render();
  2349. return (this);
  2350. },
  2351. render: function() {
  2352. var toChange = $(this.elName);
  2353. var that = this;
  2354. $(toChange).find('#autoReindeerClickButton').off("click");
  2355. $(toChange).find('#autoReindeerClickButton').click(function() {that.clicked.apply(that)});
  2356. $(toChange).find('#autoReindeerClickButton').toggleClass("superGood", this.model.get("running"));
  2357. $(toChange).find('#autoReindeerClickButton').toggleClass("superBad", !this.model.get("running"));
  2358. $(toChange).find("#reindeerClickAmount").text("Clicked " + this.model.get("count") + " reindeer" + (this.model.get("count") > 1 ? "s.":"."));
  2359. $(toChange).find(".goodState").toggleClass("currentState", this.model.get("running"));
  2360. $(toChange).find(".badState").toggleClass("currentState", !this.model.get("running"));
  2361. return (this);
  2362. },
  2363. clicked: function() {
  2364. if (this.model.get("running"))
  2365. this.model.stop();
  2366. else
  2367. this.model.go();
  2368. }
  2369. }),
  2370. BuildingFormView: Backbone.View.extend({
  2371. elName: '#newForm',
  2372. addOne: function (id, q) {
  2373. var m = new CookieCheat.Models.AutoBuyBuilding({
  2374. maxAmount: q,
  2375. buildingId: id
  2376. });
  2377. if (!m.isValid())
  2378. alert(m.validationError);
  2379. else {
  2380. CookieCheat.collections.buildingsCollection.add(m);
  2381. m.save();
  2382. }
  2383. },
  2384. initialize: function() {
  2385. this.render();
  2386. return (this);
  2387. },
  2388. render: function() {
  2389. var toChange = $(this.elName);
  2390. var that = this;
  2391. $(toChange).find('#newAutoBuyBuildingsButton').off("click");
  2392. $(toChange).find('#newAutoBuyBuildingsButton').click(function(e) {that.clicked.call(that, e);});
  2393. for (var i in Game.ObjectsById) {
  2394. $(toChange).find("#selectBuilding").append('<option value="' + i + '">' + Game.ObjectsById[i].name + '</option>');
  2395. }
  2396. return (this);
  2397. },
  2398. clicked: function(e) {
  2399. e.preventDefault();
  2400. var toChange = $(this.elName);
  2401. var selected = $(toChange).find("#selectBuilding").val();
  2402. var quantity = parseInt($(toChange).find(".number").val(), 10);
  2403. if (selected !== "all") {
  2404. this.addOne(parseInt(selected, 10), quantity);
  2405. }
  2406. else if (selected === "all") {
  2407. for (var i in Game.ObjectsById) {
  2408. this.addOne(i, quantity);
  2409. }
  2410. }
  2411. }
  2412. }),
  2413. BuildingListView: Backbone.View.extend({
  2414. elName: '#buildingsListContainer',
  2415. initialize: function() {
  2416. var that = this;
  2417. this.template = _.template(CookieCheat.miscVars.specialTemplate);
  2418. this.listenTo(this.collection, "add", function() {that.update(); that.render();});
  2419. this.listenTo(this.collection, "remove", function() {that.update(); that.render();});
  2420. this.update();
  2421. this.render();
  2422. return (this);
  2423. },
  2424. update: function() {
  2425. CookieCheat.views.buildingViews = [];
  2426. _.each(this.collection.models, function (item) {
  2427. CookieCheat.views.buildingViews.push(new CookieCheat.Views.BuildingView({model:item}));
  2428. });
  2429. return (this);
  2430. },
  2431. render: function() {
  2432. var toChange = $(this.elName);
  2433. var that = this;
  2434. $(toChange).toggleClass("superHidden", CookieCheat.views.buildingViews.length === 0);
  2435. $(toChange).html("");
  2436. if (CookieCheat.views.buildingViews.length > 0) {
  2437. $(toChange).append(this.template());
  2438. $(toChange).find('.myPauseAllBtn').off("click");
  2439. $(toChange).find('.myPauseAllBtn').click(function(e) {that.pauseAll.call(that, e);});
  2440. $(toChange).find('.myRemoveAllBtn').off("click");
  2441. $(toChange).find('.myRemoveAllBtn').click(function(e) {that.removeAll.call(that, e);});
  2442. $(toChange).find('.myGoAllBtn').off("click");
  2443. $(toChange).find('.myGoAllBtn').click(function(e) {that.goAll.call(that, e);});
  2444. $(toChange).find('.myRemoveDoneBtn').off("click");
  2445. $(toChange).find('.myRemoveDoneBtn').click(function(e) {that.removeBought.call(that, e);});
  2446. }
  2447. _.each(CookieCheat.views.buildingViews, function (item) {
  2448. $(toChange).append(item.render().$el);
  2449. });
  2450. return (this);
  2451. },
  2452. goAll: function () {
  2453. _.each(CookieCheat.views.buildingViews, function (view) {view.model.go();});
  2454. },
  2455. pauseAll: function () {
  2456. _.each(CookieCheat.views.buildingViews, function (view) {view.model.stop();});
  2457. },
  2458. removeAll: function () {
  2459. _.each(CookieCheat.views.buildingViews, function (view) {
  2460. view.model.stop();
  2461. view.model.destroy();
  2462. CookieCheat.collections.buildingsCollection.remove(view.model);
  2463. view.remove();
  2464. });
  2465. },
  2466. removeBought: function () {
  2467. _.each(CookieCheat.views.buildingViews, function (view) {
  2468. if (view.model.get("count") >= view.model.get("maxAmount")) {
  2469. view.model.stop();
  2470. view.model.destroy();
  2471. CookieCheat.collections.buildingsCollection.remove(view.model);
  2472. view.remove();
  2473. }
  2474. });
  2475. }
  2476. }),
  2477. BuildingView: Backbone.View.extend({
  2478. tagName: "div",
  2479. className: "tabElem",
  2480. initialize: function() {
  2481. this.listenTo(this.model, "change", this.render);
  2482. this.template = _.template(CookieCheat.miscVars.buildingTemplate);
  2483. return (this);
  2484. },
  2485. render: function() {
  2486. this.$el.html(this.template());
  2487. var toChange = this.$el;
  2488. $(toChange).find('.myGoBtn').off("click");
  2489. $(toChange).find('.myPauseBtn').off("click");
  2490. $(toChange).find('.myRemoveBtn').off("click");
  2491. var that = this;
  2492. $(toChange).find('.myRemoveBtn').click(function() {that.removed.apply(that)});
  2493. $(toChange).find('.myGoBtn').click(function() {that.went.apply(that)});
  2494. $(toChange).find('.myPauseBtn').click(function() {that.paused.apply(that)});
  2495. $(toChange).find(".goodState").toggleClass("currentState", this.model.get("running"));
  2496. $(toChange).find(".badState").toggleClass("currentState", !this.model.get("running"));
  2497. $(toChange).find(".howManyBought").text("Bought : " + this.model.get("bought") + ' (' + this.model.get("count") + "/" + this.model.get("maxAmount") + ')');
  2498. $(toChange).find(".buildingName").text(Game.ObjectsById[this.model.get("buildingId")].name);
  2499. $(toChange).find(".buildingName").toggleClass("superGood", this.model.get("running"));
  2500. $(toChange).find(".buildingName").toggleClass("superBad", !this.model.get("running"));
  2501. $(toChange).toggleClass("tabElemDone", this.model.get("count") >= this.model.get("maxAmount"));
  2502. return (this);
  2503. },
  2504. removed: function() {
  2505. var that = this;
  2506. this.$el.fadeOut("fast", function () {
  2507. that.model.stop();
  2508. that.model.set({again: false});
  2509. that.model.destroy();
  2510. CookieCheat.collections.buildingsCollection.remove(that.model);
  2511. that.remove();
  2512. });
  2513. },
  2514. went: function() {
  2515. this.model.go();
  2516. },
  2517. paused: function() {
  2518. this.model.stop();
  2519. }
  2520. }),
  2521. UpgradeFormView: Backbone.View.extend({
  2522. elName: '#newUpgradeForm',
  2523. addOne: function (id) {
  2524. var m = new CookieCheat.Models.AutoBuyUpgrade({
  2525. upgradeId: id
  2526. });
  2527. if (!m.isValid())
  2528. alert(m.validationError);
  2529. else {
  2530. CookieCheat.collections.upgradesCollection.add(m);
  2531. m.save();
  2532. }
  2533. },
  2534. initialize: function() {
  2535. CookieCheat.upgradeNames = {};
  2536. _.each(_.pluck(Game.UpgradesById, "name"), function (item) {
  2537. CookieCheat.upgradeNames[item.toLowerCase()] = item;
  2538. });
  2539. this.render();
  2540. return (this);
  2541. },
  2542. render: function() {
  2543. var toChange = $(this.elName);
  2544. var that = this;
  2545. $(toChange).find('#newAutoBuyUpgradesButton').off("click");
  2546. $(toChange).find('#newAutoBuyUpgradesButton').click(function(e) {that.clicked.call(that, e);});
  2547. for (var i in Game.UpgradesById) {
  2548. if (!Game.UpgradesById[i].bought && CookieCheat.upgradeBlacklist.indexOf(Game.UpgradesById[i].name) === -1)
  2549. $(toChange).find("#selectUpgrade").append('<option value="' + i + '">' + Game.UpgradesById[i].name + '</option>');
  2550. }
  2551. return (this);
  2552. },
  2553. clicked: function(e) {
  2554. e.preventDefault();
  2555. var toChange = $(this.elName);
  2556. var id;
  2557. var selected = $(toChange).find("#selectUpgrade").val();
  2558. if ($(toChange).find("#enterNameUpgrade").val().length > 0) {
  2559. var tmp = CookieCheat.upgradeNames[$(toChange).find("#enterNameUpgrade").val().toLowerCase()];
  2560. id = (tmp) ? Game.Upgrades[tmp].id : -1;
  2561. }
  2562. else
  2563. id = selected;
  2564. if (id === selected && selected !== 'all') {
  2565. this.addOne(parseInt(id, 10));
  2566. }
  2567. else if (selected === "all") {
  2568. for (var i in Game.UpgradesById) {
  2569. if (!Game.UpgradesById[i].bought && CookieCheat.upgradeBlacklist.indexOf(Game.UpgradesById[i].name) === -1)
  2570. this.addOne(Game.UpgradesById[i].id);
  2571. }
  2572. }
  2573. this.render();
  2574. }
  2575. }),
  2576. UpgradeListView: Backbone.View.extend({
  2577. elName: '#upgradesListContainer',
  2578. initialize: function() {
  2579. var that = this;
  2580. this.template = _.template(CookieCheat.miscVars.specialTemplate);
  2581. this.listenTo(this.collection, "add", function() {that.update(); that.render();});
  2582. this.listenTo(this.collection, "remove", function() {that.update(); that.render();});
  2583. this.update();
  2584. this.render();
  2585. return (this);
  2586. },
  2587. update: function() {
  2588. CookieCheat.views.upgradeViews = [];
  2589. _.each(this.collection.models, function (item) {
  2590. CookieCheat.views.upgradeViews.push(new CookieCheat.Views.UpgradeView({model:item}));
  2591. });
  2592. return (this);
  2593. },
  2594. render: function() {
  2595. var toChange = $(this.elName);
  2596. var that = this;
  2597. $(toChange).toggleClass("superHidden", CookieCheat.views.upgradeViews.length === 0);
  2598. $(toChange).html("");
  2599. if (CookieCheat.views.upgradeViews.length > 0) {
  2600. $(toChange).append(this.template());
  2601. $(toChange).find('.myPauseAllBtn').off("click");
  2602. $(toChange).find('.myPauseAllBtn').click(function(e) {that.pauseAll.call(that, e);});
  2603. $(toChange).find('.myRemoveAllBtn').off("click");
  2604. $(toChange).find('.myRemoveAllBtn').click(function(e) {that.removeAll.call(that, e);});
  2605. $(toChange).find('.myGoAllBtn').off("click");
  2606. $(toChange).find('.myGoAllBtn').click(function(e) {that.goAll.call(that, e);});
  2607. $(toChange).find('.myRemoveDoneBtn').off("click");
  2608. $(toChange).find('.myRemoveDoneBtn').click(function(e) {that.removeBought.call(that, e);});
  2609. }
  2610. _.each(CookieCheat.views.upgradeViews, function (item) {
  2611. $(toChange).append(item.render().$el);
  2612. });
  2613. return (this);
  2614. },
  2615. goAll: function () {
  2616. _.each(CookieCheat.views.upgradeViews, function (view) {view.model.go();});
  2617. },
  2618. pauseAll: function () {
  2619. _.each(CookieCheat.views.upgradeViews, function (view) {view.model.stop();});
  2620. },
  2621. removeAll: function () {
  2622. _.each(CookieCheat.views.upgradeViews, function (view) {
  2623. view.model.stop();
  2624. view.model.destroy();
  2625. CookieCheat.collections.upgradesCollection.remove(view.model);
  2626. view.remove();
  2627. });
  2628. },
  2629. removeBought: function () {
  2630. _.each(CookieCheat.views.upgradeViews, function (view) {
  2631. if (Game.UpgradesById[view.model.get("upgradeId")].bought > 0) {
  2632. view.model.stop();
  2633. view.model.destroy();
  2634. CookieCheat.collections.upgradesCollection.remove(view.model);
  2635. view.remove();
  2636. }
  2637. });
  2638. }
  2639. }),
  2640. UpgradeView: Backbone.View.extend({
  2641. tagName: "div",
  2642. className: "tabElem",
  2643. initialize: function() {
  2644. this.listenTo(this.model, "change", this.render);
  2645. this.template = _.template(CookieCheat.miscVars.upgradeTemplate);
  2646. return (this);
  2647. },
  2648. render: function() {
  2649. this.$el.html(this.template());
  2650. var toChange = this.$el;
  2651. $(toChange).find('.myGoBtn').off("click");
  2652. $(toChange).find('.myPauseBtn').off("click");
  2653. $(toChange).find('.myRemoveBtn').off("click");
  2654. var that = this;
  2655. $(toChange).find('.myRemoveBtn').click(function() {that.removed.apply(that)});
  2656. $(toChange).find('.myGoBtn').click(function() {that.went.apply(that)});
  2657. $(toChange).find('.myPauseBtn').click(function() {that.paused.apply(that)});
  2658. $(toChange).find(".goodState").toggleClass("currentState", this.model.get("running"));
  2659. $(toChange).find(".badState").toggleClass("currentState", !this.model.get("running"));
  2660. $(toChange).find(".unlockedOrNot").text((Game.UpgradesById[that.model.get("upgradeId")].unlocked ? "Unlocked" : "Locked"));
  2661. $(toChange).find(".unlockedOrNot").toggleClass("superGood", Game.UpgradesById[that.model.get("upgradeId")].unlocked);
  2662. $(toChange).find(".unlockedOrNot").toggleClass("superBad", !Game.UpgradesById[that.model.get("upgradeId")].unlocked);
  2663. $(toChange).find(".upgradeName").text(Game.UpgradesById[this.model.get("upgradeId")].name);
  2664. $(toChange).find(".upgradeName").toggleClass("superGood", this.model.get("running"));
  2665. $(toChange).find(".upgradeName").toggleClass("superBad", !this.model.get("running"));
  2666. $(toChange).toggleClass("tabElemDone", Game.UpgradesById[that.model.get("upgradeId")].bought > 0);
  2667. return (this);
  2668. },
  2669. removed: function() {
  2670. var that = this;
  2671. this.$el.fadeOut("slow", function () {
  2672. that.model.stop();
  2673. that.model.destroy();
  2674. CookieCheat.collections.upgradesCollection.remove(that.model);
  2675. that.remove();
  2676. });
  2677. },
  2678. went: function() {
  2679. this.model.go();
  2680. },
  2681. paused: function() {
  2682. this.model.stop();
  2683. }
  2684. }),
  2685. SaveFormView: Backbone.View.extend({
  2686. elName: '#newSaveForm',
  2687. initialize: function() {
  2688. this.render();
  2689. return (this);
  2690. },
  2691. render: function() {
  2692. var toChange = $(this.elName);
  2693. var that = this;
  2694. $(toChange).find('#newSaveButton').off("click");
  2695. $(toChange).find('#newSaveButton').click(function(e) {that.clicked.call(that, e);});
  2696. $(toChange).find('#selectSaveCode').off("change");
  2697. $(toChange).find('#selectSaveCode').change(function(e) {that.changed.call(that, e);});
  2698. return (this);
  2699. },
  2700. clicked: function(e) {
  2701. e.preventDefault();
  2702. var toChange = $(this.elName);
  2703. var m = new CookieCheat.Models.SaveModel({
  2704. name: ($(toChange).find("#enterNameSave").val().length > 0) ? $(toChange).find("#enterNameSave").val() : "noname",
  2705. code: ($(toChange).find("#saveCode").val().length > 0) ? $(toChange).find("#saveCode").val() : CookieCheat.miscVars.newGame,
  2706. asked: false
  2707. });
  2708. if (!m.isValid())
  2709. alert(m.validationError);
  2710. else {
  2711. CookieCheat.collections.savesCollection.add(m);
  2712. $(toChange).find("#enterNameSave").val("");
  2713. m.save();
  2714. this.render();
  2715. }
  2716. },
  2717. changed: function (e) {
  2718. var toChange = $(this.elName);
  2719. var val = $(toChange).find("#selectSaveCode").val();
  2720. if (val === "manual") {
  2721. $(toChange).find("#saveCode").removeAttr("disabled");
  2722. $(toChange).find("#saveCode").val("");
  2723. $(toChange).find("#saveCode").attr("placeholder", "Paste your code here");
  2724. }
  2725. else if (val === "current") {
  2726. $(toChange).find("#saveCode").removeAttr("placeholder");
  2727. $(toChange).find("#saveCode").val(Game.WriteSave(1));
  2728. $(toChange).find("#saveCode").attr("disabled", "1");
  2729. }
  2730. else {
  2731. $(toChange).find("#saveCode").removeAttr("placeholder");
  2732. $(toChange).find("#saveCode").val($(toChange).find("#selectSaveCode").val());
  2733. $(toChange).find("#saveCode").attr("disabled", "1");
  2734. }
  2735. this.render();
  2736. }
  2737. }),
  2738. SaveListView: Backbone.View.extend({
  2739. elName: '#savesListContainer',
  2740. initialize: function() {
  2741. var that = this;
  2742. this.listenTo(this.collection, "add", function() {that.update(); that.render();});
  2743. this.listenTo(this.collection, "remove", function() {that.update(); that.render();});
  2744. this.noAsked();
  2745. this.update();
  2746. this.render();
  2747. return (this);
  2748. },
  2749. update: function() {
  2750. CookieCheat.views.saveViews = [];
  2751. _.each(this.collection.models, function (item) {
  2752. CookieCheat.views.saveViews.push(new CookieCheat.Views.SaveView({model:item}));
  2753. });
  2754. return (this);
  2755. },
  2756. render: function() {
  2757. var toChange = $(this.elName);
  2758. var that = this;
  2759. $(toChange).toggleClass("superHidden", CookieCheat.views.saveViews.length === 0);
  2760. $(toChange).html("");
  2761. _.each(CookieCheat.views.saveViews, function (item) {
  2762. $(toChange).append(item.render().$el);
  2763. });
  2764. return (this);
  2765. },
  2766. noAsked: function () {
  2767. _.each(this.collection.models, function (model) {
  2768. model.set({asked: false});
  2769. });
  2770. }
  2771. }),
  2772. SaveView: Backbone.View.extend({
  2773. tagName: "div",
  2774. className: "tabElem",
  2775. initialize: function() {
  2776. this.listenTo(this.model, "change", this.render);
  2777. this.template = _.template(CookieCheat.miscVars.saveTemplate);
  2778. return (this);
  2779. },
  2780. render: function() {
  2781. this.$el.html(this.template());
  2782. var toChange = this.$el;
  2783. $(toChange).find('.myLoadBtn').off("click");
  2784. $(toChange).find('.myRemoveBtn').off("click");
  2785. $(toChange).find('.saveName').off("dblclick");
  2786. $(toChange).find('.enterNameSave').off("blur");
  2787. $(toChange).find('.myExportBtn').off("click");
  2788. $(toChange).find('.mySaveHereBtn').off("click");
  2789. var that = this;
  2790. $(toChange).find('.mySaveHereBtn').click(function() {that.savedHere.apply(that)});
  2791. $(toChange).find('.myExportBtn').click(function() {that.exported.apply(that)});
  2792. $(toChange).find('.myLoadBtn').click(function() {that.loaded.apply(that)});
  2793. $(toChange).find('.myRemoveBtn').click(function() {that.removed.apply(that)});
  2794. $(toChange).find('.saveName').dblclick(function() {that.dblclicked.apply(that)});
  2795. $(toChange).find('.enterNameSave').blur(function() {that.blured.apply(that)});
  2796. $(toChange).find('.saveName').text(this.model.get("name"));
  2797. $(toChange).find('.saveDate').text("Created : " + new Date(this.model.get("date")).toUTCString());
  2798. return (this);
  2799. },
  2800. savedHere: function() {
  2801. var that = this;
  2802. if (this.model.get("asked") || confirm("Do you want to overwrite " + this.model.get("name") + " with your current save ? (You won't be asked again to save here !)")) {
  2803. this.model.saveGame(Game.WriteSave(1));
  2804. this.model.set({asked: false});
  2805. CookieCheat.views.saveListView.noAsked();
  2806. this.model.save();
  2807. this.model.set({asked: true});
  2808. CookieCheat.currentSave = this.model;
  2809. Game.Popup("Game succesfully saved in the cheat interface !");
  2810. }
  2811. },
  2812. removed: function() {
  2813. var that = this;
  2814. if (confirm("Do you really want to remove [" + this.model.get("name") + "] ?")) {
  2815. this.$el.fadeOut("fast", function () {
  2816. that.model.destroy();
  2817. CookieCheat.collections.savesCollection.remove(that.model);
  2818. that.remove();
  2819. });
  2820. }
  2821. },
  2822. exported: function() {
  2823. prompt('Here is your exported save !', this.model.get("code"));
  2824. },
  2825. loaded: function() {
  2826. if (confirm("Do you want to save before loading another game ?")) {
  2827. if (typeof CookieCheat.currentSave !== "undefined" && CookieCheat.currentSave.get("asked") === true) {
  2828. CookieCheat.currentSave.saveGame(Game.WriteSave(1));
  2829. CookieCheat.currentSave.set({asked: false});
  2830. CookieCheat.currentSave.save();
  2831. }
  2832. else {
  2833. m = new CookieCheat.Models.SaveModel({
  2834. name: "Safe save",
  2835. code: Game.WriteSave(1),
  2836. });
  2837. CookieCheat.collections.savesCollection.add(m);
  2838. m.save();
  2839. }
  2840. }
  2841. CookieCheat.views.saveListView.noAsked();
  2842. CookieCheat.currentSave = this.model;
  2843. Game.LoadSave(this.model.get("code"));
  2844. },
  2845. dblclicked: function() {
  2846. var toChange = this.$el;
  2847. $(toChange).find('.saveName').hide();
  2848. $(toChange).find('.enterNameSave').val(this.model.get("name"));
  2849. $(toChange).find('.enterNameSave').show();
  2850. $(toChange).find('.enterNameSave').select();
  2851. },
  2852. blured: function() {
  2853. var toChange = this.$el;
  2854. var newName = $(toChange).find('.enterNameSave').val() + "";
  2855. if ((newName).length < 1)
  2856. newName = "noname";
  2857. $(toChange).find('.enterNameSave').hide();
  2858. this.model.set({name: newName});
  2859. $(toChange).find('.saveName').val(this.model.get("name"));
  2860. $(toChange).find('.saveName').show();
  2861. this.model.save();
  2862. }
  2863. }),
  2864. ChoiceListView: Backbone.View.extend({
  2865. elName: '#choicesListContainer',
  2866. initialize: function() {
  2867. var that = this;
  2868. this.listenTo(this.collection, "add", function() {that.update(); that.render();});
  2869. this.listenTo(this.collection, "remove", function() {that.update(); that.render();});
  2870. this.update();
  2871. this.render();
  2872. return (this);
  2873. },
  2874. update: function() {
  2875. var that = this;
  2876. CookieCheat.views.choiceViews = [];
  2877. _.each(this.collection.models, function (item) {
  2878. CookieCheat.views.choiceViews.push(new CookieCheat.Views.ChoiceView({model:item, collection: that.collection}));
  2879. });
  2880. return (this);
  2881. },
  2882. render: function() {
  2883. var toChange = $(this.elName);
  2884. var that = this;
  2885. $(toChange).toggleClass("superHidden", CookieCheat.views.choiceViews.length === 0);
  2886. $(toChange).html("");
  2887. _.each(CookieCheat.views.choiceViews, function (item) {
  2888. $(toChange).append(item.render().$el);
  2889. });
  2890. return (this);
  2891. }
  2892. }),
  2893. ChoiceView: Backbone.View.extend({
  2894. tagName: "div",
  2895. className: "tabElem",
  2896. initialize: function() {
  2897. this.listenTo(this.model, "change", this.render);
  2898. this.template = _.template(CookieCheat.miscVars.choiceTemplate);
  2899. return (this);
  2900. },
  2901. render: function() {
  2902. this.$el.html(this.template());
  2903. var toChange = this.$el;
  2904. var active = this.model.get("active");
  2905. $(toChange).find('.myToggleBtn').off("click");
  2906. $(toChange).find('.mySpawnBtn').off("click");
  2907. var that = this;
  2908. $(toChange).find('.myToggleBtn').click(function() {that.toggle.apply(that)});
  2909. $(toChange).find('.mySpawnBtn').click(function() {that.spawnNow.apply(that)});
  2910. $(toChange).find(".goodState").toggleClass("currentState", active);
  2911. $(toChange).find(".badState").toggleClass("currentState", !active);
  2912. $(toChange).find(".activeOrNot").text((active) ? "Active" : "Inactive");
  2913. $(toChange).find(".activeOrNot").toggleClass("superGood", active);
  2914. $(toChange).find(".activeOrNot").toggleClass("superBad", !active);
  2915. $(toChange).find(".choiceName").text(this.model.get("name"));
  2916. $(toChange).find(".choiceName").toggleClass("superGood", active);
  2917. $(toChange).find(".choiceName").toggleClass("superBad", !active);
  2918. return (this);
  2919. },
  2920. spawnNow: function () {
  2921. CookieCheat.executeChoice(this.model.toJSON());
  2922. },
  2923. toggle: function () {
  2924. this.model.set({active: !this.model.get("active")});
  2925. if (!this.model.get("active") && Game.goldenCookie.chainName === this.model.get("name"))
  2926. Game.goldenCookie.chain = 0;
  2927. this.model.save();
  2928. this.collection.computeAndApply();
  2929. }
  2930. })
  2931. };
  2932. };
  2933. CookieCheat.addButton = function () {
  2934. $("#comments").append('<div id="cheatButton" class="warning button"><span style="top: -8px;font-size: 0.8em;position: relative;">More<br>Cheats</span></div>');
  2935. l("cheatButton").onclick = function() {
  2936. Game.ShowMenu('cheats');
  2937. };
  2938. };
  2939. CookieCheat.processMs = function (amount) {
  2940. var result = "", len;
  2941. var _results = [];
  2942. if (amount === Infinity)
  2943. return 'a very long time...';
  2944. var _datas = {
  2945. years: {
  2946. name: "year",
  2947. plural: "years",
  2948. num: 1000 * 60 * 60 * 24 * 30 * 12
  2949. },
  2950. months: {
  2951. name: "month",
  2952. plural: "months",
  2953. num: 1000 * 60 * 60 * 24 * 30
  2954. },
  2955. days: {
  2956. name: "day",
  2957. plural: "days",
  2958. num: 1000 * 60 * 60 * 24
  2959. },
  2960. hours: {
  2961. name: "h",
  2962. num: 1000 * 60 * 60
  2963. },
  2964. minutes: {
  2965. name: "min",
  2966. plural: "mins",
  2967. num: 1000 * 60
  2968. },
  2969. seconds: {
  2970. name: "sec",
  2971. num: 1000
  2972. },
  2973. milliseconds: {
  2974. name: "ms",
  2975. num: 1
  2976. }
  2977. };
  2978. _.each(_datas, function (data) {
  2979. var tmpVal = 0;
  2980. tmpVal = Math.floor(amount / data.num);
  2981. amount -= (data.num * tmpVal);
  2982. if (tmpVal != 0) {
  2983. _results.push(tmpVal + ' ' + ((typeof data.plural !== "undefined" && tmpVal > 1) ? data.plural : data.name));
  2984. }
  2985. });
  2986. len = _results.length;
  2987. _.each(_results, function (str, index) {
  2988. result += str;
  2989. if (index === len - 1)
  2990. result += '.';
  2991. else
  2992. result += ', ';
  2993. });
  2994. return result;
  2995. };
  2996. CookieCheat.protectToKeepSafe = function () {
  2997. var replaceW1 = "var q = false;if ( !! CookieCheat.godMustCheck && (Game.cookies - price < CookieCheat.cookieToKeep)) q = confirm('The CookieGod warns you about the safe cookies... Are you sure ?');else if (!CookieCheat.godMustCheck || (Game.cookies - price >= CookieCheat.cookieToKeep && CookieCheat.godMustCheck)) q = true;if (q && Game.cookies >= price)";
  2998. var replaceW2 = "var q = false;if ( !! CookieCheat.godMustCheck && (Game.cookies - price < CookieCheat.cookieToKeep)) q = confirm('The CookieGod warns you about the safe cookies... Are you sure ?');else if (!CookieCheat.godMustCheck || (Game.cookies - price >= CookieCheat.cookieToKeep && CookieCheat.godMustCheck)) q = true;if (q && Game.cookies>=price && !this.bought)";
  2999. _.each(Game.ObjectsById, function (object, pos, collec) {
  3000. var tmp = object.buy.toString().replace("if (Game.cookies>=price)", replaceW1);
  3001. tmp = tmp.substring(tmp.indexOf('{') + 1, tmp.lastIndexOf("}"));
  3002. collec[pos].buy = new Function("amount", tmp);
  3003. });
  3004. _.each(Game.UpgradesById, function (upgrade, pos, collec) {
  3005. var tmp = upgrade.buy.toString().replace("if (Game.cookies>=price && !this.bought)", replaceW2);
  3006. tmp = tmp.substring(tmp.indexOf('{') + 1, tmp.lastIndexOf("}"));
  3007. collec[pos].buy = new Function(tmp);
  3008. });
  3009. };
  3010. // Base hashs
  3011. CookieCheat.howManyCookies = function (type, vals, fixAdd, ctx) {
  3012. if (!fixAdd)
  3013. fixAdd = 0;
  3014. if (!vals)
  3015. return 0;
  3016. if (!type)
  3017. type = "min";
  3018. if (typeof vals === "string" || !Array.isArray(vals))
  3019. vals = [vals];
  3020. if (!ctx)
  3021. ctx = this;
  3022. vals = _.map(vals, function (val) {
  3023. if (typeof val === "string")
  3024. val = new Function("return " + val);
  3025. return (_.isFunction(val) ? val.call(ctx) : val);
  3026. });
  3027. if (typeof fixAdd === "function")
  3028. fixAdd = fixAdd.call(ctx);
  3029. var res = -1;
  3030. if (type === "min") {
  3031. vals.sort(function (a, b) {
  3032. return (a - b);
  3033. });
  3034. res = vals[0]
  3035. } else if (type === "max") {
  3036. vals.sort(function (a, b) {
  3037. return (b - a);
  3038. });
  3039. res = vals[0]
  3040. } else if (type === "random") {
  3041. res = vals[Math.floor(Math.random() * vals.length)];
  3042. } else if (type === "exact") {
  3043. res = vals[0];
  3044. }
  3045. return (res < 0 ? 0 + fixAdd : res + fixAdd);
  3046. };
  3047. CookieCheat.parseOrAnd = function (arr, cur) {
  3048. var res = '(';
  3049. var that = this;
  3050. var passed = false;
  3051. cur = cur || "and"; // De base, on est dans un "ET"
  3052. var separator = (cur === "or" ? " || " : " && ");
  3053. if (_.isArray(arr)) {
  3054. for (var i in arr) {
  3055. var hash = arr[i];
  3056. for (var key in hash) {
  3057. if (key === "or" || key === "and") {
  3058. if (passed)
  3059. res += separator;
  3060. res += CookieCheat.parseOrAnd.call(this, hash[key], key);
  3061. passed = true;
  3062. }
  3063. else if (key === "val" || key === "vals" || key === "value" || key === "values") {
  3064. if (Array.isArray(hash[key])) {
  3065. _.each(hash[key], function (item, index) {
  3066. if (typeof item === "function") {
  3067. hash[key][index] = "(" + _.bind(item, that) + ")()";
  3068. }
  3069. });
  3070. }
  3071. if (passed)
  3072. res += separator;
  3073. if (Array.isArray(hash[key]))
  3074. res += hash[key].join(separator);
  3075. else
  3076. res += (typeof hash[key] === "function" ? "(" + _.bind(hash[key], that) + ")()" : hash[key]);
  3077. passed = true;
  3078. }
  3079. }
  3080. }
  3081. }
  3082. else {
  3083. var hash = arr;
  3084. for (var key in hash) {
  3085. if (key === "or" || key === "and") {
  3086. if (passed)
  3087. res += separator;
  3088. res += CookieCheat.parseOrAnd.call(this, hash[key], key);
  3089. passed = true;
  3090. }
  3091. else if (key === "val" || key === "vals" || key === "value" || key === "values") {
  3092. if (Array.isArray(hash[key])) {
  3093. _.each(hash[key], function (item, index) {
  3094. if (typeof item === "function") {
  3095. hash[key][index] = "(" + _.bind(item, that) + ")()";
  3096. }
  3097. });
  3098. }
  3099. if (passed)
  3100. res += separator;
  3101. if (Array.isArray(hash[key]))
  3102. res += hash[key].join(separator);
  3103. else
  3104. res += (typeof hash[key] === "function" ? "(" + _.bind(hash[key], that) + ")()" : hash[key]);
  3105. passed = true;
  3106. }
  3107. }
  3108. }
  3109. res += ')';
  3110. return (res);
  3111. };
  3112. CookieCheat.clone = function (hash) {
  3113. var newObj;
  3114. if (hash === null || typeof hash === "undefined")
  3115. return hash;
  3116. else if (typeof hash !== "string" && Array.isArray(hash)) {
  3117. newObj = [];
  3118. for (var i = 0, n = hash.length; i < n; i++) {
  3119. newObj.push(CookieCheat.clone(hash[i]));
  3120. }
  3121. }
  3122. else if (typeof hash === 'object' && hash.constructor === Object) {
  3123. newObj = {};
  3124. for (var key in hash) {
  3125. if (typeof hash[key] !== "string" && Array.isArray(hash[key])) {
  3126. newObj[key] = [];
  3127. for (var i = 0, n = hash[key].length; i < n; i++) {
  3128. newObj[key].push(CookieCheat.clone(hash[key][i]));
  3129. }
  3130. }
  3131. else if (typeof hash[key] === 'object' && hash[key].constructor === Object) {
  3132. newObj[key] = CookieCheat.clone(hash[key]);
  3133. }
  3134. else {
  3135. newObj[key] = hash[key];
  3136. }
  3137. }
  3138. }
  3139. else
  3140. newObj = hash;
  3141. return (newObj);
  3142. };
  3143. CookieCheat.loadChoices = function () {
  3144. CookieCheat.choices = {
  3145. "frenzy": {
  3146. active: true,
  3147. name: "frenzy",
  3148. condition: [{
  3149. val: "Game.goldenCookie.wrath == 0"
  3150. }],
  3151. type: "cpsChange",
  3152. message: "'Frenzy : cookie production x' + this.params.frenzy + ' for ' + this.realTime + ' seconds !'",
  3153. recalculateGains: true,
  3154. params: {
  3155. frenzy: 7,
  3156. baseTime: 77,
  3157. }
  3158. },
  3159. "multiply cookies": {
  3160. active: true,
  3161. name: "multiply cookies",
  3162. condition: [{
  3163. val: "true"
  3164. }],
  3165. type: "cookieModif",
  3166. message: "'Lucky ! +' + Beautify(this.cookies) + ' cookies !'",
  3167. recalculateGains: false,
  3168. params: {
  3169. modifType: "earn",
  3170. modifFunc: Game.Earn,
  3171. type: "min",
  3172. fixAdd: 13,
  3173. vals: [
  3174. "Game.cookies * 0.1",
  3175. "Game.cookiesPs * 60 * 20"
  3176. ]
  3177. }
  3178. },
  3179. "ruin cookies": {
  3180. active: true,
  3181. name: "ruin cookies",
  3182. condition: [{
  3183. val: "Game.goldenCookie.wrath > 0"
  3184. }],
  3185. type: "cookieModif",
  3186. message: "'Ruin ! Lost ' + Beautify(this.cookies) + ' cookies !'",
  3187. recalculateGains: false,
  3188. params: {
  3189. modifType: "lose",
  3190. modifFunc: Game.Spend,
  3191. type: "min",
  3192. fixAdd: 13,
  3193. val: [
  3194. "Game.cookies * 0.05",
  3195. "Game.cookiesPs * 60 * 10"
  3196. ]
  3197. }
  3198. },
  3199. "blood frenzy": {
  3200. active: true,
  3201. name: "blood frenzy",
  3202. condition: [{
  3203. val: [
  3204. "Game.goldenCookie.wrath > 0",
  3205. "Math.random() < 0.3"
  3206. ]
  3207. }],
  3208. type: "cpsChange",
  3209. message: "'Elder frenzy : cookie production x' + this.params.frenzy + ' for ' + this.realTime + ' seconds !'",
  3210. recalculateGains: true,
  3211. params: {
  3212. frenzy: 666,
  3213. baseTime: 6
  3214. }
  3215. },
  3216. "clot": {
  3217. active: true,
  3218. name: "clot",
  3219. condition: [{
  3220. val: "Game.goldenCookie.wrath > 0"
  3221. }],
  3222. type: "cpsChange",
  3223. message: "'Clot : cookie production halved for ' + this.realTime + ' seconds !'",
  3224. recalculateGains: true,
  3225. params: {
  3226. frenzy: 0.5,
  3227. baseTime: 66
  3228. }
  3229. },
  3230. "auto click": {
  3231. active: true,
  3232. name: "auto click",
  3233. condition: [{
  3234. val: [
  3235. "Math.random() < 0.05",
  3236. "Game.cookieClicks > 1000"
  3237. ]
  3238. }],
  3239. type: "autoClick",
  3240. message: "'Auto click ! Clicking ' + this.params.clicksPerSecond + ' times per second for ' + this.realTime + ' seconds !'",
  3241. recalculateGains: false,
  3242. params: {
  3243. clicksPerSecond: 10,
  3244. baseTime: 5
  3245. }
  3246. },
  3247. "click frenzy": {
  3248. active: true,
  3249. name: "click frenzy",
  3250. condition: [{
  3251. val: "Math.random() < 0.05"
  3252. }],
  3253. type: "mouseChange",
  3254. message: "'Click frenzy ! Clicking power x' + this.params.frenzy + ' for ' + this.realTime + ' seconds !'",
  3255. recalculateGains: true,
  3256. params: {
  3257. frenzy: 777,
  3258. baseTime: 13
  3259. }
  3260. },
  3261. "chain cookie": {
  3262. active: true,
  3263. name: "chain cookie",
  3264. condition: [{
  3265. or: [{
  3266. and: [{
  3267. val: [
  3268. "Game.cookiesEarned >= 100000",
  3269. "Math.random() < 0.01"
  3270. ]
  3271. }]
  3272. }, {
  3273. and: [{
  3274. val: ["Game.goldenCookie.wrath > 0",
  3275. "Math.random() < 0.3"
  3276. ]
  3277. }]
  3278. }]
  3279. }],
  3280. type: "chain",
  3281. message: "(function () {" +
  3282. "if (Game.goldenCookie.chain !== 0)" +
  3283. "return 'Cookie chain : +' + Beautify(this.cookies) + ' cookies !';" +
  3284. "else " +
  3285. "return 'Cookie chain : +' + Beautify(this.cookies) + ' cookies !<br>Cookie chain over.';" +
  3286. "}).call(this)",
  3287. recalculateGains: false,
  3288. params: {
  3289. chainNumber: "i", // i = Game.goldenCookie.chain
  3290. chainType: "cookieModif",
  3291. chainStop: [{
  3292. or: [{
  3293. val: [
  3294. "Math.random() < 0.1",
  3295. 'parseInt(this.cookies.toString() + this.cookies.toString()[0]) >= Game.cookies * 0.25',
  3296. "this.cookies > Game.cookiesPs * 60 * 60 * 6"
  3297. ]
  3298. }]
  3299. }, {
  3300. val: "this.chainRealNumber > 4"
  3301. }],
  3302. // Basic cookieModif params below
  3303. modifType: "earn",
  3304. modifFunc: Game.Earn,
  3305. type: "exact",
  3306. fixAdd: 0,
  3307. val: "(function () {" +
  3308. "var max = this.chainRealNumber;" +
  3309. "var moni = '';" +
  3310. "var digit = (Game.goldenCookie.wrath?'6':'7');" +
  3311. "for (var i = 0; i < max; i++)" +
  3312. "moni += digit;" +
  3313. "return parseInt(moni);" +
  3314. "}).call(this)"
  3315. }
  3316. },
  3317. "chain multiplicator": {
  3318. active: true,
  3319. name: "chain multiplicator",
  3320. condition: [{
  3321. val: [
  3322. "Math.random() < 0.01",
  3323. "Game.cookiesEarned >= 1000000000",
  3324. "Game.goldenCookie.wrath == 1",
  3325. "Game.elderWrath > 1"
  3326. ]
  3327. }],
  3328. type: "chain",
  3329. message: "(function () {" +
  3330. "if (Game.goldenCookie.chain !== 0)" +
  3331. "return 'Chain multiplicator : cookie production x' + this.params.frenzy + ' for ' + this.realTime + ' seconds !';" +
  3332. "else " +
  3333. "return 'Chain multiplicator : cookie production x' + this.params.frenzy + ' for ' + this.realTime + ' seconds !<br>Cookie chain over.';" +
  3334. "}).call(this)",
  3335. recalculateGains: true,
  3336. params: {
  3337. chainNumber: "4 + 0.5 * i", // i = Game.goldenCookie.chain
  3338. chainType: "cpsChange",
  3339. chainStop: [{
  3340. or: [{
  3341. vals: [
  3342. "Math.random() < 0.1",
  3343. "this.chainRealNumber > 15"
  3344. ]
  3345. }],
  3346. vals: "this.chainRealNumber > 4"
  3347. }],
  3348. // Basic cpschange params below
  3349. frenzy: "this.chainRealNumber",
  3350. baseTime: "20 + this.chainRealNumber * 3",
  3351. }
  3352. },
  3353. "cheaper": {
  3354. active: true,
  3355. name: "cheaper",
  3356. condition: [{
  3357. vals: [
  3358. "Math.random() < 0.2",
  3359. "Game.HasAchiev('Architect')",
  3360. "Game.HasAchiev('Mathematician')",
  3361. "Game.HasAchiev('Base 10')"
  3362. ]
  3363. }],
  3364. type: "buildingSales",
  3365. message: "'Cheaper : ' + this.params.buildingName + ' price x' + this.params.priceMultiplicator + ' for ' + this.realTime + ' seconds !'",
  3366. recalculateGains: true,
  3367. params: {
  3368. baseTime: 12,
  3369. priceMultiplicator: 0.2,
  3370. buildingName: "choose(_.pluck(Game.ObjectsById, 'name'))"
  3371. }
  3372. }
  3373. };
  3374. };
  3375. CookieCheat.updateMouseCps = function () {
  3376. Game.mouseFrenzyPower = 1;
  3377. CookieCheat.oldGameFuncs.mouseCps = Game.mouseCps;
  3378. var newMouseCps = Game.mouseCps.toString().replace("if (Game.clickFrenzy>0) mult*=777", "if (Game.clickFrenzy > 0) mult *= (Game.mouseFrenzyPower || 777); else Game.mouseFrenzyPower = 1;")
  3379. newMouseCps = newMouseCps.substring(newMouseCps.indexOf('{') + 1, newMouseCps.lastIndexOf("}"));
  3380. Game.mouseCps = new Function(newMouseCps);
  3381. };
  3382. CookieCheat.executeChoice = function (hash) {
  3383. var ctx = CookieCheat.clone(hash);
  3384. var funcs = {
  3385. "cpsChange": function(ctx) {
  3386. var tmpTime = ctx.params.baseTime;
  3387. if (typeof ctx.params.baseTime === "string")
  3388. tmpTime = (new Function("return " + ctx.params.baseTime)).call(ctx);
  3389. ctx.realTime = tmpTime + tmpTime * Game.Has('Get lucky');
  3390. Game.frenzy = Game.fps * ctx.realTime;
  3391. if (typeof ctx.params.frenzy === "string")
  3392. ctx.params.frenzy = (new Function("return " + ctx.params.frenzy)).call(ctx);
  3393. Game.frenzyPower = ctx.params.frenzy;
  3394. funcs["finish"](ctx);
  3395. },
  3396. "cookieModif": function(ctx) {
  3397. if (_.isUndefined(ctx.cookies))
  3398. ctx.cookies = CookieCheat.howManyCookies(ctx.params.type, ctx.params.vals || ctx.params.val || ctx.params.value || ctx.params.values, ctx.params.fixAdd, ctx);
  3399. if (typeof ctx.params.modifFunc !== "undefined")
  3400. ctx.params.modifFunc(ctx.cookies);
  3401. else {
  3402. var f = (ctx.params.modifType === "earn" ? Game.Earn : Game.Spend);
  3403. f(ctx.cookies);
  3404. }
  3405. funcs["finish"](ctx);
  3406. },
  3407. "chain": function(ctx) {
  3408. Game.goldenCookie.chainName = ctx.name;
  3409. Game.goldenCookie.chain++;
  3410. ctx.chainRealNumber = (new Function("i", "return " + ctx.params.chainNumber)).call(ctx, Game.goldenCookie.chain);
  3411. if (ctx.params.chainType === "cookieModif")
  3412. ctx.cookies = CookieCheat.howManyCookies(ctx.params.type, ctx.params.vals || ctx.params.val || ctx.params.value || ctx.params.values, ctx.params.fixAdd, ctx);
  3413. if ((new Function("return " + CookieCheat.parseOrAnd(ctx.params.chainStop))).call(ctx))
  3414. Game.goldenCookie.chain = 0;
  3415. funcs[ctx.params.chainType](ctx);
  3416. },
  3417. "autoClick": function(ctx) {
  3418. var tmpTime = ctx.params.baseTime;
  3419. if (typeof ctx.params.baseTime === "string")
  3420. tmpTime = (new Function("return " + ctx.params.baseTime)).call(ctx);
  3421. ctx.realTime = tmpTime + tmpTime * Game.Has('Get lucky');
  3422. if (typeof ctx.params.clicksPerSecond === "string")
  3423. ctx.params.clicksPerSecond = (new Function("return " + ctx.params.clicksPerSecond)).call(ctx);
  3424. ctx.clickInterval = 1000 / ctx.params.clicksPerSecond;
  3425. var f = function (clicks) {
  3426. if (clicks > 0) {
  3427. Game.ClickCookie();
  3428. setTimeout(function() {f(clicks - 1);}, ctx.clickInterval);
  3429. }
  3430. };
  3431. f(ctx.realTime * ctx.params.clicksPerSecond);
  3432. funcs["finish"](ctx);
  3433. },
  3434. "mouseChange": function(ctx) {
  3435. var tmpTime = ctx.params.baseTime;
  3436. if (typeof ctx.params.baseTime === "string")
  3437. tmpTime = (new Function("return " + ctx.params.baseTime)).call(ctx);
  3438. ctx.realTime = tmpTime + tmpTime * Game.Has('Get lucky');
  3439. if (typeof ctx.params.frenzy === "string")
  3440. ctx.params.frenzy = (new Function("return " + ctx.params.frenzy)).call(ctx);
  3441. Game.mouseFrenzyPower = ctx.params.frenzy;
  3442. Game.clickFrenzy = Game.fps * ctx.realTime;
  3443. funcs["finish"](ctx);
  3444. },
  3445. "buildingSales": function(ctx) {
  3446. var tmpTime = ctx.params.baseTime;
  3447. if (typeof ctx.params.baseTime === "string")
  3448. tmpTime = (new Function("return " + ctx.params.baseTime)).call(ctx);
  3449. ctx.realTime = tmpTime + tmpTime * Game.Has('Get lucky');
  3450. if (typeof ctx.params.priceMultiplicator === "string")
  3451. ctx.params.priceMultiplicator = (new Function("return " + ctx.params.priceMultiplicator)).call(ctx);
  3452. if (typeof ctx.params.buildingName === "string")
  3453. ctx.params.buildingName = (new Function("return " + ctx.params.buildingName)).call(ctx);
  3454. if (typeof Game.Objects[ctx.params.buildingName].oldBasePrice === "undefined" || Game.Objects[ctx.params.buildingName].oldBasePrice === Game.Objects[ctx.params.buildingName].basePrice)
  3455. Game.Objects[ctx.params.buildingName].oldBasePrice = Game.Objects[ctx.params.buildingName].basePrice;
  3456. Game.Objects[ctx.params.buildingName].basePrice = Game.Objects[ctx.params.buildingName].oldBasePrice * ctx.params.priceMultiplicator;
  3457. Game.Objects[ctx.params.buildingName].currentTime = 0;
  3458. Game.Objects[ctx.params.buildingName].stopTime = ctx.realTime;
  3459. Game.Objects[ctx.params.buildingName].refresh();
  3460. Game.storeToRebuild = 1;
  3461. var f = function () {
  3462. if (Game.Objects[ctx.params.buildingName].currentTime == Game.Objects[ctx.params.buildingName].stopTime) {
  3463. Game.Objects[ctx.params.buildingName].basePrice = Game.Objects[ctx.params.buildingName].oldBasePrice;
  3464. Game.Objects[ctx.params.buildingName].refresh();
  3465. Game.storeToRebuild = 1;
  3466. }
  3467. else {
  3468. Game.Objects[ctx.params.buildingName].currentTime += 1;
  3469. setTimeout(f, 1000);
  3470. }
  3471. };
  3472. setTimeout(f, 1000);
  3473. funcs["finish"](ctx);
  3474. },
  3475. "finish": function(ctx) {
  3476. Game.Popup((new Function("return " + ctx.message)).call(ctx));
  3477. if (ctx.recalculateGains)
  3478. Game.recalculateGains = 1;
  3479. }
  3480. };
  3481. funcs[hash.type](ctx);
  3482. };
  3483. CookieCheat.generateChooseFunc = function (choices) {
  3484. var func = "var list = [];";
  3485. for (var i in choices) {
  3486. if (choices[i].active === true) {
  3487. var tmp = 'if ' + CookieCheat.parseOrAnd.call(choices[i], choices[i].condition) + 'list.push("' + choices[i].name + '");';
  3488. func += tmp;
  3489. }
  3490. }
  3491. func += 'if (list.length > 1 && Game.goldenCookie.last != \'\' && Math.random() < 0.8 && list.indexOf(Game.goldenCookie.last) != -1)list.splice(list.indexOf(Game.goldenCookie.last), 1);return choose(list);';
  3492. return (new Function(func));
  3493. };
  3494. CookieCheat.computeChoose = function() {
  3495. Game.goldenCookie.choose = CookieCheat.generateChooseFunc(CookieCheat.choices);
  3496. };
  3497. CookieCheat.updateGoldenCookieclick = function () {
  3498. CookieCheat.oldGameFuncs.goldenCookie = {
  3499. click: Game.goldenCookie.click
  3500. };
  3501. l('goldenCookie').onclick = Game.goldenCookie.click = function() {
  3502. if (Game.goldenCookie.life > 0) {
  3503. Game.goldenCookie.toDie = 1;
  3504. Game.goldenClicks++;
  3505. if (Game.goldenClicks >= 1)
  3506. Game.Win('Golden cookie');
  3507. if (Game.goldenClicks >= 7)
  3508. Game.Win('Lucky cookie');
  3509. if (Game.goldenClicks >= 27)
  3510. Game.Win('A stroke of luck');
  3511. if (Game.goldenClicks >= 77)
  3512. Game.Win('Fortune');
  3513. if (Game.goldenClicks >= 777)
  3514. Game.Win('Leprechaun');
  3515. if (Game.goldenClicks >= 7777)
  3516. Game.Win('Black cat\'s paw');
  3517. if (Game.goldenClicks >= 7)
  3518. Game.Unlock('Lucky day');
  3519. if (Game.goldenClicks >= 27)
  3520. Game.Unlock('Serendipity');
  3521. if (Game.goldenClicks >= 77)
  3522. Game.Unlock('Get lucky');
  3523. l('goldenCookie').style.display = 'none';
  3524. var choice = Game.goldenCookie.choose();
  3525. if (Game.goldenCookie.chain > 0)
  3526. choice = Game.goldenCookie.chainName;
  3527. if (typeof choice !== "undefined") {
  3528. Game.goldenCookie.last = choice;
  3529. if (CookieCheat.choices[choice].type !== "chain")
  3530. Game.goldenCookie.chain = 0;
  3531. CookieCheat.executeChoice(CookieCheat.choices[choice]);
  3532. }
  3533. else {
  3534. var f = function () {if (CookieCheat.timeToRemoveFace === 0) Game.removeClass("elderWrath"); else {CookieCheat.timeToRemoveFace--;setTimeout(f, 1000)}};
  3535. Game.Popup("Nothing happened... Easter egg spotted !! Here is a face cookie.");
  3536. Game.addClass("elderWrath");
  3537. CookieCheat.timeToRemoveFace = 5;
  3538. f();
  3539. }
  3540. Game.goldenCookie.minTime = Game.goldenCookie.getMinTime();
  3541. Game.goldenCookie.maxTime = Game.goldenCookie.getMaxTime();
  3542. }
  3543. };
  3544. };
  3545. CookieCheat.initAllBackbone = function () {
  3546. CookieCheat.views.safeCookiesView = new CookieCheat.Views.SafeCookiesView();
  3547. CookieCheat.views.earnCookiesView = new CookieCheat.Views.EarnCookiesView();
  3548. CookieCheat.views.earnChipsView = new CookieCheat.Views.EarnChipsView();
  3549. CookieCheat.models.autoClickWrinklersModel = new CookieCheat.Models.AutoClickWrinklersModel();
  3550. CookieCheat.views.autoClickWrinklersView = new CookieCheat.Views.AutoClickWrinklersView({model: CookieCheat.models.autoClickWrinklersModel});
  3551. CookieCheat.models.autoClickModel = new CookieCheat.Models.AutoClickModel();
  3552. CookieCheat.views.autoClickView = new CookieCheat.Views.AutoClickView({model: CookieCheat.models.autoClickModel});
  3553. CookieCheat.models.autoSpawnModel = new CookieCheat.Models.AutoSpawnModel();
  3554. CookieCheat.views.autoSpawnView = new CookieCheat.Views.AutoSpawnView({model: CookieCheat.models.autoSpawnModel});
  3555. CookieCheat.models.autoGoldenClickModel = new CookieCheat.Models.AutoGoldenClickModel();
  3556. CookieCheat.views.autoGoldenClickView = new CookieCheat.Views.AutoGoldenClickView({model: CookieCheat.models.autoGoldenClickModel});
  3557. CookieCheat.models.autoReindeerClickModel = new CookieCheat.Models.AutoReindeerClickModel();
  3558. CookieCheat.views.autoReindeerClickView = new CookieCheat.Views.AutoReindeerClickView({model: CookieCheat.models.autoReindeerClickModel});
  3559. CookieCheat.models.goldenSpawnModel = new CookieCheat.Models.GoldenSpawnModel();
  3560. CookieCheat.views.goldenSpawnView = new CookieCheat.Views.GoldenSpawnView({model: CookieCheat.models.goldenSpawnModel});
  3561. CookieCheat.collections.buildingsCollection = new CookieCheat.Collections.BuildingsCollection();
  3562. CookieCheat.collections.buildingsCollection.fetch();
  3563. CookieCheat.views.buildingFormView = new CookieCheat.Views.BuildingFormView();
  3564. CookieCheat.views.buildingListView = new CookieCheat.Views.BuildingListView({collection: CookieCheat.collections.buildingsCollection});
  3565. CookieCheat.collections.upgradesCollection = new CookieCheat.Collections.UpgradesCollection();
  3566. CookieCheat.collections.upgradesCollection.fetch();
  3567. CookieCheat.views.upgradeFormView = new CookieCheat.Views.UpgradeFormView();
  3568. CookieCheat.views.upgradeListView = new CookieCheat.Views.UpgradeListView({collection: CookieCheat.collections.upgradesCollection});
  3569. CookieCheat.collections.savesCollection = new CookieCheat.Collections.SavesCollection();
  3570. CookieCheat.collections.savesCollection.fetch();
  3571. CookieCheat.views.saveFormView = new CookieCheat.Views.SaveFormView();
  3572. CookieCheat.views.saveListView = new CookieCheat.Views.SaveListView({collection: CookieCheat.collections.savesCollection});
  3573. CookieCheat.collections.choicesCollection = new CookieCheat.Collections.ChoicesCollection();
  3574. CookieCheat.collections.choicesCollection.fetch();
  3575. if (CookieCheat.collections.choicesCollection.models.length === 0) {
  3576. CookieCheat.collections.choicesCollection.getFromArray(CookieCheat.choices);
  3577. }
  3578. CookieCheat.collections.choicesCollection.computeAndApply();
  3579. CookieCheat.views.choiceListView = new CookieCheat.Views.ChoiceListView({collection: CookieCheat.collections.choicesCollection});
  3580. };
  3581. CookieCheat.changeTab = function (name) {
  3582. delete CookieCheat.old;
  3583. CookieCheat.currentTab = name;
  3584. Game.UpdateMenu();
  3585. };
  3586. Game.oldUpdateMenu = Game.UpdateMenu;
  3587. CookieCheat.oldGameFuncs.UpdateMenu = Game.UpdateMenu;
  3588. Game.UpdateMenu = function() {
  3589. if (Game.onMenu !== 'cheats') {
  3590. delete CookieCheat.old;
  3591. return Game.oldUpdateMenu();
  3592. }
  3593. if (typeof CookieCheat.old !== "undefined")
  3594. return;
  3595. else
  3596. CookieCheat.old = "Used";
  3597. var str = '';
  3598. if (Game.onMenu != '')
  3599. str += '<div style="position:absolute;top:8px;right:8px;cursor:pointer;font-size:16px;" onclick="Game.ShowMenu(Game.onMenu);">X</div>';
  3600. if (Game.onMenu === "cheats") { // Cheat menu here
  3601. str += CookieCheat.strForFeatures.topHeadBand();
  3602. if (CookieCheat.currentTab === "tools")
  3603. str += CookieCheat.strForFeatures.tools();
  3604. else if (CookieCheat.currentTab === "cheats")
  3605. str += CookieCheat.strForFeatures.cheats();
  3606. else if (CookieCheat.currentTab === "mods")
  3607. str += CookieCheat.strForFeatures.mods();
  3608. }
  3609. l('menu').innerHTML = str;
  3610. if (CookieCheat.currentTab === "tools") {
  3611. CookieCheat.views.safeCookiesView.render();
  3612. CookieCheat.views.buildingFormView.render();
  3613. CookieCheat.views.buildingListView.render();
  3614. CookieCheat.views.upgradeFormView.render();
  3615. CookieCheat.views.upgradeListView.render();
  3616. CookieCheat.views.saveFormView.render();
  3617. CookieCheat.views.saveListView.render();
  3618. }
  3619. else if (CookieCheat.currentTab === "cheats") {
  3620. CookieCheat.views.earnCookiesView.render();
  3621. CookieCheat.views.earnChipsView.render();
  3622. CookieCheat.views.autoClickView.render();
  3623. CookieCheat.views.autoSpawnView.render();
  3624. CookieCheat.views.autoGoldenClickView.render();
  3625. CookieCheat.views.autoReindeerClickView.render();
  3626. CookieCheat.views.goldenSpawnView.render();
  3627. CookieCheat.views.autoClickWrinklersView.render();
  3628. }
  3629. else if (CookieCheat.currentTab === "mods") {
  3630. CookieCheat.views.choiceListView.render();
  3631. }
  3632. }
  3633. CookieCheat.launch();
  3634. }