Add jsbench
[c11concurrency-benchmarks.git] / jsbench-2013.1 / amazon / firefox-win / urm.js
1 /* Replayable replacements for global functions */
2
3 /***************************************************************
4  * BEGIN STABLE.JS
5  **************************************************************/
6 //! stable.js 0.1.3, https://github.com/Two-Screen/stable
7 //! © 2012 Stéphan Kochen, Angry Bytes. MIT licensed.
8 (function() {
9
10 // A stable array sort, because `Array#sort()` is not guaranteed stable.
11 // This is an implementation of merge sort, without recursion.
12
13 var stable = function(arr, comp) {
14     if (typeof(comp) !== 'function') {
15         comp = function(a, b) {
16             a = String(a);
17             b = String(b);
18             if (a < b) return -1;
19             if (a > b) return 1;
20             return 0;
21         };
22     }
23
24     var len = arr.length;
25
26     if (len <= 1) return arr;
27
28     // Rather than dividing input, simply iterate chunks of 1, 2, 4, 8, etc.
29     // Chunks are the size of the left or right hand in merge sort.
30     // Stop when the left-hand covers all of the array.
31     var oarr = arr;
32     for (var chk = 1; chk < len; chk *= 2) {
33         arr = pass(arr, comp, chk);
34     }
35     for (var i = 0; i < len; i++) {
36         oarr[i] = arr[i];
37     }
38     return oarr;
39 };
40
41 // Run a single pass with the given chunk size. Returns a new array.
42 var pass = function(arr, comp, chk) {
43     var len = arr.length;
44     // Output, and position.
45     var result = new Array(len);
46     var i = 0;
47     // Step size / double chunk size.
48     var dbl = chk * 2;
49     // Bounds of the left and right chunks.
50     var l, r, e;
51     // Iterators over the left and right chunk.
52     var li, ri;
53
54     // Iterate over pairs of chunks.
55     for (l = 0; l < len; l += dbl) {
56         r = l + chk;
57         e = r + chk;
58         if (r > len) r = len;
59         if (e > len) e = len;
60
61         // Iterate both chunks in parallel.
62         li = l;
63         ri = r;
64         while (true) {
65             // Compare the chunks.
66             if (li < r && ri < e) {
67                 // This works for a regular `sort()` compatible comparator,
68                 // but also for a simple comparator like: `a > b`
69                 if (comp(arr[li], arr[ri]) <= 0) {
70                     result[i++] = arr[li++];
71                 }
72                 else {
73                     result[i++] = arr[ri++];
74                 }
75             }
76             // Nothing to compare, just flush what's left.
77             else if (li < r) {
78                 result[i++] = arr[li++];
79             }
80             else if (ri < e) {
81                 result[i++] = arr[ri++];
82             }
83             // Both iterators are at the chunk ends.
84             else {
85                 break;
86             }
87         }
88     }
89
90     return result;
91 };
92
93 var arrsort = function(comp) {
94     return stable(this, comp);
95 };
96
97 if (Object.defineProperty) {
98     Object.defineProperty(Array.prototype, "sort", {
99         configurable: true, writable: true, enumerable: false,
100         value: arrsort
101     });
102 } else {
103     Array.prototype.sort = arrsort;
104 }
105
106 })();
107 /***************************************************************
108  * END STABLE.JS
109  **************************************************************/
110
111 /*
112  * In a generated replay, this file is partially common, boilerplate code
113  * included in every replay, and partially generated replay code. The following
114  * header applies to the boilerplate code. A comment indicating "Auto-generated
115  * below this comment" marks the separation between these two parts.
116  *
117  * Copyright (C) 2011, 2012 Purdue University
118  * Written by Gregor Richards
119  * All rights reserved.
120  * 
121  * Redistribution and use in source and binary forms, with or without
122  * modification, are permitted provided that the following conditions are met:
123  * 
124  * 1. Redistributions of source code must retain the above copyright notice,
125  *    this list of conditions and the following disclaimer.
126  * 2. Redistributions in binary form must reproduce the above copyright notice,
127  *    this list of conditions and the following disclaimer in the documentation
128  *    and/or other materials provided with the distribution.
129  * 
130  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
131  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
132  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
133  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
134  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
135  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
136  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
137  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
138  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
139  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
140  * POSSIBILITY OF SUCH DAMAGE.
141  */
142
143 (function() {
144     // global eval alias
145     var geval = eval;
146
147     // detect if we're in a browser or not
148     var inbrowser = false;
149     var inharness = false;
150     var finished = false;
151     if (typeof window !== "undefined" && "document" in window) {
152         inbrowser = true;
153         if (window.parent && "JSBNG_handleResult" in window.parent) {
154             inharness = true;
155         }
156     } else if (typeof global !== "undefined") {
157         window = global;
158         window.top = window;
159     } else {
160         window = (function() { return this; })();
161         window.top = window;
162     }
163
164     if ("console" in window) {
165         window.JSBNG_Console = window.console;
166     }
167
168     var callpath = [];
169
170     // global state
171     var JSBNG_Replay = window.top.JSBNG_Replay = {
172         push: function(arr, fun) {
173             arr.push(fun);
174             return fun;
175         },
176
177         path: function(str) {
178             verifyPath(str);
179         },
180
181         forInKeys: function(of) {
182             var keys = [];
183             for (var k in of)
184                 keys.push(k);
185             return keys.sort();
186         }
187     };
188
189     // the actual replay runner
190     function onload() {
191         try {
192             delete window.onload;
193         } catch (ex) {}
194
195         var jr = JSBNG_Replay$;
196         var cb = function() {
197             var end = new Date().getTime();
198             finished = true;
199
200             var msg = "Time: " + (end - st) + "ms";
201     
202             if (inharness) {
203                 window.parent.JSBNG_handleResult({error:false, time:(end - st)});
204             } else if (inbrowser) {
205                 var res = document.createElement("div");
206     
207                 res.style.position = "fixed";
208                 res.style.left = "1em";
209                 res.style.top = "1em";
210                 res.style.width = "35em";
211                 res.style.height = "5em";
212                 res.style.padding = "1em";
213                 res.style.backgroundColor = "white";
214                 res.style.color = "black";
215                 res.appendChild(document.createTextNode(msg));
216     
217                 document.body.appendChild(res);
218             } else if (typeof console !== "undefined") {
219                 console.log(msg);
220             } else if (typeof print !== "undefined") {
221                 // hopefully not the browser print() function :)
222                 print(msg);
223             }
224         };
225
226         // force it to JIT
227         jr(false);
228
229         // then time it
230         var st = new Date().getTime();
231         while (jr !== null) {
232             jr = jr(true, cb);
233         }
234     }
235
236     // add a frame at replay time
237     function iframe(pageid) {
238         var iw;
239         if (inbrowser) {
240             // represent the iframe as an iframe (of course)
241             var iframe = document.createElement("iframe");
242             iframe.style.display = "none";
243             document.body.appendChild(iframe);
244             iw = iframe.contentWindow;
245             iw.document.write("<script type=\"text/javascript\">var JSBNG_Replay_geval = eval;</script>");
246             iw.document.close();
247         } else {
248             // no general way, just lie and do horrible things
249             var topwin = window;
250             (function() {
251                 var window = {};
252                 window.window = window;
253                 window.top = topwin;
254                 window.JSBNG_Replay_geval = function(str) {
255                     eval(str);
256                 }
257                 iw = window;
258             })();
259         }
260         return iw;
261     }
262
263     // called at the end of the replay stuff
264     function finalize() {
265         if (inbrowser) {
266             setTimeout(onload, 0);
267         } else {
268             onload();
269         }
270     }
271
272     // verify this recorded value and this replayed value are close enough
273     function verify(rep, rec) {
274         if (rec !== rep &&
275             (rep === rep || rec === rec) /* NaN test */) {
276             // FIXME?
277             if (typeof rec === "function" && typeof rep === "function") {
278                 return true;
279             }
280             if (typeof rec !== "object" || rec === null ||
281                 !(("__JSBNG_unknown_" + typeof(rep)) in rec)) {
282                 return false;
283             }
284         }
285         return true;
286     }
287
288     // general message
289     var firstMessage = true;
290     function replayMessage(msg) {
291         if (inbrowser) {
292             if (firstMessage)
293                 document.open();
294             firstMessage = false;
295             document.write(msg);
296         } else {
297             console.log(msg);
298         }
299     }
300
301     // complain when there's an error
302     function verificationError(msg) {
303         if (finished) return;
304         if (inharness) {
305             window.parent.JSBNG_handleResult({error:true, msg: msg});
306         } else replayMessage(msg);
307         throw new Error();
308     }
309
310     // to verify a set
311     function verifySet(objstr, obj, prop, gvalstr, gval) {
312         if (/^on/.test(prop)) {
313             // these aren't instrumented compatibly
314             return;
315         }
316
317         if (!verify(obj[prop], gval)) {
318             var bval = obj[prop];
319             var msg = "Verification failure! " + objstr + "." + prop + " is not " + gvalstr + ", it's " + bval + "!";
320             verificationError(msg);
321         }
322     }
323
324     // to verify a call or new
325     function verifyCall(iscall, func, cthis, cargs) {
326         var ok = true;
327         var callArgs = func.callArgs[func.inst];
328         iscall = iscall ? 1 : 0;
329         if (cargs.length !== callArgs.length - 1) {
330             ok = false;
331         } else {
332             if (iscall && !verify(cthis, callArgs[0])) ok = false;
333             for (var i = 0; i < cargs.length; i++) {
334                 if (!verify(cargs[i], callArgs[i+1])) ok = false;
335             }
336         }
337         if (!ok) {
338             var msg = "Call verification failure!";
339             verificationError(msg);
340         }
341
342         return func.returns[func.inst++];
343     }
344
345     // to verify the callpath
346     function verifyPath(func) {
347         var real = callpath.shift();
348         if (real !== func) {
349             var msg = "Call path verification failure! Expected " + real + ", found " + func;
350             verificationError(msg);
351         }
352     }
353
354     // figure out how to define getters
355     var defineGetter;
356     if (Object.defineProperty) {
357         var odp = Object.defineProperty;
358         defineGetter = function(obj, prop, getter, setter) {
359             if (typeof setter === "undefined") setter = function(){};
360             odp(obj, prop, {"enumerable": true, "configurable": true, "get": getter, "set": setter});
361         };
362     } else if (Object.prototype.__defineGetter__) {
363         var opdg = Object.prototype.__defineGetter__;
364         var opds = Object.prototype.__defineSetter__;
365         defineGetter = function(obj, prop, getter, setter) {
366             if (typeof setter === "undefined") setter = function(){};
367             opdg.call(obj, prop, getter);
368             opds.call(obj, prop, setter);
369         };
370     } else {
371         defineGetter = function() {
372             verificationError("This replay requires getters for correct behavior, and your JS engine appears to be incapable of defining getters. Sorry!");
373         };
374     }
375
376     var defineRegetter = function(obj, prop, getter, setter) {
377         defineGetter(obj, prop, function() {
378             return getter.call(this, prop);
379         }, function(val) {
380             // once it's set by the client, it's claimed
381             setter.call(this, prop, val);
382             Object.defineProperty(obj, prop, {
383                 "enumerable": true, "configurable": true, "writable": true,
384                 "value": val
385             });
386         });
387     }
388
389     // for calling events
390     var fpc = Function.prototype.call;
391
392 // resist the urge, don't put a })(); here!
393 /******************************************************************************
394  * Auto-generated below this comment
395  *****************************************************************************/
396 var ow876774570 = window;
397 var f876774570_0;
398 var o0;
399 var f876774570_6;
400 var f876774570_7;
401 var f876774570_16;
402 var f876774570_17;
403 var o1;
404 var o2;
405 var o3;
406 var f876774570_65;
407 var f876774570_396;
408 var f876774570_398;
409 var f876774570_400;
410 var o4;
411 var o5;
412 var f876774570_410;
413 var o6;
414 var o7;
415 var o8;
416 var f876774570_417;
417 var f876774570_418;
418 var f876774570_419;
419 var f876774570_429;
420 var f876774570_430;
421 var f876774570_434;
422 var f876774570_446;
423 var f876774570_450;
424 JSBNG_Replay.s6642b77f01f4d49ef240b29032e6da4372359178_0 = [];
425 JSBNG_Replay.s62d148c5af61b0a7d54ea938e5a6a16cd1eee833_1 = [];
426 JSBNG_Replay.s62d148c5af61b0a7d54ea938e5a6a16cd1eee833_2 = [];
427 JSBNG_Replay.s6642b77f01f4d49ef240b29032e6da4372359178_1 = [];
428 JSBNG_Replay.s8293f527e56b5e5ce44ad4d8d5c9f8f5b3feb86c_7 = [];
429 // 1
430 // record generated by JSBench 323eb38c39a6+ at 2013-07-24T19:56:06.320Z
431 // 2
432 // 3
433 f876774570_0 = function() { return f876774570_0.returns[f876774570_0.inst++]; };
434 f876774570_0.returns = [];
435 f876774570_0.inst = 0;
436 // 4
437 ow876774570.JSBNG__Date = f876774570_0;
438 // 5
439 o0 = {};
440 // 6
441 ow876774570.JSBNG__document = o0;
442 // 15
443 f876774570_6 = function() { return f876774570_6.returns[f876774570_6.inst++]; };
444 f876774570_6.returns = [];
445 f876774570_6.inst = 0;
446 // 16
447 ow876774570.JSBNG__removeEventListener = f876774570_6;
448 // 17
449 f876774570_7 = function() { return f876774570_7.returns[f876774570_7.inst++]; };
450 f876774570_7.returns = [];
451 f876774570_7.inst = 0;
452 // 18
453 ow876774570.JSBNG__addEventListener = f876774570_7;
454 // 19
455 ow876774570.JSBNG__top = ow876774570;
456 // 28
457 ow876774570.JSBNG__scrollX = 0;
458 // 29
459 ow876774570.JSBNG__scrollY = 0;
460 // 38
461 f876774570_16 = function() { return f876774570_16.returns[f876774570_16.inst++]; };
462 f876774570_16.returns = [];
463 f876774570_16.inst = 0;
464 // 39
465 ow876774570.JSBNG__setTimeout = f876774570_16;
466 // 40
467 f876774570_17 = function() { return f876774570_17.returns[f876774570_17.inst++]; };
468 f876774570_17.returns = [];
469 f876774570_17.inst = 0;
470 // 41
471 ow876774570.JSBNG__setInterval = f876774570_17;
472 // 60
473 ow876774570.JSBNG__frames = ow876774570;
474 // 63
475 ow876774570.JSBNG__self = ow876774570;
476 // 70
477 ow876774570.JSBNG__content = ow876774570;
478 // 81
479 ow876774570.JSBNG__closed = false;
480 // 84
481 ow876774570.JSBNG__pkcs11 = null;
482 // 87
483 ow876774570.JSBNG__opener = null;
484 // 88
485 ow876774570.JSBNG__defaultStatus = "";
486 // 89
487 o1 = {};
488 // 90
489 ow876774570.JSBNG__location = o1;
490 // 91
491 ow876774570.JSBNG__innerWidth = 1078;
492 // 92
493 ow876774570.JSBNG__innerHeight = 731;
494 // 93
495 ow876774570.JSBNG__outerWidth = 1092;
496 // 94
497 ow876774570.JSBNG__outerHeight = 826;
498 // 95
499 ow876774570.JSBNG__screenX = 48;
500 // 96
501 ow876774570.JSBNG__screenY = 0;
502 // 97
503 ow876774570.JSBNG__mozInnerScreenX = 0;
504 // 98
505 ow876774570.JSBNG__mozInnerScreenY = 0;
506 // 99
507 ow876774570.JSBNG__pageXOffset = 0;
508 // 100
509 ow876774570.JSBNG__pageYOffset = 0;
510 // 101
511 ow876774570.JSBNG__scrollMaxX = 0;
512 // 102
513 ow876774570.JSBNG__scrollMaxY = 0;
514 // 103
515 ow876774570.JSBNG__fullScreen = false;
516 // 136
517 ow876774570.JSBNG__frameElement = null;
518 // 141
519 ow876774570.JSBNG__mozPaintCount = 0;
520 // 144
521 ow876774570.JSBNG__mozAnimationStartTime = 1374695829225;
522 // 145
523 o2 = {};
524 // 146
525 ow876774570.JSBNG__mozIndexedDB = o2;
526 // 151
527 o3 = {};
528 // 152
529 ow876774570.JSBNG__performance = o3;
530 // 155
531 ow876774570.JSBNG__devicePixelRatio = 1;
532 // 160
533 f876774570_65 = function() { return f876774570_65.returns[f876774570_65.inst++]; };
534 f876774570_65.returns = [];
535 f876774570_65.inst = 0;
536 // 161
537 ow876774570.JSBNG__Image = f876774570_65;
538 // 166
539 ow876774570.JSBNG__name = "uaMatch";
540 // 173
541 ow876774570.JSBNG__status = "";
542 // 772
543 ow876774570.JSBNG__indexedDB = o2;
544 // undefined
545 o2 = null;
546 // 807
547 ow876774570.JSBNG__onerror = null;
548 // 0
549 JSBNG_Replay$ = function(real, cb) { if (!real) return;
550 // 814
551 geval("Function.prototype.bind = function(to) {\n    var f = this;\n    return function() {\n        Function.prototype.apply.call(f, to, arguments);\n    };\n};");
552 // 816
553 // 815
554 geval("Function.prototype.bind = function(to) {\n    var f = this;\n    return function() {\n        Function.prototype.apply.call(f, to, arguments);\n    };\n};");
555 // 818
556 o2 = {};
557 // 819
558 f876774570_0.returns.push(o2);
559 // undefined
560 o2 = null;
561 // 817
562 geval("var ue_t0 = ((ue_t0 || +new JSBNG__Date()));");
563 // 821
564 o2 = {};
565 // 822
566 f876774570_0.returns.push(o2);
567 // undefined
568 o2 = null;
569 // 823
570 o2 = {};
571 // 824
572 f876774570_0.returns.push(o2);
573 // undefined
574 o2 = null;
575 // 825
576 o2 = {};
577 // 826
578 f876774570_0.returns.push(o2);
579 // undefined
580 o2 = null;
581 // 827
582 o2 = {};
583 // 828
584 f876774570_0.returns.push(o2);
585 // undefined
586 o2 = null;
587 // 829
588 o2 = {};
589 // 830
590 f876774570_0.returns.push(o2);
591 // undefined
592 o2 = null;
593 // 831
594 ow876774570.JSBNG__onJSBNG__stop = undefined;
595 // 832
596 f876774570_396 = function() { return f876774570_396.returns[f876774570_396.inst++]; };
597 f876774570_396.returns = [];
598 f876774570_396.inst = 0;
599 // 833
600 ow876774570.JSBNG__onbeforeunload = f876774570_396;
601 // 834
602 o0.webkitHidden = void 0;
603 // 835
604 o0.oHidden = void 0;
605 // 836
606 o0.msHidden = void 0;
607 // 837
608 o0.mozHidden = false;
609 // 838
610 o0.mozVisibilityState = "visible";
611 // 839
612 o2 = {};
613 // 840
614 f876774570_0.returns.push(o2);
615 // undefined
616 o2 = null;
617 // 841
618 f876774570_398 = function() { return f876774570_398.returns[f876774570_398.inst++]; };
619 f876774570_398.returns = [];
620 f876774570_398.inst = 0;
621 // 842
622 o0.JSBNG__addEventListener = f876774570_398;
623 // 843
624 f876774570_398.returns.push(undefined);
625 // 844
626 f876774570_7.returns.push(undefined);
627 // 845
628 f876774570_7.returns.push(undefined);
629 // 846
630 o2 = {};
631 // 847
632 f876774570_0.returns.push(o2);
633 // 848
634 f876774570_400 = function() { return f876774570_400.returns[f876774570_400.inst++]; };
635 f876774570_400.returns = [];
636 f876774570_400.inst = 0;
637 // 849
638 o2.getTime = f876774570_400;
639 // undefined
640 o2 = null;
641 // 850
642 f876774570_400.returns.push(1374695829349);
643 // 851
644 o2 = {};
645 // 852
646 f876774570_0.returns.push(o2);
647 // undefined
648 o2 = null;
649 // 853
650 o2 = {};
651 // 854
652 f876774570_0.returns.push(o2);
653 // undefined
654 o2 = null;
655 // 855
656 o2 = {};
657 // 856
658 f876774570_0.returns.push(o2);
659 // undefined
660 o2 = null;
661 // 820
662 geval("var ue_csm = window;\nue_csm.ue_hob = ((ue_csm.ue_hob || +new JSBNG__Date()));\n(function(e, a) {\n    var b = {\n        ec: 0,\n        pec: 0,\n        ts: 0,\n        erl: [],\n        mxe: 50,\n        startTimer: function() {\n            b.ts++;\n            JSBNG__setInterval(function() {\n                ((((e.ue && ((b.pec < b.ec)))) && e.uex(\"at\")));\n                b.pec = b.ec;\n            }, 10000);\n        }\n    };\n    function d(f) {\n        if (((b.ec > b.mxe))) {\n            return;\n        }\n    ;\n    ;\n        b.ec++;\n        f.pageURL = ((\"\" + ((a.JSBNG__location ? a.JSBNG__location.href : \"\"))));\n        b.erl.push(f);\n    };\n;\n    function c(i, h, f) {\n        var g = {\n            m: i,\n            f: h,\n            l: f,\n            fromOnError: 1,\n            args: arguments\n        };\n        e.ueLogError(g);\n        return false;\n    };\n;\n    c.skipTrace = 1;\n    d.skipTrace = 1;\n    e.ueLogError = d;\n    e.ue_err = b;\n    a.JSBNG__onerror = c;\n})(ue_csm, window);\nue_csm.ue_hoe = +new JSBNG__Date();\nvar ue_id = \"0JNNCCYK0E23P11J4NSE\", ue_sid = \"181-0531756-0630505\", ue_mid = \"ATVPDKIKX0DER\", ue_sn = \"www.amazon.com\", ue_url = \"/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742/ref=sr_1_1/uedata/nvp/unsticky/181-0531756-0630505/Detail/ntpoffrw\", ue_furl = \"fls-na.amazon.com\", ue_pr = 0, ue_navtiming = 1, ue_log_idx = 0, ue_log_f = 0, ue_fcsn = 1, ue_ctb0tf = 1, ue_fst = 0, ue_fna = 1, ue_swi = 1, ue_swm = 4, ue_ufia = 1, ue_onbful = 3;\nif (!window.ue_csm) {\n    var ue_csm = window;\n}\n;\n;\nue_csm.ue_hob = ((ue_csm.ue_hob || +new JSBNG__Date));\nfunction ue_viz() {\n    (function(d, j, g) {\n        var b, l, e, a, c = [\"\",\"moz\",\"ms\",\"o\",\"webkit\",], k = 0, f = 20, h = \"JSBNG__addEventListener\", i = \"JSBNG__attachEvent\";\n        while ((((b = c.pop()) && !k))) {\n            l = ((((b ? ((b + \"H\")) : \"h\")) + \"idden\"));\n            if (k = ((typeof j[l] == \"boolean\"))) {\n                e = ((b + \"visibilitychange\"));\n                a = ((b + \"VisibilityState\"));\n            }\n        ;\n        ;\n        };\n    ;\n        {\n            function m(q) {\n                if (((d.ue.viz.length < f))) {\n                    var p = q.type, n = q.originalEvent;\n                    if (!((((/^focus./.test(p) && n)) && ((((n.toElement || n.fromElement)) || n.relatedTarget))))) {\n                        var r = ((j[a] || ((((((p == \"JSBNG__blur\")) || ((p == \"focusout\")))) ? \"hidden\" : \"visible\")))), o = ((+new JSBNG__Date - d.ue.t0));\n                        d.ue.viz.push(((((r + \":\")) + o)));\n                        ((((((ue.iel && ((ue.iel.length > 0)))) && ((r == \"visible\")))) && uex(\"at\")));\n                    }\n                ;\n                ;\n                }\n            ;\n            ;\n            };\n            ((window.top.JSBNG_Replay.s8293f527e56b5e5ce44ad4d8d5c9f8f5b3feb86c_7.push)((m)));\n        };\n    ;\n        m({\n        });\n        if (k) {\n            j[h](e, m, 0);\n        }\n    ;\n    ;\n    })(ue_csm, JSBNG__document, window);\n};\n;\nue_csm.ue_hoe = +new JSBNG__Date;\nue_csm.ue_hob = ((ue_csm.ue_hob || +new JSBNG__Date()));\n(function(e, h) {\n    e.ueinit = ((((e.ueinit || 0)) + 1));\n    e.ue = {\n        t0: ((h.aPageStart || e.ue_t0)),\n        id: e.ue_id,\n        url: e.ue_url,\n        a: \"\",\n        b: \"\",\n        h: {\n        },\n        r: {\n            ld: 0,\n            oe: 0,\n            ul: 0\n        },\n        s: 1,\n        t: {\n        },\n        sc: {\n        },\n        iel: [],\n        ielf: [],\n        fc_idx: {\n        },\n        viz: [],\n        v: 31\n    };\n    e.ue.tagC = function() {\n        var j = [];\n        return function(k) {\n            if (k) {\n                j.push(k);\n            }\n        ;\n        ;\n            return j.slice(0);\n        };\n    };\n    e.ue.tag = e.ue.tagC();\n    e.ue.ifr = ((((((h.JSBNG__top !== h.JSBNG__self)) || (h.JSBNG__frameElement))) ? 1 : 0));\n    function c(l, o, q, n) {\n        if (((e.ue_log_f && e.ue.log))) {\n            e.ue.log({\n                f: \"uet\",\n                en: l,\n                s: o,\n                so: q,\n                to: n\n            }, \"csm\");\n        }\n    ;\n    ;\n        var p = ((n || (new JSBNG__Date()).getTime()));\n        var j = ((!o && ((typeof q != \"undefined\"))));\n        if (j) {\n            return;\n        }\n    ;\n    ;\n        if (l) {\n            var m = ((o ? ((d(\"t\", o) || d(\"t\", o, {\n            }))) : e.ue.t));\n            m[l] = p;\n            {\n                var fin0keys = ((window.top.JSBNG_Replay.forInKeys)((q))), fin0i = (0);\n                var k;\n                for (; (fin0i < fin0keys.length); (fin0i++)) {\n                    ((k) = (fin0keys[fin0i]));\n                    {\n                        d(k, o, q[k]);\n                    };\n                };\n            };\n        ;\n        }\n    ;\n    ;\n        return p;\n    };\n;\n    function d(k, l, m) {\n        if (((e.ue_log_f && e.ue.log))) {\n            e.ue.log({\n                f: \"ues\",\n                k: k,\n                s: l,\n                v: m\n            }, \"csm\");\n        }\n    ;\n    ;\n        var n, j;\n        if (k) {\n            n = j = e.ue;\n            if (((l && ((l != n.id))))) {\n                j = n.sc[l];\n                if (!j) {\n                    j = {\n                    };\n                    ((m ? (n.sc[l] = j) : j));\n                }\n            ;\n            ;\n            }\n        ;\n        ;\n            n = ((m ? (j[k] = m) : j[k]));\n        }\n    ;\n    ;\n        return n;\n    };\n;\n    function g(n, o, m, k, j) {\n        if (((e.ue_log_f && e.ue.log))) {\n            e.ue.log({\n                f: \"ueh\",\n                ek: n\n            }, \"csm\");\n        }\n    ;\n    ;\n        var l = ((\"JSBNG__on\" + m)), p = o[l];\n        if (((typeof (p) == \"function\"))) {\n            if (n) {\n                e.ue.h[n] = p;\n            }\n        ;\n        ;\n        }\n         else {\n            p = function() {\n            \n            };\n        }\n    ;\n    ;\n        o[l] = ((j ? function(q) {\n            k(q);\n            p(q);\n        } : function(q) {\n            p(q);\n            k(q);\n        }));\n        o[l].isUeh = 1;\n    };\n;\n    function b(t, n, s) {\n        if (((e.ue_log_f && e.ue.log))) {\n            e.ue.log({\n                f: \"uex\",\n                en: t,\n                s: n,\n                so: s\n            }, \"csm\");\n        }\n    ;\n    ;\n        function l(P, N) {\n            var L = [P,], G = 0, M = {\n            }, E;\n            if (N) {\n                L.push(\"m=1\");\n                M[N] = 1;\n            }\n             else {\n                M = e.ue.sc;\n            }\n        ;\n        ;\n            {\n                var fin1keys = ((window.top.JSBNG_Replay.forInKeys)((M))), fin1i = (0);\n                var F;\n                for (; (fin1i < fin1keys.length); (fin1i++)) {\n                    ((F) = (fin1keys[fin1i]));\n                    {\n                        var H = d(\"wb\", F), K = ((d(\"t\", F) || {\n                        })), J = ((d(\"t0\", F) || e.ue.t0));\n                        if (((N || ((H == 2))))) {\n                            var O = ((H ? G++ : \"\"));\n                            L.push(((((((\"sc\" + O)) + \"=\")) + F)));\n                            {\n                                var fin2keys = ((window.top.JSBNG_Replay.forInKeys)((K))), fin2i = (0);\n                                var I;\n                                for (; (fin2i < fin2keys.length); (fin2i++)) {\n                                    ((I) = (fin2keys[fin2i]));\n                                    {\n                                        if (((((I.length <= 3)) && K[I]))) {\n                                            L.push(((((((I + O)) + \"=\")) + ((K[I] - J)))));\n                                        }\n                                    ;\n                                    ;\n                                    };\n                                };\n                            };\n                        ;\n                            L.push(((((((\"t\" + O)) + \"=\")) + K[t])));\n                            if (((d(\"ctb\", F) || d(\"wb\", F)))) {\n                                E = 1;\n                            }\n                        ;\n                        ;\n                        }\n                    ;\n                    ;\n                    };\n                };\n            };\n        ;\n            if (((!o && E))) {\n                L.push(\"ctb=1\");\n            }\n        ;\n        ;\n            return L.join(\"&\");\n        };\n    ;\n        function w(H, F, J, E) {\n            if (!H) {\n                return;\n            }\n        ;\n        ;\n            var I = new JSBNG__Image(), K = ((((((!E || !e.ue.log)) || !h.amznJQ)) || ((h.amznJQ && h.amznJQ.isMock)))), L = e.ue_err;\n            function G() {\n                if (!e.ue.b) {\n                    return;\n                }\n            ;\n            ;\n                var M = e.ue.b;\n                e.ue.b = \"\";\n                w(M, F, J, 1);\n            };\n        ;\n            if (((e.ue.b && !e.ue_swi))) {\n                I.JSBNG__onload = G;\n            }\n        ;\n        ;\n            if (K) {\n                e.ue.iel.push(I);\n                I.src = H;\n            }\n        ;\n        ;\n            if (((e.ue.log && ((((J || E)) || e.ue_ctb0tf))))) {\n                e.ue.log(H, \"uedata\", {\n                    n: 1\n                });\n                e.ue.ielf.push(H);\n            }\n        ;\n        ;\n            if (((L && !L.ts))) {\n                L.startTimer();\n            }\n        ;\n        ;\n            if (e.ue_swi) {\n                G();\n            }\n        ;\n        ;\n        };\n    ;\n        function C(E) {\n            if (!ue.collected) {\n                var G = E.timing, F = E.navigation;\n                if (G) {\n                    e.ue.t.na_ = G.navigationStart;\n                    e.ue.t.ul_ = G.unloadEventStart;\n                    e.ue.t._ul = G.unloadEventEnd;\n                    e.ue.t.rd_ = G.redirectStart;\n                    e.ue.t._rd = G.redirectEnd;\n                    e.ue.t.fe_ = G.fetchStart;\n                    e.ue.t.lk_ = G.domainLookupStart;\n                    e.ue.t._lk = G.domainLookupEnd;\n                    e.ue.t.co_ = G.connectStart;\n                    e.ue.t._co = G.connectEnd;\n                    e.ue.t.sc_ = G.secureConnectionStart;\n                    e.ue.t.rq_ = G.requestStart;\n                    e.ue.t.rs_ = G.responseStart;\n                    e.ue.t._rs = G.responseEnd;\n                    e.ue.t.dl_ = G.domLoading;\n                    e.ue.t.di_ = G.domInteractive;\n                    e.ue.t.de_ = G.domContentLoadedEventStart;\n                    e.ue.t._de = G.domContentLoadedEventEnd;\n                    e.ue.t._dc = G.domComplete;\n                    e.ue.t.ld_ = G.loadEventStart;\n                    e.ue.t._ld = G.loadEventEnd;\n                }\n            ;\n            ;\n                if (F) {\n                    e.ue.t.ty = ((F.type + e.ue.t0));\n                    e.ue.t.rc = ((F.redirectCount + e.ue.t0));\n                    if (e.ue.tag) {\n                        e.ue.tag(((F.redirectCount ? \"redirect\" : \"nonredirect\")));\n                    }\n                ;\n                ;\n                }\n            ;\n            ;\n                e.ue.collected = 1;\n            }\n        ;\n        ;\n        };\n    ;\n        if (((!n && ((typeof s != \"undefined\"))))) {\n            return;\n        }\n    ;\n    ;\n        {\n            var fin3keys = ((window.top.JSBNG_Replay.forInKeys)((s))), fin3i = (0);\n            var j;\n            for (; (fin3i < fin3keys.length); (fin3i++)) {\n                ((j) = (fin3keys[fin3i]));\n                {\n                    d(j, n, s[j]);\n                };\n            };\n        };\n    ;\n        c(\"pc\", n, s);\n        var y = ((d(\"id\", n) || e.ue.id)), q = ((((((((((((e.ue.url + \"?\")) + t)) + \"&v=\")) + e.ue.v)) + \"&id=\")) + y)), o = ((d(\"ctb\", n) || d(\"wb\", n)));\n        if (o) {\n            q += ((\"&ctb=\" + o));\n        }\n    ;\n    ;\n        if (((e.ueinit > 1))) {\n            q += ((\"&ic=\" + e.ueinit));\n        }\n    ;\n    ;\n        var B = ((h.JSBNG__performance || h.JSBNG__webkitPerformance)), z = e.ue.bfini, r = ((((B && B.navigation)) && ((B.navigation.type == 2)))), p = ((((n && ((n != y)))) && d(\"ctb\", n))), k;\n        if (!p) {\n            if (((z && ((z > 1))))) {\n                q += ((\"&bft=\" + ((z - 1))));\n                q += \"&bfform=1\";\n            }\n             else {\n                if (r) {\n                    q += \"&bft=1\";\n                }\n            ;\n            ;\n            }\n        ;\n        ;\n            if (r) {\n                q += \"&bfnt=1\";\n            }\n        ;\n        ;\n        }\n    ;\n    ;\n        if (((((e.ue._fi && ((t == \"at\")))) && ((!n || ((n == y))))))) {\n            q += e.ue._fi();\n        }\n    ;\n    ;\n        if (((((((t == \"ld\")) || ((t == \"ul\")))) && ((!n || ((n == y))))))) {\n            if (((t == \"ld\"))) {\n                if (((h.JSBNG__onbeforeunload && h.JSBNG__onbeforeunload.isUeh))) {\n                    h.JSBNG__onbeforeunload = null;\n                }\n            ;\n            ;\n                ue.r.ul = e.ue_onbful;\n                if (((e.ue_onbful == 3))) {\n                    i(\"beforeunload\", e.onUl);\n                }\n            ;\n            ;\n                if (((JSBNG__document.ue_backdetect && JSBNG__document.ue_backdetect.ue_back))) {\n                    JSBNG__document.ue_backdetect.ue_back.value++;\n                }\n            ;\n            ;\n                if (e._uess) {\n                    k = e._uess();\n                }\n            ;\n            ;\n            }\n        ;\n        ;\n            if (((((e.ue_navtiming && B)) && B.timing))) {\n                d(\"ctb\", y, \"1\");\n                if (((e.ue_navtiming == 1))) {\n                    e.ue.t.tc = B.timing.navigationStart;\n                }\n            ;\n            ;\n            }\n        ;\n        ;\n            if (B) {\n                C(B);\n            }\n        ;\n        ;\n            e.ue.t.hob = e.ue_hob;\n            e.ue.t.hoe = e.ue_hoe;\n            if (e.ue.ifr) {\n                q += \"&ifr=1\";\n            }\n        ;\n        ;\n        }\n    ;\n    ;\n        c(t, n, s);\n        var x = ((((((t == \"ld\")) && n)) && d(\"wb\", n))), A = 1;\n        if (x) {\n            d(\"wb\", n, 2);\n        }\n    ;\n    ;\n        {\n            var fin4keys = ((window.top.JSBNG_Replay.forInKeys)((e.ue.sc))), fin4i = (0);\n            var v;\n            for (; (fin4i < fin4keys.length); (fin4i++)) {\n                ((v) = (fin4keys[fin4i]));\n                {\n                    if (((d(\"wb\", v) == 1))) {\n                        A = 0;\n                        break;\n                    }\n                ;\n                ;\n                };\n            };\n        };\n    ;\n        if (x) {\n            if (((!e.ue.s && ((e.ue_swi || ((A && !e.ue_swi))))))) {\n                q = l(q, null);\n            }\n             else {\n                return;\n            }\n        ;\n        ;\n        }\n         else {\n            if (((((A && !e.ue_swi)) || e.ue_swi))) {\n                var D = l(q, null);\n                if (((D != q))) {\n                    e.ue.b = D;\n                }\n            ;\n            ;\n            }\n        ;\n        ;\n            if (k) {\n                q += k;\n            }\n        ;\n        ;\n            q = l(q, ((n || e.ue.id)));\n        }\n    ;\n    ;\n        if (((e.ue.b || x))) {\n            {\n                var fin5keys = ((window.top.JSBNG_Replay.forInKeys)((e.ue.sc))), fin5i = (0);\n                var v;\n                for (; (fin5i < fin5keys.length); (fin5i++)) {\n                    ((v) = (fin5keys[fin5i]));\n                    {\n                        if (((d(\"wb\", v) == 2))) {\n                            delete e.ue.sc[v];\n                        }\n                    ;\n                    ;\n                    };\n                };\n            };\n        ;\n        }\n    ;\n    ;\n        var u = 0;\n        if (!x) {\n            e.ue.s = 0;\n            var m = e.ue_err;\n            if (((((m && ((m.ec > 0)))) && ((m.pec < m.ec))))) {\n                m.pec = m.ec;\n                q += ((\"&ec=\" + m.ec));\n            }\n        ;\n        ;\n            u = d(\"ctb\", n);\n            d(\"t\", n, {\n            });\n        }\n    ;\n    ;\n        if (((!h.amznJQ && e.ue.tag))) {\n            e.ue.tag(\"noAmznJQ\");\n        }\n    ;\n    ;\n        if (((((q && e.ue.tag)) && ((e.ue.tag().length > 0))))) {\n            q += ((\"&csmtags=\" + e.ue.tag().join(\"|\")));\n            e.ue.tag = e.ue.tagC();\n        }\n    ;\n    ;\n        if (((((q && e.ue.viz)) && ((e.ue.viz.length > 0))))) {\n            q += ((\"&viz=\" + e.ue.viz.join(\"|\")));\n            e.ue.viz = [];\n        }\n    ;\n    ;\n        e.ue.a = q;\n        w(q, t, u, x);\n    };\n;\n    function a(j, k, l) {\n        l = ((l || h));\n        if (l.JSBNG__addEventListener) {\n            l.JSBNG__addEventListener(j, k, false);\n        }\n         else {\n            if (l.JSBNG__attachEvent) {\n                l.JSBNG__attachEvent(((\"JSBNG__on\" + j)), k);\n            }\n        ;\n        ;\n        }\n    ;\n    ;\n    };\n;\n    ue.attach = a;\n    function i(j, k, l) {\n        l = ((l || h));\n        if (l.JSBNG__removeEventListener) {\n            l.JSBNG__removeEventListener(j, k);\n        }\n         else {\n            if (l.JSBNG__detachEvent) {\n                l.JSBNG__detachEvent(((\"JSBNG__on\" + j)), k);\n            }\n        ;\n        ;\n        }\n    ;\n    ;\n    };\n;\n    ue.detach = i;\n    function f() {\n        if (((e.ue_log_f && e.ue.log))) {\n            e.ue.log({\n                f: \"uei\"\n            }, \"csm\");\n        }\n    ;\n    ;\n        var l = e.ue.r;\n        function k(n) {\n            return function() {\n                if (!l[n]) {\n                    l[n] = 1;\n                    b(n);\n                }\n            ;\n            ;\n            };\n        };\n    ;\n        e.onLd = k(\"ld\");\n        e.onLdEnd = k(\"ld\");\n        e.onUl = k(\"ul\");\n        var j = {\n            beforeunload: e.onUl,\n            JSBNG__stop: k(\"os\")\n        };\n        {\n            var fin6keys = ((window.top.JSBNG_Replay.forInKeys)((j))), fin6i = (0);\n            var m;\n            for (; (fin6i < fin6keys.length); (fin6i++)) {\n                ((m) = (fin6keys[fin6i]));\n                {\n                    g(0, h, m, j[m]);\n                };\n            };\n        };\n    ;\n        ((e.ue_viz && ue_viz()));\n        a(\"load\", e.onLd);\n        if (((e.ue_onbful == 3))) {\n            a(\"beforeunload\", e.onUl);\n        }\n    ;\n    ;\n        c(\"ue\");\n    };\n;\n    ue.reset = function(k, j) {\n        if (!k) {\n            return;\n        }\n    ;\n    ;\n        ((e.ue_cel && e.ue_cel.reset()));\n        e.ue.t0 = +new JSBNG__Date();\n        e.ue.rid = k;\n        e.ue.id = k;\n        e.ue.fc_idx = {\n        };\n        e.ue.viz = [];\n    };\n    e.uei = f;\n    e.ueh = g;\n    e.ues = d;\n    e.uet = c;\n    e.uex = b;\n    f();\n})(ue_csm, window);\nue_csm.ue_hoe = +new JSBNG__Date();\nue_csm.ue_hob = ((ue_csm.ue_hob || +new JSBNG__Date()));\n(function(b) {\n    var a = b.ue;\n    a.rid = b.ue_id;\n    a.sid = b.ue_sid;\n    a.mid = b.ue_mid;\n    a.furl = b.ue_furl;\n    a.sn = b.ue_sn;\n    a.lr = [];\n    a.log = function(e, d, c) {\n        if (((a.lr.length == 500))) {\n            return;\n        }\n    ;\n    ;\n        a.lr.push([\"l\",e,d,c,a.d(),a.rid,]);\n    };\n    a.d = function(c) {\n        return ((+new JSBNG__Date - ((c ? 0 : a.t0))));\n    };\n})(ue_csm);\nue_csm.ue_hoe = +new JSBNG__Date();");
663 // 858
664 o2 = {};
665 // 859
666 f876774570_65.returns.push(o2);
667 // 860
668 // undefined
669 o2 = null;
670 // 857
671 geval("(function() {\n    var i = new JSBNG__Image;\n    i.src = \"http://ecx.images-amazon.com/images/I/51gdVAEfPUL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg\";\n})();");
672 // 861
673 geval("var amznJQ, jQueryPatchIPadOffset = false;\n(function() {\n    function f(x) {\n        return function() {\n            x.push(arguments);\n        };\n    };\n;\n    function ch(y) {\n        return String.fromCharCode(y);\n    };\n;\n    var a = [], c = [], cs = [], d = [], l = [], o = [], s = [], p = [], t = [];\n    amznJQ = {\n        _timesliceJS: false,\n        _a: a,\n        _c: c,\n        _cs: cs,\n        _d: d,\n        _l: l,\n        _o: o,\n        _s: s,\n        _pl: p,\n        addLogical: f(l),\n        addStyle: f(s),\n        addPL: f(p),\n        available: f(a),\n        chars: {\n            EOL: ch(10),\n            SQUOTE: ch(39),\n            DQUOTE: ch(34),\n            BACKSLASH: ch(92),\n            YEN: ch(165)\n        },\n        completedStage: f(cs),\n        declareAvailable: f(d),\n        onCompletion: f(c),\n        onReady: f(o),\n        strings: {\n        }\n    };\n}());");
674 // 862
675 geval("function amz_js_PopWin(url, JSBNG__name, options) {\n    var ContextWindow = window.open(url, JSBNG__name, options);\n    ContextWindow.JSBNG__focus();\n    return false;\n};\n;");
676 // 863
677 geval("function showElement(id) {\n    var elm = JSBNG__document.getElementById(id);\n    if (elm) {\n        elm.style.visibility = \"visible\";\n        if (((elm.getAttribute(\"JSBNG__name\") == \"heroQuickPromoDiv\"))) {\n            elm.style.display = \"block\";\n        }\n    ;\n    ;\n    }\n;\n;\n};\n;\nfunction hideElement(id) {\n    var elm = JSBNG__document.getElementById(id);\n    if (elm) {\n        elm.style.visibility = \"hidden\";\n        if (((elm.getAttribute(\"JSBNG__name\") == \"heroQuickPromoDiv\"))) {\n            elm.style.display = \"none\";\n        }\n    ;\n    ;\n    }\n;\n;\n};\n;\nfunction showHideElement(h_id, div_id) {\n    var hiddenTag = JSBNG__document.getElementById(h_id);\n    if (hiddenTag) {\n        showElement(div_id);\n    }\n     else {\n        hideElement(div_id);\n    }\n;\n;\n};\n;\nwindow.isBowserFeatureCleanup = 1;\nvar touchDeviceDetected = false;\nvar CSMReqs = {\n    af: {\n        c: 2,\n        e: \"amznJQ.AboveTheFold\",\n        p: \"atf\"\n    },\n    cf: {\n        c: 2,\n        e: \"amznJQ.criticalFeature\",\n        p: \"cf\"\n    }\n};\nfunction setCSMReq(a) {\n    a = a.toLowerCase();\n    var b = CSMReqs[a];\n    if (((b && ((--b.c == 0))))) {\n        if (((typeof uet == \"function\"))) {\n            uet(a);\n        }\n    ;\n    ;\n    ;\n        if (b.e) {\n            amznJQ.completedStage(b.e);\n        }\n    ;\n    ;\n    ;\n        if (((typeof P != \"undefined\"))) {\n            P.register(b.p);\n        }\n    ;\n    ;\n    ;\n    }\n;\n;\n};\n;");
678 // 864
679 geval("var gbEnableTwisterJS = 0;\nvar isTwisterPage = 0;");
680 // 865
681 geval("if (window.amznJQ) {\n    amznJQ.addLogical(\"csm-base\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/csm-base/csm-base-min-1614510824._V1_.js\",]);\n    amznJQ.available(\"csm-base\", function() {\n    \n    });\n}\n;\n;");
682 // 866
683 geval("amznJQ.onCompletion(\"amznJQ.criticalFeature\", function() {\n    amznJQ.available(\"navbarJS-jQuery\", function() {\n    \n    });\n    amznJQ.available(\"finderFitsJS\", function() {\n    \n    });\n    amznJQ.available(\"twister\", function() {\n    \n    });\n    amznJQ.available(\"swfjs\", function() {\n    \n    });\n});");
684 // 867
685 geval("(function(d) {\n    var e = function(d) {\n        function b(f, c, b) {\n            f[b] = function() {\n                a._replay.push(c.concat({\n                    m: b,\n                    a: [].slice.call(arguments)\n                }));\n            };\n        };\n    ;\n        var a = {\n        };\n        a._sourceName = d;\n        a._replay = [];\n        a.getNow = function(a, b) {\n            return b;\n        };\n        a.when = function() {\n            var a = [{\n                m: \"when\",\n                a: [].slice.call(arguments)\n            },], c = {\n            };\n            b(c, a, \"run\");\n            b(c, a, \"declare\");\n            b(c, a, \"publish\");\n            b(c, a, \"build\");\n            return c;\n        };\n        b(a, [], \"declare\");\n        b(a, [], \"build\");\n        b(a, [], \"publish\");\n        b(a, [], \"importEvent\");\n        e._shims.push(a);\n        return a;\n    };\n    e._shims = [];\n    ((d.$Nav || (d.$Nav = e(\"rcx-nav\"))));\n    ((d.$Nav.make || (d.$Nav.make = e)));\n})(window);\nwindow.$Nav.when(\"exposeSBD.enable\", \"img.horz\", \"img.vert\", \"img.spin\", \"$popover\", \"btf.full\").run(function(d, e, j, b) {\n    function a(a) {\n        switch (typeof a) {\n          case \"boolean\":\n            h = a;\n            i = !0;\n            break;\n          case \"function\":\n            g = a;\n            c++;\n            break;\n          default:\n            c++;\n        };\n    ;\n        ((((i && ((2 < c)))) && g(h)));\n    };\n;\n    function f(a, b) {\n        var c = new JSBNG__Image;\n        ((b && (c.JSBNG__onload = b)));\n        c.src = a;\n        return c;\n    };\n;\n    var c = 0, g, h, i = !1;\n    f(e, ((d && a)));\n    f(j, ((d && a)));\n    window.$Nav.declare(\"protectExposeSBD\", a);\n    window.$Nav.declare(\"preloadSpinner\", function() {\n        f(b);\n    });\n});\n((window.amznJQ && amznJQ.available(\"navbarJS-beacon\", function() {\n\n})));\nwindow._navbarSpriteUrl = \"http://g-ecx.images-amazon.com/images/G/01/gno/beacon/BeaconSprite-US-01._V397411194_.png\";\n$Nav.importEvent(\"navbarJS-beacon\");\n$Nav.importEvent(\"NavAuiJS\");\n$Nav.declare(\"exposeSBD.enable\", false);\n$Nav.declare(\"img.spin\", \"http://g-ecx.images-amazon.com/images/G/01/javascripts/lib/popover/images/snake._V192571611_.gif\");\n$Nav.when(\"$\").run(function($) {\n    var ie6 = (($.browser.msie && ((parseInt($.browser.version) <= 6))));\n    $Nav.declare(\"img.horz\", ((ie6 ? \"http://g-ecx.images-amazon.com/images/G/01/gno/beacon/nav-pop-8bit-h._V155961234_.png\" : \"http://g-ecx.images-amazon.com/images/G/01/gno/beacon/nav-pop-h-v2._V137157005_.png\")));\n    $Nav.declare(\"img.vert\", ((ie6 ? \"http://g-ecx.images-amazon.com/images/G/01/gno/beacon/nav-pop-8bit-v._V155961234_.png\" : \"http://g-ecx.images-amazon.com/images/G/01/gno/beacon/nav-pop-v-v2._V137157005_.png\")));\n});");
686 // 869
687 o2 = {};
688 // 870
689 f876774570_0.returns.push(o2);
690 // 871
691 o2.getTime = f876774570_400;
692 // undefined
693 o2 = null;
694 // 872
695 f876774570_400.returns.push(1374695829400);
696 // 868
697 geval("window.Navbar = function(options) {\n    options = ((options || {\n    }));\n    this._loadedCount = 0;\n    this._hasUedata = ((typeof uet == \"function\"));\n    this._finishLoadQuota = ((options[\"finishLoadQuota\"] || 2));\n    this._startedLoading = false;\n    this._btfFlyoutContents = [];\n    this._saFlyoutHorizOffset = -16;\n    this._saMaskHorizOffset = -17;\n    this._sbd_config = {\n        major_delay: 300,\n        minor_delay: 100,\n        target_slop: 25\n    };\n    ((window.$Nav && $Nav.declare(\"config.sbd\", this._sbd_config)));\n    this.addToBtfFlyoutContents = function(JSBNG__content, callback) {\n        this._btfFlyoutContents.push({\n            JSBNG__content: JSBNG__content,\n            callback: callback\n        });\n    };\n    this.getBtfFlyoutContents = function() {\n        return this._btfFlyoutContents;\n    };\n    this.loading = function() {\n        if (((!this._startedLoading && this._isReportingEvents()))) {\n            uet(\"ns\");\n        }\n    ;\n    ;\n        this._startedLoading = true;\n    };\n    this.componentLoaded = function() {\n        this._loadedCount++;\n        if (((((this._startedLoading && this._isReportingEvents())) && ((this._loadedCount == this._finishLoadQuota))))) {\n            uet(\"ne\");\n        }\n    ;\n    ;\n    };\n    this._isReportingEvents = function() {\n        return this._hasUedata;\n    };\n    this.browsepromos = {\n    };\n    this.issPromos = [];\n    var le = {\n    };\n    this.logEv = function(d, o) {\n    \n    };\n    ((window.$Nav && $Nav.declare(\"logEvent\", this.logEv)));\n};\nwindow._navbar = new Navbar({\n    finishLoadQuota: 1\n});\n_navbar.loading();\n((window.$Nav && $Nav.declare(\"config.lightningDeals\", ((window._navbar._lightningDealsData || {\n})))));\n((window.$Nav && $Nav.declare(\"config.swmStyleData\", ((window._navbar._swmStyleData || {\n})))));\n_navbar._ajaxProximity = [141,7,60,150,];\n((window.$Nav && $Nav.declare(\"config.ajaxProximity\", window._navbar._ajaxProximity)));");
698 // 874
699 o2 = {};
700 // 875
701 f876774570_0.returns.push(o2);
702 // 876
703 o2.getTime = f876774570_400;
704 // undefined
705 o2 = null;
706 // 877
707 f876774570_400.returns.push(1374695829403);
708 // 873
709 geval("(function(w, d, e, o) {\n    var i = \"DAnsm\";\n    if (w.uDA = ((((w.ues && w.uet)) && w.uex))) {\n        ues(\"wb\", i, 1);\n        uet(\"bb\", i, {\n            wb: 1\n        });\n    }\n;\n;\n    var methodToBind = \"amznJQ.onCompletion\";\n    if (((((!w.amznJQ && ((methodToBind == \"amznJQ.onCompletion\")))) && ((typeof (P) != \"undefined\"))))) {\n        P.when(\"amznJQ.criticalFeature\").execute(function() {\n            o = w.DA;\n            if (!o) {\n                o = w.DA = [];\n                e = d.createElement(\"script\");\n                e.src = \"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/DA-us/DA-us-1236030632._V380600703_.js\";\n                d.getElementsByTagName(\"head\")[0].appendChild(e);\n            }\n        ;\n        ;\n            o.push({\n                c: 3961,\n                a: \"site=amazon.us;pt=Detail;slot=nav-sitewide-msg;pid=0596517742;prid=0JNNCCYK0E23P11J4NSE;arid=7716c88fbe0c4f63a1e2567d4e33f705\",\n                w: 415,\n                h: 50,\n                f: 1,\n                g: \"right\",\n                r: 1,\n                v: 1,\n                y: \"na\",\n                u: \"amzn.us.dp.atn.books/computer_internet;sz=300x31;oe=ISO-8859-1;u=7716c88fbe0c4f63a1e2567d4e33f705;s=i0;s=i1;s=i2;s=i3;s=i4;s=i5;s=i6;s=i7;s=i9;s=m1;s=m4;s=u4;s=u5;s=u10;s=u35;z=1716;z=1688;z=1801;z=1782;s=3072;s=32;s=1009;cid=vegas2;dc_ref=http%3A%2F%2Fwww.amazon.com;tile=1;ord=0JNNCCYK0E23P11J4NSE;cid=vegas2\",\n                q: \"N4215\"\n            });\n        });\n    }\n     else {\n        amznJQ.onCompletion(\"amznJQ.criticalFeature\", function() {\n            o = w.DA;\n            if (!o) {\n                o = w.DA = [];\n                e = d.createElement(\"script\");\n                e.src = \"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/DA-us/DA-us-1236030632._V380600703_.js\";\n                d.getElementsByTagName(\"head\")[0].appendChild(e);\n            }\n        ;\n        ;\n            o.push({\n                c: 3961,\n                a: \"site=amazon.us;pt=Detail;slot=nav-sitewide-msg;pid=0596517742;prid=0JNNCCYK0E23P11J4NSE;arid=7716c88fbe0c4f63a1e2567d4e33f705\",\n                w: 415,\n                h: 50,\n                f: 1,\n                g: \"right\",\n                r: 1,\n                v: 1,\n                y: \"na\",\n                u: \"amzn.us.dp.atn.books/computer_internet;sz=300x31;oe=ISO-8859-1;u=7716c88fbe0c4f63a1e2567d4e33f705;s=i0;s=i1;s=i2;s=i3;s=i4;s=i5;s=i6;s=i7;s=i9;s=m1;s=m4;s=u4;s=u5;s=u10;s=u35;z=1716;z=1688;z=1801;z=1782;s=3072;s=32;s=1009;cid=vegas2;dc_ref=http%3A%2F%2Fwww.amazon.com;tile=1;ord=0JNNCCYK0E23P11J4NSE;cid=vegas2\",\n                q: \"N4215\"\n            });\n        });\n    }\n;\n;\n})(window, JSBNG__document);");
710 // 879
711 o2 = {};
712 // 880
713 f876774570_0.returns.push(o2);
714 // 881
715 o2.getTime = f876774570_400;
716 // 882
717 f876774570_400.returns.push(1374695829426);
718 // 883
719 o4 = {};
720 // 884
721 f876774570_65.returns.push(o4);
722 // 885
723 // 886
724 // 878
725 geval("_navbar.dynamicMenuUrl = \"/gp/navigation/ajax/dynamicmenu.html\";\n((window.$Nav && $Nav.declare(\"config.dynamicMenuUrl\", _navbar.dynamicMenuUrl)));\n_navbar.dismissNotificationUrl = \"/gp/navigation/ajax/dismissnotification.html\";\n((window.$Nav && $Nav.declare(\"config.dismissNotificationUrl\", _navbar.dismissNotificationUrl)));\n_navbar.dynamicMenus = true;\n((window.$Nav && $Nav.declare(\"config.enableDynamicMenus\", true)));\n_navbar.recordEvUrl = \"/gp/navigation/ajax/recordevent.html\";\n_navbar.recordEvInterval = 60000;\n_navbar.sid = \"181-0531756-0630505\";\n_navbar.rid = \"0JNNCCYK0E23P11J4NSE\";\n((window.$Nav && $Nav.declare(\"config.recordEvUrl\", _navbar.recordEvUrl)));\n((window.$Nav && $Nav.declare(\"config.recordEvInterval\", 60000)));\n((window.$Nav && $Nav.declare(\"config.sessionId\", _navbar.sid)));\n((window.$Nav && $Nav.declare(\"config.requestId\", _navbar.rid)));\n_navbar.readyOnATF = false;\n((window.$Nav && $Nav.declare(\"config.readyOnATF\", _navbar.readyOnATF)));\n_navbar.dynamicMenuArgs = {\n    isPrime: 0,\n    primeMenuWidth: 310\n};\n((window.$Nav && $Nav.declare(\"config.dynamicMenuArgs\", ((_navbar.dynamicMenuArgs || {\n})))));\n((window.$Nav && $Nav.declare(\"config.signOutText\", _navbar.signOutText)));\n((window.$Nav && $Nav.declare(\"config.yourAccountPrimeURL\", _navbar.yourAccountPrimer)));\nif (((window.amznJQ && amznJQ.available))) {\n    amznJQ.available(\"jQuery\", function() {\n        if (!jQuery.isArray) {\n            jQuery.isArray = function(o) {\n                return ((Object.prototype.toString.call(o) === \"[object Array]\"));\n            };\n        }\n    ;\n    ;\n    });\n}\n;\n;\nif (((typeof uet == \"function\"))) {\n    uet(\"bb\", \"iss-init-pc\", {\n        wb: 1\n    });\n}\n;\n;\nif (((!window.$SearchJS && window.$Nav))) {\n    window.$SearchJS = $Nav.make();\n}\n;\n;\nif (window.$SearchJS) {\n    var iss, issHost = \"completion.amazon.com/search/complete\", issMktid = \"1\", issSearchAliases = [\"aps\",\"stripbooks\",\"popular\",\"apparel\",\"electronics\",\"sporting\",\"garden\",\"videogames\",\"toys-and-games\",\"jewelry\",\"digital-text\",\"digital-music\",\"watches\",\"grocery\",\"hpc\",\"instant-video\",\"baby-products\",\"office-products\",\"software\",\"magazines\",\"tools\",\"automotive\",\"misc\",\"industrial\",\"mi\",\"pet-supplies\",\"digital-music-track\",\"digital-music-album\",\"mobile\",\"mobile-apps\",\"movies-tv\",\"music-artist\",\"music-album\",\"music-song\",\"stripbooks-spanish\",\"electronics-accessories\",\"photo\",\"audio-video\",\"computers\",\"furniture\",\"kitchen\",\"audiobooks\",\"beauty\",\"shoes\",\"arts-crafts\",\"appliances\",\"gift-cards\",\"pets\",\"outdoor\",\"lawngarden\",\"collectibles\",\"financial\",\"wine\",], updateISSCompletion = function() {\n        iss.updateAutoCompletion();\n    };\n    $SearchJS.importEvent(\"search-js-autocomplete-lib\");\n    $SearchJS.when(\"jQuery\", \"search-js-autocomplete-lib\").run(function(jQuery) {\n        $SearchJS.importEvent(\"search-csl\");\n        $SearchJS.when(\"search-csl\").run(function(searchCSL) {\n            if (!searchCSL) {\n                searchCSL = jQuery.searchCSL;\n            }\n        ;\n        ;\n            searchCSL.init(\"Detail\", \"0JNNCCYK0E23P11J4NSE\");\n            var ctw = [function() {\n                var searchSelect = jQuery(\"select.searchSelect\"), nodeRegEx = new RegExp(/node=\\d+/i);\n                return function() {\n                    var currDropdownSel = searchSelect.children();\n                    return ((((currDropdownSel.attr(\"data-root-alias\") || nodeRegEx.test(currDropdownSel.attr(\"value\")))) ? \"16458\" : undefined));\n                };\n            }(),];\n            iss = new AutoComplete({\n                src: issHost,\n                mkt: issMktid,\n                aliases: issSearchAliases,\n                fb: 1,\n                dd: \"select.searchSelect\",\n                dupElim: 0,\n                deptText: \"in {department}\",\n                sugText: \"Search suggestions\",\n                sc: 1,\n                ime: 0,\n                imeEnh: 0,\n                imeSpacing: 0,\n                isNavInline: 1,\n                iac: 0,\n                scs: 0,\n                np: 4,\n                doCTW: function(e) {\n                    for (var i = 0; ((i < ctw.length)); i++) {\n                        searchCSL.addWlt(((ctw[i].call ? ctw[i](e) : ctw[i])));\n                    };\n                ;\n                }\n            });\n            $SearchJS.publish(\"search-js-autocomplete\", iss);\n            if (((((typeof uet == \"function\")) && ((typeof uex == \"function\"))))) {\n                uet(\"be\", \"iss-init-pc\", {\n                    wb: 1\n                });\n                uex(\"ld\", \"iss-init-pc\", {\n                    wb: 1\n                });\n            }\n        ;\n        ;\n        });\n    });\n}\n;\n;\n((window.amznJQ && amznJQ.declareAvailable(\"navbarInline\")));\n((window.$Nav && $Nav.declare(\"nav.inline\")));\n((window.amznJQ && amznJQ.available(\"jQuery\", function() {\n    amznJQ.available(\"navbarJS-beacon\", function() {\n    \n    });\n})));\n_navbar._endSpriteImage = new JSBNG__Image();\n_navbar._endSpriteImage.JSBNG__onload = function() {\n    _navbar.componentLoaded();\n};\n_navbar._endSpriteImage.src = window._navbarSpriteUrl;\n((window.$Nav && $Nav.declare(\"config.autoFocus\", false)));\n((window.$Nav && $Nav.declare(\"config.responsiveGW\", !!window._navbar.responsivegw)));\n((window.$Nav && $Nav.when(\"$\", \"flyout.JSBNG__content\").run(function(jQuery) {\n    jQuery(\"#nav_amabotandroid\").parent().html(\"Get Garden of Orbs free today\");\n})));\n_navbar.browsepromos[\"android\"] = {\n    destination: \"/gp/product/ref=nav_sap_mas_13_07_24?ie=UTF8&ASIN=B006QZD2ZS\",\n    productTitle2: \"(List Price: $0.99)\",\n    button: \"Learn more\",\n    price: \"FREE\",\n    productTitle: \"Garden of Orbs\",\n    headline: \"Free App of the Day\",\n    image: \"http://ecx.images-amazon.com/images/I/81pCw%2BSz8yL._SS100_.png\"\n};\n_navbar.browsepromos[\"audible\"] = {\n    width: 477,\n    promoType: \"wide\",\n    vertOffset: \"0\",\n    horizOffset: \"-19\",\n    height: 470,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/Audible/en_US/images/creative/amazon/beacon/ADBLECRE_2309_Beacon_Headphones_wool._V382188254_.png\"\n};\n_navbar.browsepromos[\"automotive-industrial\"] = {\n    width: 491,\n    promoType: \"wide\",\n    vertOffset: \"0\",\n    horizOffset: \"0\",\n    height: 472,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/BISS/stores/homepage/flyouts/EducationSupplyGNO3._V379317833_.png\"\n};\n_navbar.browsepromos[\"books\"] = {\n    width: 499,\n    promoType: \"wide\",\n    vertOffset: \"0\",\n    horizOffset: \"0\",\n    height: 410,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/img13/books/flyout/0219-bookself-faves-40_flyout._V374727339_.png\"\n};\n_navbar.browsepromos[\"clothing-shoes-jewelry\"] = {\n    width: 460,\n    promoType: \"wide\",\n    vertOffset: \"0\",\n    horizOffset: \"-20\",\n    height: 472,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/AMAZON_FASHION/2013/GATEWAY/BTS1/FLYOUTS/FO_mens_bts1._V381438785_.png\"\n};\n_navbar.browsepromos[\"cloud-drive\"] = {\n    width: 480,\n    promoType: \"wide\",\n    vertOffset: \"0\",\n    horizOffset: \"0\",\n    height: 472,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/digital/adrive/images/gno/iOs_GNO1._V385462964_.jpg\"\n};\n_navbar.browsepromos[\"digital-games-software\"] = {\n    width: 425,\n    promoType: \"wide\",\n    vertOffset: \"0\",\n    horizOffset: \"-21\",\n    height: 402,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/img13/digital-video-games/flyout/5-24_5192013-dsw-msft_flyout._V384615770_.png\"\n};\n_navbar.browsepromos[\"electronics-computers\"] = {\n    width: 499,\n    promoType: \"wide\",\n    vertOffset: \"0\",\n    horizOffset: \"0\",\n    height: 136,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/img13/ce_accessories/flyout/7_12_13_electronics-trade-in_GNO._V378716571_.png\"\n};\n_navbar.browsepromos[\"grocery-health-beauty\"] = {\n    width: 523,\n    promoType: \"wide\",\n    vertOffset: \"0\",\n    horizOffset: \"-39\",\n    height: 356,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/img13/grocery/flyout/0621-sns-flyout-update._V381061838_.png\"\n};\n_navbar.browsepromos[\"home-garden-tools\"] = {\n    width: 492,\n    promoType: \"wide\",\n    vertOffset: 0,\n    horizOffset: 0,\n    height: 287,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/img13/home/flyout/7-9_furniture-photo-shoot_flyout._V379916182_.png\"\n};\n_navbar.browsepromos[\"instant-video\"] = {\n    width: 500,\n    promoType: \"wide\",\n    vertOffset: \"-10\",\n    horizOffset: \"-20\",\n    height: 495,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/digital/video/merch/GNOflyout/AIV_GNO-Flyout_Oblivion._V379395299_.png\"\n};\n_navbar.browsepromos[\"kindle\"] = {\n    width: 440,\n    promoType: \"wide\",\n    vertOffset: \"-35\",\n    horizOffset: \"28\",\n    height: 151,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/gno/beacon/merch/browse/gno-family-440x151._V389693769_.png\"\n};\n_navbar.browsepromos[\"movies-music-games\"] = {\n    width: 532,\n    promoType: \"wide\",\n    vertOffset: \"-23\",\n    horizOffset: \"-38\",\n    height: 495,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/img13/music/flyout/0528-evergreen-music-stack-flyout._V381699570_.png\"\n};\n_navbar.browsepromos[\"mp3\"] = {\n    width: 516,\n    promoType: \"wide\",\n    vertOffset: \"0\",\n    horizOffset: \"-21\",\n    height: 472,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/img13/mp3/flyout/marc_anthony_flyout._V379296314_.png\"\n};\n_navbar.browsepromos[\"sports-outdoors\"] = {\n    width: 530,\n    promoType: \"wide\",\n    vertOffset: \"0\",\n    horizOffset: \"-32\",\n    height: 472,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/stores/sport-goods/sports-apparel/0708-sports-apparel-savings-flyout_v2._V379391408_.png\"\n};\n_navbar.browsepromos[\"toys-kids-baby\"] = {\n    width: 479,\n    promoType: \"wide\",\n    vertOffset: \"0\",\n    horizOffset: \"0\",\n    height: 395,\n    image: \"http://g-ecx.images-amazon.com/images/G/01/img13/babyregistry/2013sweepstakes/flyout/baby_2013sweeps_flyout._V381448744_.jpg\"\n};\n((window.$Nav && $Nav.declare(\"config.browsePromos\", window._navbar.browsepromos)));\n((window.amznJQ && amznJQ.declareAvailable(\"navbarPromosContent\")));");
726 // 889
727 o5 = {};
728 // 890
729 f876774570_65.returns.push(o5);
730 // 891
731 // 887
732 geval("(function() {\n    var availableWidth = ((((window.JSBNG__innerWidth || JSBNG__document.body.offsetWidth)) - 1));\n;\n    var widths = [1280,];\n    var imageHashMain = [\"http://ecx.images-amazon.com/images/I/51gdVAEfPUL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg\",\"http://ecx.images-amazon.com/images/I/51gdVAEfPUL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg\",];\n    var imageObj = new JSBNG__Image();\n    var sz = 0;\n    for (; ((((sz < widths.length)) && ((availableWidth >= widths[sz])))); sz++) {\n    ;\n    };\n;\n    imageObj.src = imageHashMain[sz];\n})();");
733 // 892
734 geval("function e078472349c4006daca6d88d77fc9955fc8dc2f56(JSBNG__event) {\n;\n    if (((typeof measureATFDiff == \"function\"))) {\n        measureATFDiff(new JSBNG__Date().getTime(), 0);\n    }\n;\n;\n;\n    if (((typeof setCSMReq == \"function\"))) {\n        setCSMReq(\"af\");\n        setCSMReq(\"cf\");\n    }\n     else if (((typeof uet == \"function\"))) {\n        uet(\"af\");\n        uet(\"cf\");\n        amznJQ.completedStage(\"amznJQ.AboveTheFold\");\n    }\n    \n;\n;\n};\n;");
735 // 893
736 geval("function e22425f4fcd4847606f790e6f116625d0725e88e9(JSBNG__event) {\n    return false;\n};\n;");
737 // 895
738 f876774570_410 = function() { return f876774570_410.returns[f876774570_410.inst++]; };
739 f876774570_410.returns = [];
740 f876774570_410.inst = 0;
741 // 896
742 o0.getElementById = f876774570_410;
743 // 897
744 o6 = {};
745 // 898
746 f876774570_410.returns.push(o6);
747 // 901
748 o7 = {};
749 // 902
750 f876774570_410.returns.push(o7);
751 // 903
752 o7.className = "size0 bottom-thumbs main-image-widget-for-dp standard";
753 // 904
754 // 905
755 // 906
756 // 907
757 o8 = {};
758 // 908
759 o6.style = o8;
760 // 909
761 // 894
762 geval("var colorImages = {\n    initial: [{\n        large: \"http://ecx.images-amazon.com/images/I/51gdVAEfPUL.jpg\",\n        landing: [\"http://ecx.images-amazon.com/images/I/51gdVAEfPUL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg\",],\n        hiRes: \"http://ecx.images-amazon.com/images/I/814biaGJWaL._SL1500_.jpg\",\n        thumb: \"http://ecx.images-amazon.com/images/I/51gdVAEfPUL._SS30_.jpg\",\n        main: [\"http://ecx.images-amazon.com/images/I/51gdVAEfPUL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg\",\"http://ecx.images-amazon.com/images/I/51gdVAEfPUL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg\",]\n    },]\n};\n(function(doc) {\n    var mi = doc.getElementById(\"main-image\");\n    var w = ((window.JSBNG__innerWidth || doc.body.offsetWidth));\n    w--;\n    var widths = [1280,];\n    var sz = 0;\n    for (; ((((sz < 1)) && ((w >= widths[sz])))); sz++) {\n    ;\n    };\n;\n    if (((sz || 1))) {\n        var miw = doc.getElementById(\"main-image-widget\");\n        miw.className = miw.className.replace(/size[0-9]+/, ((\"size\" + sz)));\n        if (((sz && 1))) {\n            mi.width = 300;\n            mi.height = 300;\n        }\n         else if (((!sz && 1))) {\n            mi.width = 300;\n            mi.height = 300;\n        }\n        \n    ;\n    ;\n        amznJQ.onCompletion(\"amznJQ.AboveTheFold\", function() {\n            var src = colorImages.initial[0].main[sz];\n            var img = new JSBNG__Image();\n            img.JSBNG__onload = function() {\n                var clone = mi.cloneNode(true);\n                clone.src = src;\n                clone.removeAttribute(\"width\");\n                clone.removeAttribute(\"height\");\n                clone.removeAttribute(\"JSBNG__onload\");\n                mi.parentNode.replaceChild(clone, mi);\n                mi = clone;\n                amznJQ.declareAvailable(\"ImageBlockATF\");\n            };\n            img.src = src;\n        });\n    }\n     else {\n        amznJQ.declareAvailable(\"ImageBlockATF\");\n    }\n;\n;\n    mi.style.display = \"inline\";\n})(JSBNG__document);");
763 // 910
764 geval("function ebc39a21f34d30ea674ee1a51ae14d6423dc6ad98(JSBNG__event) {\n    if (((typeof (SitbReader) != \"undefined\"))) {\n        SitbReader.LightboxActions.openReader(\"sib_dp_ptu\");\n        return false;\n    }\n;\n;\n};\n;");
765 // 911
766 geval("var legacyOnSelectedQuantityChange = function() {\n    if (((jQuery(\"#pricePlusShippingQty\").length > 0))) {\n        jQuery.ajax({\n            url: \"/gp/product/du/quantity-sip-update.html\",\n            data: {\n                qt: jQuery(\"#quantityDropdownDiv select\").val(),\n                a: jQuery(\"#ASIN\").val(),\n                me: jQuery(\"#merchantID\").val()\n            },\n            dataType: \"html\",\n            success: function(sipHtml) {\n                jQuery(\"#pricePlusShippingQty\").html(sipHtml);\n            }\n        });\n    }\n;\n;\n};\namznJQ.onReady(\"jQuery\", function() {\n    jQuery(\"#quantityDropdownDiv select\").change(legacyOnSelectedQuantityChange);\n    amznJQ.onCompletion(\"amznJQ.criticalFeature\", function() {\n        amznJQ.available(\"quantityDropDownJS\", function() {\n            var qdd = new jQuery.fn.quantityDropDown();\n            qdd.setPopoverContent(\"\\u003Cstrong\\u003EWe're sorry.  This item is limited to %d per customer.\\u003C/strong\\u003E\", \"\\u003Cbr /\\u003E\\u003Cbr /\\u003EWe strive to provide customers with great prices, and sometimes that means we limit quantity to ensure that the majority of customers have an opportunity to order products that have very low prices or a limited supply.\\u003Cbr /\\u003E\\u003Cbr /\\u003EWe may also adjust quantity in checkout if you have recently purchased this item.\");\n        });\n    });\n});");
767 // 912
768 geval("amznJQ.onCompletion(\"amznJQ.criticalFeature\", function() {\n    amznJQ.available(\"bbopCheckBoxJS\", function() {\n        var bbopJS = new jQuery.fn.bbopCheckBox();\n        bbopJS.initialize(1, 0, \"To get FREE Two-Day Shipping on this item, proceed to checkout using &quot;Add to Cart&quot;\");\n    });\n});");
769 // 913
770 geval("var gbSecure1Click = true;\nif (((((typeof (gbSecure1Click) != \"undefined\")) && gbSecure1Click))) {\n    amznJQ.onReady(\"jQuery\", function() {\n        jQuery(\"#oneClickBuyButton\").click(function() {\n            var hbbAction = jQuery(\"#handleBuy\").attr(\"action\").replace(\"http:\", \"https:\");\n            jQuery(\"#handleBuy\").attr(\"action\", hbbAction);\n            return true;\n        });\n    });\n}\n;\n;");
771 // 914
772 geval("if (window.gbvar) {\n    amznJQ.onReady(\"jQuery\", function() {\n        jQuery(\"#oneClickSignInLinkID\").attr(\"href\", window.gbvar);\n    });\n}\n else {\n    window.gbvar = \"http://jsbngssl.www.amazon.com/gp/product/utility/edit-one-click-pref.html?ie=UTF8&query=selectObb%3Dnew&returnPath=%2Fgp%2Fproduct%2F0596517742\";\n}\n;\n;");
773 // 916
774 o2 = {};
775 // 917
776 f876774570_0.returns.push(o2);
777 // 918
778 o2.getTime = f876774570_400;
779 // undefined
780 o2 = null;
781 // 919
782 f876774570_400.returns.push(1374695829426);
783 // 920
784 o4 = {};
785 // 921
786 f876774570_65.returns.push(o4);
787 // 922
788 // 923
789 // undefined
790 o4 = null;
791 // 915
792 geval("if (window.gbvar) {\n    amznJQ.onReady(\"jQuery\", function() {\n        jQuery(\"#oneClickSignInLinkID\").attr(\"href\", window.gbvar);\n    });\n}\n else {\n    window.gbvar = \"http://jsbngssl.www.amazon.com/gp/product/utility/edit-one-click-pref.html?ie=UTF8&query=selectObb%3Dnew&returnPath=%2Fgp%2Fproduct%2F0596517742\";\n}\n;\n;");
793 // 926
794 o5 = {};
795 // 927
796 f876774570_65.returns.push(o5);
797 // 928
798 // undefined
799 o5 = null;
800 // 924
801 geval("(function() {\n    var availableWidth = ((((window.JSBNG__innerWidth || JSBNG__document.body.offsetWidth)) - 1));\n;\n    var widths = [1280,];\n    var imageHashMain = [\"http://ecx.images-amazon.com/images/I/51gdVAEfPUL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg\",\"http://ecx.images-amazon.com/images/I/51gdVAEfPUL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg\",];\n    var imageObj = new JSBNG__Image();\n    var sz = 0;\n    for (; ((((sz < widths.length)) && ((availableWidth >= widths[sz])))); sz++) {\n    ;\n    };\n;\n    imageObj.src = imageHashMain[sz];\n})();");
802 // 929
803 geval("function e078472349c4006daca6d88d77fc9955fc8dc2f56(JSBNG__event) {\n;\n    if (((typeof measureATFDiff == \"function\"))) {\n        measureATFDiff(new JSBNG__Date().getTime(), 0);\n    }\n;\n;\n;\n    if (((typeof setCSMReq == \"function\"))) {\n        setCSMReq(\"af\");\n        setCSMReq(\"cf\");\n    }\n     else if (((typeof uet == \"function\"))) {\n        uet(\"af\");\n        uet(\"cf\");\n        amznJQ.completedStage(\"amznJQ.AboveTheFold\");\n    }\n    \n;\n;\n};\n;");
804 // 930
805 geval("function e22425f4fcd4847606f790e6f116625d0725e88e9(JSBNG__event) {\n    return false;\n};\n;");
806 // 932
807 f876774570_410 = function() { return f876774570_410.returns[f876774570_410.inst++]; };
808 f876774570_410.returns = [];
809 f876774570_410.inst = 0;
810 // 934
811 o6 = {};
812 // 935
813 f876774570_410.returns.push(o6);
814 // 938
815 o7 = {};
816 // 939
817 f876774570_410.returns.push(o7);
818 // 940
819 o7.className = "size0 bottom-thumbs main-image-widget-for-dp standard";
820 // 941
821 // undefined
822 o7 = null;
823 // 942
824 // 943
825 // 944
826 o8 = {};
827 // 945
828 o6.style = o8;
829 // undefined
830 o6 = null;
831 // 946
832 // undefined
833 o8 = null;
834 // 931
835 geval("var colorImages = {\n    initial: [{\n        large: \"http://ecx.images-amazon.com/images/I/51gdVAEfPUL.jpg\",\n        landing: [\"http://ecx.images-amazon.com/images/I/51gdVAEfPUL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg\",],\n        hiRes: \"http://ecx.images-amazon.com/images/I/814biaGJWaL._SL1500_.jpg\",\n        thumb: \"http://ecx.images-amazon.com/images/I/51gdVAEfPUL._SS30_.jpg\",\n        main: [\"http://ecx.images-amazon.com/images/I/51gdVAEfPUL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg\",\"http://ecx.images-amazon.com/images/I/51gdVAEfPUL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg\",]\n    },]\n};\n(function(doc) {\n    var mi = doc.getElementById(\"main-image\");\n    var w = ((window.JSBNG__innerWidth || doc.body.offsetWidth));\n    w--;\n    var widths = [1280,];\n    var sz = 0;\n    for (; ((((sz < 1)) && ((w >= widths[sz])))); sz++) {\n    ;\n    };\n;\n    if (((sz || 1))) {\n        var miw = doc.getElementById(\"main-image-widget\");\n        miw.className = miw.className.replace(/size[0-9]+/, ((\"size\" + sz)));\n        if (((sz && 1))) {\n            mi.width = 300;\n            mi.height = 300;\n        }\n         else if (((!sz && 1))) {\n            mi.width = 300;\n            mi.height = 300;\n        }\n        \n    ;\n    ;\n        amznJQ.onCompletion(\"amznJQ.AboveTheFold\", function() {\n            var src = colorImages.initial[0].main[sz];\n            var img = new JSBNG__Image();\n            img.JSBNG__onload = function() {\n                var clone = mi.cloneNode(true);\n                clone.src = src;\n                clone.removeAttribute(\"width\");\n                clone.removeAttribute(\"height\");\n                clone.removeAttribute(\"JSBNG__onload\");\n                mi.parentNode.replaceChild(clone, mi);\n                mi = clone;\n                amznJQ.declareAvailable(\"ImageBlockATF\");\n            };\n            img.src = src;\n        });\n    }\n     else {\n        amznJQ.declareAvailable(\"ImageBlockATF\");\n    }\n;\n;\n    mi.style.display = \"inline\";\n})(JSBNG__document);");
836 // 947
837 geval("function ebc39a21f34d30ea674ee1a51ae14d6423dc6ad98(JSBNG__event) {\n    if (((typeof (SitbReader) != \"undefined\"))) {\n        SitbReader.LightboxActions.openReader(\"sib_dp_ptu\");\n        return false;\n    }\n;\n;\n};\n;");
838 // 948
839 geval("var legacyOnSelectedQuantityChange = function() {\n    if (((jQuery(\"#pricePlusShippingQty\").length > 0))) {\n        jQuery.ajax({\n            url: \"/gp/product/du/quantity-sip-update.html\",\n            data: {\n                qt: jQuery(\"#quantityDropdownDiv select\").val(),\n                a: jQuery(\"#ASIN\").val(),\n                me: jQuery(\"#merchantID\").val()\n            },\n            dataType: \"html\",\n            success: function(sipHtml) {\n                jQuery(\"#pricePlusShippingQty\").html(sipHtml);\n            }\n        });\n    }\n;\n;\n};\namznJQ.onReady(\"jQuery\", function() {\n    jQuery(\"#quantityDropdownDiv select\").change(legacyOnSelectedQuantityChange);\n    amznJQ.onCompletion(\"amznJQ.criticalFeature\", function() {\n        amznJQ.available(\"quantityDropDownJS\", function() {\n            var qdd = new jQuery.fn.quantityDropDown();\n            qdd.setPopoverContent(\"\\u003Cstrong\\u003EWe're sorry.  This item is limited to %d per customer.\\u003C/strong\\u003E\", \"\\u003Cbr /\\u003E\\u003Cbr /\\u003EWe strive to provide customers with great prices, and sometimes that means we limit quantity to ensure that the majority of customers have an opportunity to order products that have very low prices or a limited supply.\\u003Cbr /\\u003E\\u003Cbr /\\u003EWe may also adjust quantity in checkout if you have recently purchased this item.\");\n        });\n    });\n});");
840 // 949
841 geval("amznJQ.onCompletion(\"amznJQ.criticalFeature\", function() {\n    amznJQ.available(\"bbopCheckBoxJS\", function() {\n        var bbopJS = new jQuery.fn.bbopCheckBox();\n        bbopJS.initialize(1, 0, \"To get FREE Two-Day Shipping on this item, proceed to checkout using &quot;Add to Cart&quot;\");\n    });\n});");
842 // 950
843 geval("var gbSecure1Click = true;\nif (((((typeof (gbSecure1Click) != \"undefined\")) && gbSecure1Click))) {\n    amznJQ.onReady(\"jQuery\", function() {\n        jQuery(\"#oneClickBuyButton\").click(function() {\n            var hbbAction = jQuery(\"#handleBuy\").attr(\"action\").replace(\"http:\", \"https:\");\n            jQuery(\"#handleBuy\").attr(\"action\", hbbAction);\n            return true;\n        });\n    });\n}\n;\n;");
844 // 951
845 geval("if (window.gbvar) {\n    amznJQ.onReady(\"jQuery\", function() {\n        jQuery(\"#oneClickSignInLinkID\").attr(\"href\", window.gbvar);\n    });\n}\n else {\n    window.gbvar = \"http://jsbngssl.www.amazon.com/gp/product/utility/edit-one-click-pref.html?ie=UTF8&query=selectObb%3Dnew&returnPath=%2Fgp%2Fproduct%2F0596517742\";\n}\n;\n;");
846 // 953
847 o2 = {};
848 // undefined
849 o2 = null;
850 // 952
851 geval("if (window.gbvar) {\n    amznJQ.onReady(\"jQuery\", function() {\n        jQuery(\"#oneClickSignInLinkID\").attr(\"href\", window.gbvar);\n    });\n}\n else {\n    window.gbvar = \"http://jsbngssl.www.amazon.com/gp/product/utility/edit-one-click-pref.html?ie=UTF8&query=selectObb%3Dnew&returnPath=%2Fgp%2Fproduct%2F0596517742\";\n}\n;\n;");
852 // 954
853 geval("amznJQ.onReady(\"popover\", function() {\n    var $ = jQuery;\n});");
854 // 955
855 geval("amznJQ.onReady(\"jQuery\", function() {\n    if (((((((typeof dpLdWidget !== \"undefined\")) && ((typeof dpLdWidget.deal !== \"undefined\")))) && ((typeof dpLdWidget.deal.asins !== \"undefined\"))))) {\n        var dealPriceText;\n        if (((((((typeof Deal !== \"undefined\")) && ((typeof Deal.Price !== \"undefined\")))) && ((typeof dpLdWidget.deal.asins[0] !== \"undefined\"))))) {\n            var dp = dpLdWidget.deal.asins[0].dealPrice;\n            if (((dp.price > 396))) {\n                dealPriceText = Deal.Price.format(dp);\n                jQuery(\"#rbb_bb_trigger .bb_price, #rentalPriceBlockGrid .buyNewOffers .rentPrice\").html(dealPriceText);\n            }\n        ;\n        ;\n        }\n    ;\n    ;\n    }\n;\n;\n    jQuery(\"#rbbContainer .rbb_section .rbb_header\").click(function(e) {\n        var target = jQuery(e.target);\n        if (!target.hasClass(\"rbb_header\")) {\n            target.parents(\".rbbHeaderLink\").attr(\"href\", \"javascript:void(0);\");\n        }\n    ;\n    ;\n        var t = jQuery(this);\n        var header = ((t.hasClass(\"rbb_header\") ? t : t.parents(\".rbb_header\")));\n        if (header.parents(\".rbb_section\").hasClass(\"selected\")) {\n            return false;\n        }\n    ;\n    ;\n        jQuery(\"#radiobuyboxDivId .bb_radio\").attr(\"checked\", false);\n        header.JSBNG__find(\".bb_radio\").attr(\"checked\", \"checked\");\n        header.parents(\".rbb_section\").removeClass(\"unselected\").addClass(\"selected\");\n        jQuery(\"#radiobuyboxDivId .abbListInput\").attr(\"checked\", false);\n        var bbClicked = jQuery(this).attr(\"id\");\n        var slideMeDown, slideMeUp;\n        jQuery(\"#radiobuyboxDivId .rbb_section\").each(function(i, bb) {\n            if (((jQuery(bb).JSBNG__find(\".rbb_header\")[0].id == bbClicked))) {\n                slideMeDown = jQuery(bb);\n            }\n             else if (jQuery(bb).hasClass(\"selected\")) {\n                slideMeUp = jQuery(bb);\n            }\n            \n        ;\n        ;\n        });\n        slideMeUp.JSBNG__find(\".rbb_content\").slideUp(500, function() {\n            slideMeUp.removeClass(\"selected\").addClass(\"unselected\");\n        });\n        slideMeDown.JSBNG__find(\".rbb_content\").slideDown(500);\n        JSBNG__location.hash = ((\"#selectedObb=\" + header.attr(\"id\")));\n        return true;\n    });\n    var locationHash = JSBNG__location.hash;\n    if (((locationHash.length != 0))) {\n        var selectObb = locationHash.substring(1).split(\"=\")[1];\n        if (((typeof (selectObb) != \"undefined\"))) {\n            var target = jQuery(((\"#\" + selectObb)));\n            if (((target.length != 0))) {\n                target.trigger(\"click\");\n            }\n        ;\n        ;\n        }\n    ;\n    ;\n    }\n;\n;\n});");
856 // 956
857 geval("function e8411539754ab9827f368ae7f5e2c8ea9ebb4a635(JSBNG__event) {\n    return false;\n};\n;");
858 // 957
859 geval("if (((typeof window.amznJQ != \"undefined\"))) {\n    amznJQ.onReady(\"popover\", function() {\n        jQuery(\"#tradeinBuyboxLearnMore\").amazonPopoverTrigger({\n            closeText: \"Close\",\n            width: 580,\n            group: \"tradein\",\n            destination: \"/gp/tradein/popovers/ajax-popover.html?ie=UTF8&name=howToTradeIn\",\n            title: \"How to Trade In\"\n        });\n    });\n}\n;\n;");
860 // 958
861 geval("function e1f14b254e05033951804485a03ab10fbbe411a71(JSBNG__event) {\n    window.open(this.href, \"_blank\", \"location=yes,width=700,height=400\");\n    return false;\n};\n;");
862 // 959
863 geval("function e10ce337f851e69fefd2813bf419f648edcffd9e1(JSBNG__event) {\n    window.open(this.href, \"_blank\", \"location=yes,width=700,height=400\");\n    return false;\n};\n;");
864 // 960
865 geval("function e2725972985ec03e1744e1d7cfd25a1cba7a8672b(JSBNG__event) {\n    window.open(this.href, \"_blank\", \"location=yes,width=700,height=570\");\n    return false;\n};\n;");
866 // 961
867 geval("if (((typeof window.amznJQ != \"undefined\"))) {\n    amznJQ.onCompletion(\"amznJQ.criticalFeature\", function() {\n        amznJQ.available(\"share-with-friends-js-new\", function() {\n            var popoverParams = {\n                url: \"/gp/pdp/taf/dpPop.html/ref=cm_sw_p_view_dp_sgd8rb0NCY02P?ie=UTF8&contentID=0596517742&contentName=item&contentType=asin&contentURI=%2Fdp%2F0596517742&emailCaptionStrID=&emailCustomMsgStrID=&emailDescStrID=&emailSubjectStrID=&emailTemplate=%2Fgp%2Fpdp%2Fcommon%2Femail%2Fshare-product&forceSprites=1&id=0596517742&imageURL=&isDynamicSWF=0&isEmail=0&learnMoreButton=&merchantID=&parentASIN=0596517742&placementID=dp_sgd8rb0NCY02P&ra=taf&referer=http%253A%252F%252Fwww.amazon.com%252Fgp%252Fproduct%252F0596517742%252Fref%253D&relatedAccounts=amazondeals%2Camazonmp3&suppressPurchaseReqLogin=&titleText=&tt=sh&viaAccount=amazon\",\n                title: \"Share this item via Email\",\n                closeText: \"Close\",\n                isCompact: false,\n                token: \"69530C13771BFFCC7657C8F16A8B9D2C0CB06C31\"\n            };\n            amz_taf_triggers.swftext = popoverParams;\n            amz_taf_generatePopover(\"swftext\", false);\n        });\n    });\n}\n;\n;");
868 // 962
869 geval("amznJQ.onReady(\"bylinePopover\", function() {\n\n});");
870 // 963
871 geval("function acrPopoverHover(e, h) {\n    if (h) {\n        window.acrAsinHover = e;\n    }\n     else {\n        if (((window.acrAsinHover == e))) {\n            window.acrAsinHover = null;\n        }\n    ;\n    }\n;\n;\n};\n;\namznJQ.onReady(\"popover\", function() {\n    (function($) {\n        if ($.fn.acrPopover) {\n            return;\n        }\n    ;\n    ;\n        var popoverConfig = {\n            showOnHover: true,\n            showCloseButton: true,\n            width: null,\n            JSBNG__location: \"bottom\",\n            locationAlign: \"left\",\n            locationOffset: [-20,0,],\n            paddingLeft: 15,\n            paddingBottom: 5,\n            paddingRight: 15,\n            group: \"reviewsPopover\",\n            clone: false,\n            hoverHideDelay: 300\n        };\n        $.fn.acrPopover = function() {\n            return this.each(function() {\n                var $this = $(this);\n                if (((!$this.data(\"init\") && ((typeof $this.amazonPopoverTrigger === \"function\"))))) {\n                    $this.data(\"init\", 1);\n                    var getargs = $this.attr(\"getargs\");\n                    var ajaxURL = ((((((((((((((\"/gp/customer-reviews/common/du/displayHistoPopAjax.html?\" + \"&ASIN=\")) + $this.attr(\"JSBNG__name\"))) + \"&link=1\")) + \"&seeall=1\")) + \"&ref=\")) + $this.attr(\"ref\"))) + ((((typeof getargs != \"undefined\")) ? ((\"&getargs=\" + getargs)) : \"\"))));\n                    var myConfig = $.extend(true, {\n                        destination: ajaxURL\n                    }, popoverConfig);\n                    $this.amazonPopoverTrigger(myConfig);\n                    var w = window.acrAsinHover;\n                    if (((w && (($(w).parents(\".asinReviewsSummary\").get(0) == this))))) {\n                        $this.trigger(\"mouseover.amzPopover\");\n                        window.acrAsinHover = null;\n                    }\n                ;\n                ;\n                }\n            ;\n            ;\n            });\n        };\n        window.reviewHistPopoverConfig = popoverConfig;\n        var jqInit = window.jQueryInitHistoPopovers = function(asin) {\n            if (((typeof $(((((\".acr-popover[name=\" + asin)) + \"]\"))).acrPopover === \"function\"))) {\n                $(((((\".acr-popover[name=\" + asin)) + \"]\"))).acrPopover();\n            }\n        ;\n        ;\n        };\n        window.doInit_average_customer_reviews = jqInit;\n        window.onAjaxUpdate_average_customer_reviews = jqInit;\n        window.onCacheUpdate_average_customer_reviews = jqInit;\n        window.onCacheUpdateReselect_average_customer_reviews = jqInit;\n        amznJQ.onCompletion(\"amznJQ.criticalFeature\", function() {\n            JSBNG__setTimeout(function() {\n                amznJQ.declareAvailable(\"acrPopover\");\n            }, 10);\n        });\n    })(jQuery);\n});\namznJQ.onReady(\"acrPopover\", function() {\n    jQuery(\".acr-popover,#searchTemplate .asinReviewsSummary\").each(function() {\n        if (((typeof jQuery(this).acrPopover === \"function\"))) {\n            jQuery(this).acrPopover();\n        }\n    ;\n    ;\n    });\n});");
872 // 964
873 geval("function e8e70165fa0a99f2adde340b4b993baa0c88bcff5(JSBNG__event) {\n    return acrPopoverHover(this, 1);\n};\n;");
874 // 965
875 geval("function efbb2e003f7e954f2d7bac18a126412255145f6b4(JSBNG__event) {\n    return acrPopoverHover(this, 0);\n};\n;");
876 // 966
877 geval("function efb3607ba40f4c02222c1cf3079822836e280f9a3(JSBNG__event) {\n    return acrPopoverHover(this, 1);\n};\n;");
878 // 967
879 geval("function e013be0cdaeb0eb5fac25ade0f6533dede66427c6(JSBNG__event) {\n    return acrPopoverHover(this, 0);\n};\n;");
880 // 968
881 geval("function ec1a67f1d15a4d383d5e0e60704787e14cff1b140(JSBNG__event) {\n    return amz_js_PopWin(\"/gp/help/customer/display.html/ref=mk_sss_dp_1?ie=UTF8&nodeId=527692&pop-up=1\", \"AmazonHelp\", \"width=550,height=550,resizable=1,scrollbars=1,toolbar=0,status=0\");\n};\n;");
882 // 969
883 geval("amznJQ.declareAvailable(\"gbPriceBlockFields\");");
884 // 971
885 o2 = {};
886 // 972
887 f876774570_0.returns.push(o2);
888 // 973
889 f876774570_417 = function() { return f876774570_417.returns[f876774570_417.inst++]; };
890 f876774570_417.returns = [];
891 f876774570_417.inst = 0;
892 // 974
893 o2.getHours = f876774570_417;
894 // 975
895 f876774570_417.returns.push(12);
896 // 976
897 f876774570_418 = function() { return f876774570_418.returns[f876774570_418.inst++]; };
898 f876774570_418.returns = [];
899 f876774570_418.inst = 0;
900 // 977
901 o2.getMinutes = f876774570_418;
902 // 978
903 f876774570_418.returns.push(57);
904 // 979
905 f876774570_419 = function() { return f876774570_419.returns[f876774570_419.inst++]; };
906 f876774570_419.returns = [];
907 f876774570_419.inst = 0;
908 // 980
909 o2.getSeconds = f876774570_419;
910 // undefined
911 o2 = null;
912 // 981
913 f876774570_419.returns.push(9);
914 // 982
915 o2 = {};
916 // 983
917 f876774570_0.returns.push(o2);
918 // 984
919 o2.getHours = f876774570_417;
920 // 985
921 f876774570_417.returns.push(12);
922 // 986
923 o2.getMinutes = f876774570_418;
924 // 987
925 f876774570_418.returns.push(57);
926 // 988
927 o2.getSeconds = f876774570_419;
928 // undefined
929 o2 = null;
930 // 989
931 f876774570_419.returns.push(9);
932 // 990
933 o0.layers = void 0;
934 // 991
935 o0.all = void 0;
936 // 994
937 f876774570_410.returns.push(null);
938 // 999
939 f876774570_410.returns.push(null);
940 // 1000
941 f876774570_16.returns.push(2);
942 // 970
943 geval("try {\n    var ftCountdownElementIDs = new Array();\n    var ftEntireMessageElementIDs = new Array();\n    var FT_CurrentDisplayMin = new Array();\n    var clientServerTimeDrift;\n    var firstTimeUpdate = false;\n    function ftRegisterCountdownElementID(elementID) {\n        ftCountdownElementIDs[ftCountdownElementIDs.length] = elementID;\n    };\n;\n    function ftRegisterEntireMessageElementID(elementID) {\n        ftEntireMessageElementIDs[ftEntireMessageElementIDs.length] = elementID;\n    };\n;\n    function getTimeRemainingString(hours, minutes) {\n        var hourString = ((((hours == 1)) ? \"hr\" : \"hrs\"));\n        var minuteString = ((((minutes == 1)) ? \"min\" : \"mins\"));\n        if (((hours == 0))) {\n            return ((((minutes + \" \")) + minuteString));\n        }\n    ;\n    ;\n        if (((minutes == 0))) {\n            return ((((hours + \" \")) + hourString));\n        }\n    ;\n    ;\n        return ((((((((((((hours + \" \")) + hourString)) + \" \")) + minutes)) + \" \")) + minuteString));\n        return ((((((((((((hours + \" \")) + hourString)) + \"  \")) + minutes)) + \" \")) + minuteString));\n    };\n;\n    function FT_displayCountdown(forceUpdate) {\n        if (((((!JSBNG__document.layers && !JSBNG__document.all)) && !JSBNG__document.getElementById))) {\n            return;\n        }\n    ;\n    ;\n        FT_showHtmlElement(\"ftShipString\", true, \"inline\");\n        var FT_remainSeconds = ((FT_givenSeconds - FT_actualSeconds));\n        if (((FT_remainSeconds < 1))) {\n            FT_showEntireMessageElement(false);\n        }\n    ;\n    ;\n        var FT_secondsPerDay = ((((24 * 60)) * 60));\n        var FT_daysLong = ((FT_remainSeconds / FT_secondsPerDay));\n        var FT_days = Math.floor(FT_daysLong);\n        var FT_hoursLong = ((((FT_daysLong - FT_days)) * 24));\n        var FT_hours = Math.floor(FT_hoursLong);\n        var FT_minsLong = ((((FT_hoursLong - FT_hours)) * 60));\n        var FT_mins = Math.floor(FT_minsLong);\n        var FT_secsLong = ((((FT_minsLong - FT_mins)) * 60));\n        var FT_secs = Math.floor(FT_secsLong);\n        if (((FT_days > 0))) {\n            FT_hours = ((((FT_days * 24)) + FT_hours));\n        }\n    ;\n    ;\n        window.JSBNG__setTimeout(\"FT_getTime()\", 1000);\n        var ftCountdown = getTimeRemainingString(FT_hours, FT_mins);\n        for (var i = 0; ((i < ftCountdownElementIDs.length)); i++) {\n            var countdownElement = JSBNG__document.getElementById(ftCountdownElementIDs[i]);\n            if (countdownElement) {\n                if (((((((((FT_CurrentDisplayMin[i] != FT_mins)) || forceUpdate)) || ((countdownElement.innerHTML == \"\")))) || firstTimeUpdate))) {\n                    countdownElement.innerHTML = ftCountdown;\n                    FT_CurrentDisplayMin[i] = FT_mins;\n                    firstTimeUpdate = false;\n                }\n            ;\n            ;\n            }\n        ;\n        ;\n        };\n    ;\n    };\n;\n    function FT_showEntireMessageElement(shouldShow) {\n        for (var i = 0; ((i < ftEntireMessageElementIDs.length)); i++) {\n            FT_showHtmlElement(ftEntireMessageElementIDs[i], shouldShow);\n        };\n    ;\n    };\n;\n    function FT_showHtmlElement(elementID, shouldShow, displayStyle) {\n        var element = JSBNG__document.getElementById(elementID);\n        if (element) {\n            if (shouldShow) {\n                element.style.display = ((((displayStyle != null)) ? displayStyle : \"\"));\n            }\n             else {\n                element.style.display = \"none\";\n            }\n        ;\n        ;\n        }\n    ;\n    ;\n    };\n;\n    function FT_getAndClearCutOffEpochSeconds() {\n        var ftCutOffEpochSecondsElementID = \"ftCutOffEpochSeconds\";\n        var ftServerCurrentEpochSecondsElementID = \"ftServerCurrentEpochSeconds\";\n        if (((((JSBNG__document.layers || JSBNG__document.all)) || JSBNG__document.getElementById))) {\n            if (JSBNG__document.getElementById(ftCutOffEpochSecondsElementID)) {\n                var cutOffEpochSeconds = JSBNG__document.getElementById(ftCutOffEpochSecondsElementID).innerHTML;\n                if (((cutOffEpochSeconds != \"\"))) {\n                    JSBNG__document.getElementById(ftCutOffEpochSecondsElementID).innerHTML = \"\";\n                    if (((((clientServerTimeDrift == null)) && JSBNG__document.getElementById(ftServerCurrentEpochSecondsElementID)))) {\n                        var serverCurrentEpochSeconds = ((JSBNG__document.getElementById(ftServerCurrentEpochSecondsElementID).innerHTML * 1));\n                        clientServerTimeDrift = ((((new JSBNG__Date().getTime() / 1000)) - serverCurrentEpochSeconds));\n                    }\n                ;\n                ;\n                    return ((((((clientServerTimeDrift == null)) ? 0 : clientServerTimeDrift)) + ((cutOffEpochSeconds * 1))));\n                }\n            ;\n            ;\n            }\n        ;\n        ;\n        }\n    ;\n    ;\n        return 0;\n    };\n;\n    function FT_getCountdown(secondsLeft) {\n        var FT_currentTime = new JSBNG__Date();\n        var FT_currentHours = FT_currentTime.getHours();\n        var FT_currentMins = FT_currentTime.getMinutes();\n        var FT_currentSecs = FT_currentTime.getSeconds();\n        FT_givenSeconds = ((((((FT_currentHours * 3600)) + ((FT_currentMins * 60)))) + FT_currentSecs));\n        var FT_secondsFromCat = 10974;\n        if (((secondsLeft != null))) {\n            FT_secondsFromCat = secondsLeft;\n        }\n    ;\n    ;\n        FT_givenSeconds += FT_secondsFromCat;\n        FT_getTime();\n    };\n;\n    function FT_getTime() {\n        var FT_newCurrentTime = new JSBNG__Date();\n        var FT_actualHours = FT_newCurrentTime.getHours();\n        var FT_actualMins = FT_newCurrentTime.getMinutes();\n        var FT_actualSecs = FT_newCurrentTime.getSeconds();\n        FT_actualSeconds = ((((((FT_actualHours * 3600)) + ((FT_actualMins * 60)))) + FT_actualSecs));\n        var cutOffTimeFromPageElement = FT_getAndClearCutOffEpochSeconds();\n        if (cutOffTimeFromPageElement) {\n            var countDownSeconds = ((cutOffTimeFromPageElement - ((FT_newCurrentTime.getTime() / 1000))));\n            if (((countDownSeconds >= 1))) {\n                FT_showEntireMessageElement(true);\n            }\n        ;\n        ;\n            FT_givenSeconds = ((countDownSeconds + FT_actualSeconds));\n        }\n    ;\n    ;\n        FT_displayCountdown();\n    };\n;\n    function onAjaxUpdate_fast_track(asin) {\n        var timerDiv = JSBNG__document.getElementById(\"ftMessageTimer\");\n        var cutOffElems = JSBNG__document.getElementsByName(((\"promise-cutoff-time.\" + asin)));\n        if (((((cutOffElems == null)) || ((cutOffElems.length == 0))))) {\n            return;\n        }\n    ;\n    ;\n        if (((timerDiv && timerDiv.style))) {\n            timerDiv.style.display = \"inline\";\n        }\n    ;\n    ;\n        var cutOffTimeVal = cutOffElems[0].value;\n        var cutOffTime = parseInt(cutOffTimeVal);\n        var currSecs = ((new JSBNG__Date().getTime() / 1000));\n        var secsLeft = ((cutOffTime - currSecs));\n        FT_getCountdown(secsLeft);\n    };\n;\n    FT_getCountdown();\n} catch (JSBNG_ex) {\n\n};");
944 // 1001
945 geval("ftRegisterCountdownElementID(\"ftCountdown\");\nftRegisterEntireMessageElementID(\"ftMessage\");");
946 // 1002
947 geval("function ebccbc86cbedeb20034d6cc4d32ad790b4c606a80(JSBNG__event) {\n    return amz_js_PopWin(\"/gp/help/customer/display.html/ref=ftinfo_dp_?ie=UTF8&nodeId=3510241&pop-up=1\", \"AmazonHelp\", \"width=550,height=600,resizable=1,scrollbars=1,toolbar=1,status=1\");\n};\n;");
948 // 1005
949 o2 = {};
950 // 1006
951 f876774570_410.returns.push(o2);
952 // 1007
953 o4 = {};
954 // 1008
955 o2.style = o4;
956 // undefined
957 o2 = null;
958 // 1010
959 // undefined
960 o4 = null;
961 // 1003
962 geval("var timerDiv = JSBNG__document.getElementById(\"ftMessageTimer\");\nif (((timerDiv && timerDiv.style))) {\n    timerDiv.style.display = \"inline\";\n}\n;\n;");
963 // 1012
964 o2 = {};
965 // 1013
966 f876774570_0.returns.push(o2);
967 // 1014
968 o2.getTime = f876774570_400;
969 // undefined
970 o2 = null;
971 // 1015
972 f876774570_400.returns.push(1374695829560);
973 // 1011
974 geval("if (((typeof measureATFDiff == \"function\"))) {\n    measureATFDiff(0, new JSBNG__Date().getTime());\n}\n;\n;\n;\nif (((typeof setCSMReq == \"function\"))) {\n    setCSMReq(\"af\");\n}\n else if (((typeof uet == \"function\"))) {\n    uet(\"af\");\n}\n\n;\n;");
975 // 1016
976 geval("function ed0e2c2cc285b51efbb79f992ea3c7a27a8dff172(JSBNG__event) {\n    javascript:\n    Vellum.h();\n};\n;");
977 // 1017
978 geval("function e8fa411e8c7ac26afaca0c04fda6c9d3b8a0a97d4(JSBNG__event) {\n    javascript:\n    Vellum.h();\n};\n;");
979 // 1018
980 geval("amznJQ.available(\"jQuery\", function() {\n    window.sitbWeblab = \"\";\n    if (((typeof (Vellum) == \"undefined\"))) {\n        Vellum = {\n            js: \"http://z-ecx.images-amazon.com/images/G/01/digital/sitb/reader/v4/201305301526/en_US/sitb-library-js._V383092699_.js\",\n            sj: \"/gp/search-inside/js?locale=en_US&version=201305301526\",\n            css: \"http://z-ecx.images-amazon.com/images/G/01/digital/sitb/reader/v4/201305301526/en_US/sitb-library-css._V383092698_.css\",\n            pl: function() {\n                Vellum.lj(Vellum.js, Vellum.sj, Vellum.css);\n            },\n            lj: function(u, u2, uc) {\n                if (window.vellumLjDone) {\n                    return;\n                }\n            ;\n            ;\n                window.vellumLjDone = true;\n                var d = JSBNG__document;\n                var s = d.createElement(\"link\");\n                s.type = \"text/css\";\n                s.rel = \"stylesheet\";\n                s.href = uc;\n                d.getElementsByTagName(\"head\")[0].appendChild(s);\n                s = d.createElement(\"script\");\n                s.type = \"text/javascript\";\n                s.src = u2;\n                d.getElementsByTagName(\"head\")[0].appendChild(s);\n            },\n            lj2: function(u) {\n                var d = JSBNG__document;\n                var s = d.createElement(\"script\");\n                s.type = \"text/javascript\";\n                s.src = u;\n                d.getElementsByTagName(\"head\")[0].appendChild(s);\n            },\n            go: function() {\n                sitbLodStart = new JSBNG__Date().getTime();\n                jQuery(\"body\").css(\"overflow\", \"hidden\");\n                var jqw = jQuery(window);\n                var h = jqw.height();\n                var w = jqw.width();\n                var st = jqw.scrollTop();\n                jQuery(\"#vellumShade\").css({\n                    JSBNG__top: st,\n                    height: h,\n                    width: w\n                }).show();\n                var vli = jQuery(\"#vellumLdgIco\");\n                var nl = ((((w / 2)) - ((vli.width() / 2))));\n                var nt = ((((st + ((h / 2)))) - ((vli.height() / 2))));\n                vli.css({\n                    left: nl,\n                    JSBNG__top: nt\n                }).show();\n                JSBNG__setTimeout(\"Vellum.x()\", 20000);\n                Vellum.pl();\n            },\n            x: function() {\n                jQuery(\"#vellumMsgTxt\").html(\"An error occurred while trying to show this book.\");\n                jQuery(\"#vellumMsgHdr\").html(\"Server Timeout\");\n                jQuery(\"#vellumMsg\").show();\n                var reftagImage = new JSBNG__Image();\n                reftagImage.src = \"/gp/search-inside/reftag/ref=rdr_bar_jsto\";\n            },\n            h: function() {\n                jQuery(\"#vellumMsg\").hide();\n                jQuery(\"#vellumShade\").hide();\n                jQuery(\"#vellumLdgIco\").hide();\n                jQuery(\"body\").css(\"overflow\", \"auto\");\n            },\n            cf: function(a) {\n                return function() {\n                    v.mt = a;\n                    v.rg = Array.prototype.slice.call(arguments);\n                    v.go();\n                };\n            },\n            c: function(a) {\n                var v = Vellum;\n                v.mt = \"c\";\n                v.rg = [a,];\n                v.pl();\n            }\n        };\n        var f = \"opqr\".split(\"\");\n        {\n            var fin7keys = ((window.top.JSBNG_Replay.forInKeys)((f))), fin7i = (0);\n            var i;\n            for (; (fin7i < fin7keys.length); (fin7i++)) {\n                ((i) = (fin7keys[fin7i]));\n                {\n                    var v = Vellum;\n                    v[f[i]] = v.cf(f[i]);\n                };\n            };\n        };\n    ;\n        sitbAsin = \"0596517742\";\n        SitbReader = {\n            LightboxActions: {\n                openReader: function(r) {\n                    Vellum.o(\"0596517742\", r);\n                    return false;\n                },\n                openReaderToRandomPage: function(r) {\n                    Vellum.r(\"0596517742\", r);\n                    return false;\n                },\n                openReaderToSearchResults: function(q, r) {\n                    Vellum.q(\"0596517742\", q, r);\n                    return false;\n                },\n                openReaderToPage: function(p, t, r) {\n                    Vellum.p(\"0596517742\", p, t, r);\n                    return false;\n                }\n            }\n        };\n    }\n;\n;\n    amznJQ.onCompletion(\"amznJQ.criticalFeature\", function() {\n        Vellum.c(\"0596517742\");\n    });\n});");
981 // 1020
982 o2 = {};
983 // 1021
984 f876774570_0.returns.push(o2);
985 // undefined
986 o2 = null;
987 // 1019
988 geval("if (((typeof amznJQ != \"undefined\"))) {\n    amznJQ.addLogical(\"twister-media-matrix\", [\"http://z-ecx.images-amazon.com/images/G/01/nav2/gamma/tmmJS/tmmJS-combined-core-4624._V1_.js\",]);\n    window._tmm_1 = +new JSBNG__Date();\n}\n;\n;");
989 // 1023
990 o2 = {};
991 // 1024
992 f876774570_0.returns.push(o2);
993 // undefined
994 o2 = null;
995 // 1022
996 geval("window._tmm_3 = +new JSBNG__Date();\nif (((typeof amznJQ != \"undefined\"))) {\n    amznJQ.onCompletion(\"amznJQ.criticalFeature\", function() {\n        amznJQ.available(\"twister-media-matrix\", function() {\n            window._tmm_2 = +new JSBNG__Date();\n            TwisterMediaMatrix.initialize({\n                kindle_meta_binding: {\n                    n: \"1\",\n                    start: \"1\"\n                },\n                paperback_meta_binding: {\n                    n: \"4\",\n                    start: \"1\"\n                },\n                other_meta_binding: {\n                    n: \"1\",\n                    start: \"1\"\n                }\n            }, \"3\", \"books\", \"0596517742\", \"B00279BLLE\", \"book_display_on_website\", \"Loading...\", \"Error. Please try again.\", \"http://g-ecx.images-amazon.com/images/G/01/x-locale/twister/tiny-snake._V192199047_.gif\", false, \"1-1\", \"1374695818\");\n        });\n    });\n}\n;\n;\nvar disableWinnerPopup;");
997 // 1025
998 geval("function e370437b9f88e8249841359512a49370101cf0073(JSBNG__event) {\n    amz_expandPostBodyDescription(\"PS\", [\"psGradient\",\"psPlaceHolder\",]);\n    return false;\n};\n;");
999 // 1026
1000 geval("function eb6ad345d049a014f5054539ac0a061c9f9306843(JSBNG__event) {\n    amz_collapsePostBodyDescription(\"PS\", [\"psGradient\",\"psPlaceHolder\",]);\n    return false;\n};\n;");
1001 // 1027
1002 geval("function amz_expandPostBodyDescription(id, objects) {\n    amznJQ.onReady(\"jQuery\", function() {\n        for (var i = 0; ((i < objects.length)); i++) {\n            jQuery(((\"#\" + objects[i]))).hide();\n        };\n    ;\n        jQuery(((\"#outer_postBody\" + id))).animate({\n            height: jQuery(((\"#postBody\" + id))).height()\n        }, 500);\n        jQuery(((\"#expand\" + id))).hide();\n        jQuery(((\"#collapse\" + id))).show();\n        jQuery.ajax({\n            url: \"/gp/product/utility/ajax/impression-tracking.html\",\n            data: {\n                a: \"0596517742\",\n                ref: \"dp_pd_showmore_b\"\n            }\n        });\n    });\n};\n;\nfunction amz_collapsePostBodyDescription(id, objects) {\n    amznJQ.onReady(\"jQuery\", function() {\n        for (var i = 0; ((i < objects.length)); i++) {\n            jQuery(((\"#\" + objects[i]))).show();\n        };\n    ;\n        jQuery(((\"#outer_postBody\" + id))).animate({\n            height: 200\n        }, 500);\n        jQuery(((\"#collapse\" + id))).hide();\n        jQuery(((\"#expand\" + id))).show();\n        jQuery.ajax({\n            url: \"/gp/product/utility/ajax/impression-tracking.html\",\n            data: {\n                a: \"0596517742\",\n                ref: \"dp_pd_showless_b\"\n            }\n        });\n    });\n};\n;\namznJQ.onReady(\"jQuery\", function() {\n    var psTotalHeight = jQuery(\"#postBodyPS\").height();\n    if (((psTotalHeight > 200))) {\n        jQuery(\"#outer_postBodyPS\").css(\"display\", \"block\").css(\"height\", 200);\n        jQuery(\"#psPlaceHolder\").css(\"display\", \"block\");\n        jQuery(\"#expandPS\").css(\"display\", \"block\");\n        jQuery(\"#psGradient\").css(\"display\", \"block\");\n    }\n     else {\n        jQuery(\"#outer_postBodyPS\").css(\"height\", \"auto\");\n        jQuery(\"#psGradient\").hide();\n        jQuery(\"#psPlaceHolder\").hide();\n    }\n;\n;\n});");
1003 // 1028
1004 geval("function ea331173646474d45878734e8c72f8df51ceff043(JSBNG__event) {\n    return amz_js_PopWin(this.href, \"AmazonHelp\", \"width=450,height=600,resizable=1,scrollbars=1,toolbar=1,status=1\");\n};\n;");
1005 // 1031
1006 o2 = {};
1007 // 1032
1008 f876774570_410.returns.push(o2);
1009 // undefined
1010 o2 = null;
1011 // 1034
1012 f876774570_410.returns.push(null);
1013 // 1036
1014 f876774570_410.returns.push(null);
1015 // 1038
1016 o2 = {};
1017 // 1039
1018 f876774570_410.returns.push(o2);
1019 // 1040
1020 o4 = {};
1021 // 1041
1022 o2.style = o4;
1023 // 1042
1024 // undefined
1025 o4 = null;
1026 // 1043
1027 f876774570_429 = function() { return f876774570_429.returns[f876774570_429.inst++]; };
1028 f876774570_429.returns = [];
1029 f876774570_429.inst = 0;
1030 // 1044
1031 o2.getAttribute = f876774570_429;
1032 // undefined
1033 o2 = null;
1034 // 1045
1035 f876774570_429.returns.push(null);
1036 // 1029
1037 geval("try {\n    if (((typeof showHideElement == \"function\"))) {\n        showHideElement(\"specialOffersHidden\", \"specialOffersDiv\");\n        showHideElement(\"productPromosHidden\", \"heroQuickPromoDiv\");\n    }\n;\n;\n} catch (JSBNG_ex) {\n\n};");
1038 // 1046
1039 geval("function e103b8df299451f36f2c5afe3ffd02864825d6cf3(JSBNG__event) {\n    return false;\n};\n;");
1040 // 1047
1041 geval("function e774e86790852b7d5e098d5ae6a9b9d173b93d421(JSBNG__event) {\n    return false;\n};\n;");
1042 // 1048
1043 geval("function e0ec3ef7c4de0fa072cb66b05de1280ee4615589d(JSBNG__event) {\n    return false;\n};\n;");
1044 // 1050
1045 f876774570_430 = function() { return f876774570_430.returns[f876774570_430.inst++]; };
1046 f876774570_430.returns = [];
1047 f876774570_430.inst = 0;
1048 // 1051
1049 o0.createElement = f876774570_430;
1050 // 1052
1051 o2 = {};
1052 // 1053
1053 f876774570_430.returns.push(o2);
1054 // 1054
1055 // 1055
1056 o4 = {};
1057 // 1056
1058 o0.body = o4;
1059 // 1057
1060 o5 = {};
1061 // 1058
1062 o4.childNodes = o5;
1063 // 1059
1064 o5.length = 2;
1065 // 1061
1066 f876774570_434 = function() { return f876774570_434.returns[f876774570_434.inst++]; };
1067 f876774570_434.returns = [];
1068 f876774570_434.inst = 0;
1069 // 1062
1070 o4.insertBefore = f876774570_434;
1071 // undefined
1072 o4 = null;
1073 // 1065
1074 o4 = {};
1075 // 1066
1076 o5["0"] = o4;
1077 // undefined
1078 o5 = null;
1079 // undefined
1080 o4 = null;
1081 // 1067
1082 f876774570_434.returns.push(o2);
1083 // undefined
1084 o2 = null;
1085 // 1049
1086 geval("window.AmazonPopoverImages = {\n    snake: \"http://g-ecx.images-amazon.com/images/G/01/javascripts/lib/popover/images/snake._V192571611_.gif\",\n    btnClose: \"http://g-ecx.images-amazon.com/images/G/01/javascripts/lib/popover/images/btn_close._V192188154_.gif\",\n    closeTan: \"http://g-ecx.images-amazon.com/images/G/01/nav2/images/close-tan-sm._V192185930_.gif\",\n    closeTanDown: \"http://g-ecx.images-amazon.com/images/G/01/nav2/images/close-tan-sm-dn._V192185961_.gif\",\n    loadingBar: \"http://g-ecx.images-amazon.com/images/G/01/javascripts/lib/popover/images/loading-bar-small._V192188123_.gif\",\n    pixel: \"http://g-ecx.images-amazon.com/images/G/01/icons/blank-pixel._V192192429_.gif\"\n};\nvar container = JSBNG__document.createElement(\"DIV\");\ncontainer.id = \"ap_container\";\nif (JSBNG__document.body.childNodes.length) {\n    JSBNG__document.body.insertBefore(container, JSBNG__document.body.childNodes[0]);\n}\n else {\n    JSBNG__document.body.appendChild(container);\n}\n;\n;");
1087 // 1069
1088 o2 = {};
1089 // 1070
1090 o0.head = o2;
1091 // 1072
1092 o4 = {};
1093 // 1073
1094 f876774570_430.returns.push(o4);
1095 // 1074
1096 // 1075
1097 // 1076
1098 o2.insertBefore = f876774570_434;
1099 // 1077
1100 o5 = {};
1101 // 1078
1102 o2.firstChild = o5;
1103 // undefined
1104 o2 = null;
1105 // undefined
1106 o5 = null;
1107 // 1079
1108 f876774570_434.returns.push(o4);
1109 // undefined
1110 o4 = null;
1111 // 1068
1112 geval("(function() {\n    var h = ((((JSBNG__document.head || JSBNG__document.getElementsByTagName(\"head\")[0])) || JSBNG__document.documentElement));\n    var s = JSBNG__document.createElement(\"script\");\n    s.async = \"async\";\n    s.src = \"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/site-wide-js-1.2.6-beacon/site-wide-6717236952._V1_.js\";\n    h.insertBefore(s, h.firstChild);\n})();");
1113 // 1080
1114 geval("amznJQ.addLogical(\"popover\", []);\namznJQ.addLogical(\"navbarCSSUS-beacon\", []);\namznJQ.addLogical(\"search-js-autocomplete\", []);\namznJQ.addLogical(\"navbarJS-beacon\", []);\namznJQ.addLogical(\"LBHUCCSS-US\", []);\namznJQ.addLogical(\"CustomerPopover\", [\"http://z-ecx.images-amazon.com/images/G/01/x-locale/communities/profile/customer-popover/script-13-min._V224617671_.js\",]);\namznJQ.addLogical(\"amazonShoveler\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/amazonShoveler/amazonShoveler-1466453065._V1_.js\",]);\namznJQ.addLogical(\"dpCSS\", []);\namznJQ.addLogical(\"discussionsCSS\", []);\namznJQ.addLogical(\"bxgyCSS\", []);\namznJQ.addLogical(\"simCSS\", []);\namznJQ.addLogical(\"condProbCSS\", []);\namznJQ.addLogical(\"ciuAnnotations\", []);\namznJQ.addLogical(\"dpProductImage\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/dpProductImage/dpProductImage-2900646310._V1_.js\",]);\namznJQ.addLogical(\"search-csl\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/search-csl/search-csl-2400229912._V1_.js\",]);\namznJQ.addLogical(\"AmazonHistory\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/AmazonHistory/AmazonHistory-61973207._V1_.js\",]);\namznJQ.addLogical(\"AmazonCountdown\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/AmazonCountdownMerged/AmazonCountdownMerged-27059._V1_.js\",]);\namznJQ.addLogical(\"bylinePopover\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/bylinePopover/bylinePopover-1310866238._V1_.js\",]);\namznJQ.addLogical(\"simsJS\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/simsJSMerged/simsMerged-9099816638._V1_.js\",]);\namznJQ.addLogical(\"callOnVisible\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/callOnVisible/callOnVisible-3144292562._V1_.js\",]);\namznJQ.addLogical(\"p13nlogger\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/p13nlogger/p13nlogger-1808340331._V1_.js\",]);\namznJQ.addLogical(\"gridReviewCSS-US\", []);\namznJQ.addLogical(\"reviewsCSS-US\", []);\namznJQ.addLogical(\"lazyLoadLib\", [\"http://z-ecx.images-amazon.com/images/G/01/nav2/gamma/lazyLoadLib/lazyLoadLib-lazyLoadLib-60357._V1_.js\",]);\namznJQ.addLogical(\"immersiveView\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/immersiveView/immersiveView-990982538._V1_.js\",]);\namznJQ.addLogical(\"imageBlock\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/imageBlock/imageBlock-3190704718._V1_.js\",]);\namznJQ.addLogical(\"quantityDropDownJS\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/quantityDropDownJSMerged/quantityDropDownJSMerged-63734._V1_.js\",]);\namznJQ.addLogical(\"bbopCheckBoxJS\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/bbopCheckBoxJSMerged/bbopCheckBoxJSMerged-33025._V1_.js\",]);\namznJQ.addLogical(\"share-with-friends-js-new\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/share-with-friends-js-new/share-with-friends-js-new-1687238824._V1_.js\",]);\namznJQ.addLogical(\"amazonLike\", [\"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/amazonLike/amazonLike-682075628._V1_.js\",]);");
1115 // 1081
1116 geval("function acrPopoverHover(e, h) {\n    if (h) {\n        window.acrAsinHover = e;\n    }\n     else {\n        if (((window.acrAsinHover == e))) {\n            window.acrAsinHover = null;\n        }\n    ;\n    }\n;\n;\n};\n;\namznJQ.onReady(\"popover\", function() {\n    (function($) {\n        if ($.fn.acrPopover) {\n            return;\n        }\n    ;\n    ;\n        var popoverConfig = {\n            showOnHover: true,\n            showCloseButton: true,\n            width: null,\n            JSBNG__location: \"bottom\",\n            locationAlign: \"left\",\n            locationOffset: [-20,0,],\n            paddingLeft: 15,\n            paddingBottom: 5,\n            paddingRight: 15,\n            group: \"reviewsPopover\",\n            clone: false,\n            hoverHideDelay: 300\n        };\n        $.fn.acrPopover = function() {\n            return this.each(function() {\n                var $this = $(this);\n                if (((!$this.data(\"init\") && ((typeof $this.amazonPopoverTrigger === \"function\"))))) {\n                    $this.data(\"init\", 1);\n                    var getargs = $this.attr(\"getargs\");\n                    var ajaxURL = ((((((((((((((\"/gp/customer-reviews/common/du/displayHistoPopAjax.html?\" + \"&ASIN=\")) + $this.attr(\"JSBNG__name\"))) + \"&link=1\")) + \"&seeall=1\")) + \"&ref=\")) + $this.attr(\"ref\"))) + ((((typeof getargs != \"undefined\")) ? ((\"&getargs=\" + getargs)) : \"\"))));\n                    var myConfig = $.extend(true, {\n                        destination: ajaxURL\n                    }, popoverConfig);\n                    $this.amazonPopoverTrigger(myConfig);\n                    var w = window.acrAsinHover;\n                    if (((w && (($(w).parents(\".asinReviewsSummary\").get(0) == this))))) {\n                        $this.trigger(\"mouseover.amzPopover\");\n                        window.acrAsinHover = null;\n                    }\n                ;\n                ;\n                }\n            ;\n            ;\n            });\n        };\n        window.reviewHistPopoverConfig = popoverConfig;\n        var jqInit = window.jQueryInitHistoPopovers = function(asin) {\n            if (((typeof $(((((\".acr-popover[name=\" + asin)) + \"]\"))).acrPopover === \"function\"))) {\n                $(((((\".acr-popover[name=\" + asin)) + \"]\"))).acrPopover();\n            }\n        ;\n        ;\n        };\n        window.doInit_average_customer_reviews = jqInit;\n        window.onAjaxUpdate_average_customer_reviews = jqInit;\n        window.onCacheUpdate_average_customer_reviews = jqInit;\n        window.onCacheUpdateReselect_average_customer_reviews = jqInit;\n        amznJQ.onCompletion(\"amznJQ.criticalFeature\", function() {\n            JSBNG__setTimeout(function() {\n                amznJQ.declareAvailable(\"acrPopover\");\n            }, 10);\n        });\n    })(jQuery);\n});\namznJQ.onReady(\"acrPopover\", function() {\n    jQuery(\".acr-popover,#searchTemplate .asinReviewsSummary\").each(function() {\n        if (((typeof jQuery(this).acrPopover === \"function\"))) {\n            jQuery(this).acrPopover();\n        }\n    ;\n    ;\n    });\n});");
1117 // 1082
1118 geval("function ea906d93ab2870eed3367c77c167b1c20784c5a0d(JSBNG__event) {\n    return acrPopoverHover(this, 1);\n};\n;");
1119 // 1083
1120 geval("function e67639d5e2ae3ccb739c64e8526980011a31739f7(JSBNG__event) {\n    return acrPopoverHover(this, 0);\n};\n;");
1121 // 1084
1122 geval("function e4508443fc183cda1c7d6954f25f29479dda74974(JSBNG__event) {\n    return acrPopoverHover(this, 1);\n};\n;");
1123 // 1085
1124 geval("function ece526a20f09cb244fb224d526c267d71ef3f5587(JSBNG__event) {\n    return acrPopoverHover(this, 0);\n};\n;");
1125 // 1086
1126 geval("var DEFAULT_RENDERING_TIME = 123;\namznJQ.onReady(\"popover\", function() {\n    jQuery(\"#ns_0JNNCCYK0E23P11J4NSE_1513_1_community_feedback_trigger_product-detail\").amazonPopoverTrigger({\n        title: \"What product features are missing?\",\n        destination: \"/gp/lwcf/light-weight-form.html?asin=0596517742&root=283155\",\n        showOnHover: false,\n        draggable: true,\n        width: 650,\n        paddingBottom: 0,\n        onHide: function() {\n            logCloseWidgetEvent(DEFAULT_RENDERING_TIME);\n            cleanupSearchResults();\n        }\n    });\n});");
1127 // 1087
1128 geval("amznJQ.onReady(\"popover\", function() {\n    jQuery(\"#ns_0JNNCCYK0E23P11J4NSE_1512_1_hmd_pricing_feedback_trigger_product-detail\").amazonPopoverTrigger({\n        title: \"Tell Us About a Lower Price\",\n        destination: \"/gp/pdp/pf/pricingFeedbackForm.html/ref=sr_1_1_pfdpb?ie=UTF8&ASIN=0596517742&PREFIX=ns_0JNNCCYK0E23P11J4NSE_1512_2_&from=product-detail&keywords=javascript%20the%20good%20parts&originalURI=%2Fgp%2Fproduct%2F0596517742&qid=1374695818&s=books&sr=1-1&storeID=books\",\n        showOnHover: false,\n        draggable: true\n    });\n});");
1129 // 1088
1130 geval("amznJQ.onReady(\"lazyLoadLib\", function() {\n    jQuery(\"#books-entity-teaser\").lazyLoadContent({\n        url: \"/gp/product/features/entity-teaser/books-entity-teaser-ajax.html?ASIN=0596517742\",\n        metrics: true,\n        JSBNG__name: \"books-entity-teaser\",\n        cache: true\n    });\n});");
1131 // 1089
1132 geval("function edd3b053ee26b8726e7f59b53d3fe5e110557602e(JSBNG__event) {\n    return amz_js_PopWin(this.href, \"AmazonHelp\", \"width=340,height=340,resizable=1,scrollbars=1,toolbar=1,status=1\");\n};\n;");
1133 // 1090
1134 geval("var paCusRevAllURL = \"http://product-ads-portal.amazon.com/gp/synd/?asin=0596517742&pAsin=&gl=14&sq=javascript%20the%20good%20parts&sa=&se=Amazon&noo=&pt=Detail&spt=Glance&sn=customer-reviews-top&pRID=0JNNCCYK0E23P11J4NSE&ts=1374695826&h=429073D5161E5460C7A05BBAECF8459BDBC106E6\";");
1135 // 1092
1136 o2 = {};
1137 // 1093
1138 f876774570_0.returns.push(o2);
1139 // 1094
1140 o2.getTime = f876774570_400;
1141 // 1095
1142 f876774570_400.returns.push(1374695829658);
1143 // 1091
1144 geval("(function(w, d, e, o) {\n    var i = \"DAcrt\";\n    if (w.uDA = ((((w.ues && w.uet)) && w.uex))) {\n        ues(\"wb\", i, 1);\n        uet(\"bb\", i, {\n            wb: 1\n        });\n    }\n;\n;\n    var methodToBind = \"amznJQ.onCompletion\";\n    if (((((!w.amznJQ && ((methodToBind == \"amznJQ.onCompletion\")))) && ((typeof (P) != \"undefined\"))))) {\n        P.when(\"amznJQ.criticalFeature\").execute(function() {\n            o = w.DA;\n            if (!o) {\n                o = w.DA = [];\n                e = d.createElement(\"script\");\n                e.src = \"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/DA-us/DA-us-1236030632._V380600703_.js\";\n                d.getElementsByTagName(\"head\")[0].appendChild(e);\n            }\n        ;\n        ;\n            o.push({\n                c: 855,\n                a: \"site=amazon.us;pt=Detail;slot=customer-reviews-top;pid=0596517742;prid=0JNNCCYK0E23P11J4NSE;arid=086cda0bd10c4f368bd73f9fd75a69ce;ef=0.00\",\n                f: 1,\n                g: \"\",\n                n: 1,\n                r: 1,\n                v: 1,\n                y: \"na\",\n                u: \"amzn.us.dp.books/computer_internet;sz=300x250;oe=ISO-8859-1;u=086cda0bd10c4f368bd73f9fd75a69ce;s=i0;s=i1;s=i2;s=i3;s=i4;s=i5;s=i6;s=i7;s=i9;s=m1;s=m4;s=u4;s=u5;s=u10;s=u35;z=153;z=141;z=180;z=173;s=3072;s=32;s=1009;dc_ref=http%3A%2F%2Fwww.amazon.com;tile=1;ord=0JNNCCYK0E23P11J4NSE\",\n                q: \"N4215\"\n            });\n        });\n    }\n     else {\n        amznJQ.onCompletion(\"amznJQ.criticalFeature\", function() {\n            o = w.DA;\n            if (!o) {\n                o = w.DA = [];\n                e = d.createElement(\"script\");\n                e.src = \"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/DA-us/DA-us-1236030632._V380600703_.js\";\n                d.getElementsByTagName(\"head\")[0].appendChild(e);\n            }\n        ;\n        ;\n            o.push({\n                c: 855,\n                a: \"site=amazon.us;pt=Detail;slot=customer-reviews-top;pid=0596517742;prid=0JNNCCYK0E23P11J4NSE;arid=086cda0bd10c4f368bd73f9fd75a69ce;ef=0.00\",\n                f: 1,\n                g: \"\",\n                n: 1,\n                r: 1,\n                v: 1,\n                y: \"na\",\n                u: \"amzn.us.dp.books/computer_internet;sz=300x250;oe=ISO-8859-1;u=086cda0bd10c4f368bd73f9fd75a69ce;s=i0;s=i1;s=i2;s=i3;s=i4;s=i5;s=i6;s=i7;s=i9;s=m1;s=m4;s=u4;s=u5;s=u10;s=u35;z=153;z=141;z=180;z=173;s=3072;s=32;s=1009;dc_ref=http%3A%2F%2Fwww.amazon.com;tile=1;ord=0JNNCCYK0E23P11J4NSE\",\n                q: \"N4215\"\n            });\n        });\n    }\n;\n;\n})(window, JSBNG__document);");
1145 // 1097
1146 o4 = {};
1147 // 1098
1148 f876774570_0.returns.push(o4);
1149 // 1096
1150 geval("if (((typeof setCSMReq == \"function\"))) {\n    setCSMReq(\"cf\");\n}\n else {\n    if (((typeof uet == \"function\"))) {\n        uet(\"cf\");\n    }\n;\n;\n    amznJQ.completedStage(\"amznJQ.criticalFeature\");\n}\n;\n;");
1151 // 1099
1152 geval("function acrPopoverHover(e, h) {\n    if (h) {\n        window.acrAsinHover = e;\n    }\n     else {\n        if (((window.acrAsinHover == e))) {\n            window.acrAsinHover = null;\n        }\n    ;\n    }\n;\n;\n};\n;\namznJQ.onReady(\"popover\", function() {\n    (function($) {\n        if ($.fn.acrPopover) {\n            return;\n        }\n    ;\n    ;\n        var popoverConfig = {\n            showOnHover: true,\n            showCloseButton: true,\n            width: null,\n            JSBNG__location: \"bottom\",\n            locationAlign: \"left\",\n            locationOffset: [-20,0,],\n            paddingLeft: 15,\n            paddingBottom: 5,\n            paddingRight: 15,\n            group: \"reviewsPopover\",\n            clone: false,\n            hoverHideDelay: 300\n        };\n        $.fn.acrPopover = function() {\n            return this.each(function() {\n                var $this = $(this);\n                if (((!$this.data(\"init\") && ((typeof $this.amazonPopoverTrigger === \"function\"))))) {\n                    $this.data(\"init\", 1);\n                    var getargs = $this.attr(\"getargs\");\n                    var ajaxURL = ((((((((((((((\"/gp/customer-reviews/common/du/displayHistoPopAjax.html?\" + \"&ASIN=\")) + $this.attr(\"JSBNG__name\"))) + \"&link=1\")) + \"&seeall=1\")) + \"&ref=\")) + $this.attr(\"ref\"))) + ((((typeof getargs != \"undefined\")) ? ((\"&getargs=\" + getargs)) : \"\"))));\n                    var myConfig = $.extend(true, {\n                        destination: ajaxURL\n                    }, popoverConfig);\n                    $this.amazonPopoverTrigger(myConfig);\n                    var w = window.acrAsinHover;\n                    if (((w && (($(w).parents(\".asinReviewsSummary\").get(0) == this))))) {\n                        $this.trigger(\"mouseover.amzPopover\");\n                        window.acrAsinHover = null;\n                    }\n                ;\n                ;\n                }\n            ;\n            ;\n            });\n        };\n        window.reviewHistPopoverConfig = popoverConfig;\n        var jqInit = window.jQueryInitHistoPopovers = function(asin) {\n            if (((typeof $(((((\".acr-popover[name=\" + asin)) + \"]\"))).acrPopover === \"function\"))) {\n                $(((((\".acr-popover[name=\" + asin)) + \"]\"))).acrPopover();\n            }\n        ;\n        ;\n        };\n        window.doInit_average_customer_reviews = jqInit;\n        window.onAjaxUpdate_average_customer_reviews = jqInit;\n        window.onCacheUpdate_average_customer_reviews = jqInit;\n        window.onCacheUpdateReselect_average_customer_reviews = jqInit;\n        amznJQ.onCompletion(\"amznJQ.criticalFeature\", function() {\n            JSBNG__setTimeout(function() {\n                amznJQ.declareAvailable(\"acrPopover\");\n            }, 10);\n        });\n    })(jQuery);\n});\namznJQ.onReady(\"acrPopover\", function() {\n    jQuery(\".acr-popover,#searchTemplate .asinReviewsSummary\").each(function() {\n        if (((typeof jQuery(this).acrPopover === \"function\"))) {\n            jQuery(this).acrPopover();\n        }\n    ;\n    ;\n    });\n});");
1153 // 1100
1154 geval("function ea906d93ab2870eed3367c77c167b1c20784c5a0d(JSBNG__event) {\n    return acrPopoverHover(this, 1);\n};\n;");
1155 // 1101
1156 geval("function e67639d5e2ae3ccb739c64e8526980011a31739f7(JSBNG__event) {\n    return acrPopoverHover(this, 0);\n};\n;");
1157 // 1102
1158 geval("function e4508443fc183cda1c7d6954f25f29479dda74974(JSBNG__event) {\n    return acrPopoverHover(this, 1);\n};\n;");
1159 // 1103
1160 geval("function ece526a20f09cb244fb224d526c267d71ef3f5587(JSBNG__event) {\n    return acrPopoverHover(this, 0);\n};\n;");
1161 // 1104
1162 geval("var DEFAULT_RENDERING_TIME = 123;\namznJQ.onReady(\"popover\", function() {\n    jQuery(\"#ns_0JNNCCYK0E23P11J4NSE_1513_1_community_feedback_trigger_product-detail\").amazonPopoverTrigger({\n        title: \"What product features are missing?\",\n        destination: \"/gp/lwcf/light-weight-form.html?asin=0596517742&root=283155\",\n        showOnHover: false,\n        draggable: true,\n        width: 650,\n        paddingBottom: 0,\n        onHide: function() {\n            logCloseWidgetEvent(DEFAULT_RENDERING_TIME);\n            cleanupSearchResults();\n        }\n    });\n});");
1163 // 1105
1164 geval("amznJQ.onReady(\"popover\", function() {\n    jQuery(\"#ns_0JNNCCYK0E23P11J4NSE_1512_1_hmd_pricing_feedback_trigger_product-detail\").amazonPopoverTrigger({\n        title: \"Tell Us About a Lower Price\",\n        destination: \"/gp/pdp/pf/pricingFeedbackForm.html/ref=sr_1_1_pfdpb?ie=UTF8&ASIN=0596517742&PREFIX=ns_0JNNCCYK0E23P11J4NSE_1512_2_&from=product-detail&keywords=javascript%20the%20good%20parts&originalURI=%2Fgp%2Fproduct%2F0596517742&qid=1374695818&s=books&sr=1-1&storeID=books\",\n        showOnHover: false,\n        draggable: true\n    });\n});");
1165 // 1106
1166 geval("amznJQ.onReady(\"lazyLoadLib\", function() {\n    jQuery(\"#books-entity-teaser\").lazyLoadContent({\n        url: \"/gp/product/features/entity-teaser/books-entity-teaser-ajax.html?ASIN=0596517742\",\n        metrics: true,\n        JSBNG__name: \"books-entity-teaser\",\n        cache: true\n    });\n});");
1167 // 1107
1168 geval("function edd3b053ee26b8726e7f59b53d3fe5e110557602e(JSBNG__event) {\n    return amz_js_PopWin(this.href, \"AmazonHelp\", \"width=340,height=340,resizable=1,scrollbars=1,toolbar=1,status=1\");\n};\n;");
1169 // 1108
1170 geval("var paCusRevAllURL = \"http://product-ads-portal.amazon.com/gp/synd/?asin=0596517742&pAsin=&gl=14&sq=javascript%20the%20good%20parts&sa=&se=Amazon&noo=&pt=Detail&spt=Glance&sn=customer-reviews-top&pRID=0JNNCCYK0E23P11J4NSE&ts=1374695826&h=429073D5161E5460C7A05BBAECF8459BDBC106E6\";");
1171 // 1110
1172 o2 = {};
1173 // 1111
1174 f876774570_0.returns.push(o2);
1175 // 1112
1176 o2.getTime = f876774570_400;
1177 // undefined
1178 o2 = null;
1179 // 1113
1180 f876774570_400.returns.push(1374695829658);
1181 // 1109
1182 geval("try {\n    (function(w, d, e, o) {\n        var i = \"DAcrt\";\n        if (w.uDA = ((((w.ues && w.uet)) && w.uex))) {\n            ues(\"wb\", i, 1);\n            uet(\"bb\", i, {\n                wb: 1\n            });\n        }\n    ;\n    ;\n        var methodToBind = \"amznJQ.onCompletion\";\n        if (((((!w.amznJQ && ((methodToBind == \"amznJQ.onCompletion\")))) && ((typeof (P) != \"undefined\"))))) {\n            P.when(\"amznJQ.criticalFeature\").execute(function() {\n                o = w.DA;\n                if (!o) {\n                    o = w.DA = [];\n                    e = d.createElement(\"script\");\n                    e.src = \"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/DA-us/DA-us-1236030632._V380600703_.js\";\n                    d.getElementsByTagName(\"head\")[0].appendChild(e);\n                }\n            ;\n            ;\n                o.push({\n                    c: 855,\n                    a: \"site=amazon.us;pt=Detail;slot=customer-reviews-top;pid=0596517742;prid=0JNNCCYK0E23P11J4NSE;arid=086cda0bd10c4f368bd73f9fd75a69ce;ef=0.00\",\n                    f: 1,\n                    g: \"\",\n                    n: 1,\n                    r: 1,\n                    v: 1,\n                    y: \"na\",\n                    u: \"amzn.us.dp.books/computer_internet;sz=300x250;oe=ISO-8859-1;u=086cda0bd10c4f368bd73f9fd75a69ce;s=i0;s=i1;s=i2;s=i3;s=i4;s=i5;s=i6;s=i7;s=i9;s=m1;s=m4;s=u4;s=u5;s=u10;s=u35;z=153;z=141;z=180;z=173;s=3072;s=32;s=1009;dc_ref=http%3A%2F%2Fwww.amazon.com;tile=1;ord=0JNNCCYK0E23P11J4NSE\",\n                    q: \"N4215\"\n                });\n            });\n        }\n         else {\n            amznJQ.onCompletion(\"amznJQ.criticalFeature\", function() {\n                o = w.DA;\n                if (!o) {\n                    o = w.DA = [];\n                    e = d.createElement(\"script\");\n                    e.src = \"http://z-ecx.images-amazon.com/images/G/01/browser-scripts/DA-us/DA-us-1236030632._V380600703_.js\";\n                    d.getElementsByTagName(\"head\")[0].appendChild(e);\n                }\n            ;\n            ;\n                o.push({\n                    c: 855,\n                    a: \"site=amazon.us;pt=Detail;slot=customer-reviews-top;pid=0596517742;prid=0JNNCCYK0E23P11J4NSE;arid=086cda0bd10c4f368bd73f9fd75a69ce;ef=0.00\",\n                    f: 1,\n                    g: \"\",\n                    n: 1,\n                    r: 1,\n                    v: 1,\n                    y: \"na\",\n                    u: \"amzn.us.dp.books/computer_internet;sz=300x250;oe=ISO-8859-1;u=086cda0bd10c4f368bd73f9fd75a69ce;s=i0;s=i1;s=i2;s=i3;s=i4;s=i5;s=i6;s=i7;s=i9;s=m1;s=m4;s=u4;s=u5;s=u10;s=u35;z=153;z=141;z=180;z=173;s=3072;s=32;s=1009;dc_ref=http%3A%2F%2Fwww.amazon.com;tile=1;ord=0JNNCCYK0E23P11J4NSE\",\n                    q: \"N4215\"\n                });\n            });\n        }\n    ;\n    ;\n    })(window, JSBNG__document);\n} catch (JSBNG_ex) {\n\n};");
1183 // 1115
1184 o4 = {};
1185 // 1116
1186 f876774570_0.returns.push(o4);
1187 // 1114
1188 geval("try {\n    if (((typeof setCSMReq == \"function\"))) {\n        setCSMReq(\"cf\");\n    }\n     else {\n        if (((typeof uet == \"function\"))) {\n            uet(\"cf\");\n        }\n    ;\n    ;\n        amznJQ.completedStage(\"amznJQ.criticalFeature\");\n    }\n;\n;\n} catch (JSBNG_ex) {\n\n};");
1189 // 1118
1190 o4.getTime = f876774570_400;
1191 // undefined
1192 o4 = null;
1193 // 1119
1194 f876774570_400.returns.push(1374695829664);
1195 // 1117
1196 geval("try {\n    (function() {\n        var initJQuery = function() {\n            var jQuery126PatchDelay = 13;\n            var _jQuery = window.jQuery, _$ = window.$;\n            var jQuery = window.jQuery = window.$ = function(selector, context) {\n                return new jQuery.fn.init(selector, context);\n            };\n            var quickExpr = /^[^<]*(<(.|\\s)+>)[^>]*$|^#(\\w+)$/, isSimple = /^.[^:#\\[\\.]*$/, undefined;\n            jQuery.fn = jQuery.prototype = {\n                init: function(selector, context) {\n                    selector = ((selector || JSBNG__document));\n                    if (selector.nodeType) {\n                        this[0] = selector;\n                        this.length = 1;\n                        return this;\n                    }\n                ;\n                ;\n                    if (((typeof selector == \"string\"))) {\n                        var match = quickExpr.exec(selector);\n                        if (((match && ((match[1] || !context))))) {\n                            if (match[1]) {\n                                selector = jQuery.clean([match[1],], context);\n                            }\n                             else {\n                                var elem = JSBNG__document.getElementById(match[3]);\n                                if (elem) {\n                                    if (((elem.id != match[3]))) {\n                                        return jQuery().JSBNG__find(selector);\n                                    }\n                                ;\n                                ;\n                                    return jQuery(elem);\n                                }\n                            ;\n                            ;\n                                selector = [];\n                            }\n                        ;\n                        ;\n                        }\n                         else {\n                            return jQuery(context).JSBNG__find(selector);\n                        }\n                    ;\n                    ;\n                    }\n                     else {\n                        if (jQuery.isFunction(selector)) {\n                            return jQuery(JSBNG__document)[((jQuery.fn.ready ? \"ready\" : \"load\"))](selector);\n                        }\n                    ;\n                    ;\n                    }\n                ;\n                ;\n                    return this.setArray(jQuery.makeArray(selector));\n                },\n                jquery: \"1.2.6\",\n                size: function() {\n                    return this.length;\n                },\n                length: 0,\n                get: function(num) {\n                    return ((((num == undefined)) ? jQuery.makeArray(this) : this[num]));\n                },\n                pushStack: function(elems) {\n                    var ret = jQuery(elems);\n                    ret.prevObject = this;\n                    return ret;\n                },\n                setArray: function(elems) {\n                    this.length = 0;\n                    Array.prototype.push.apply(this, elems);\n                    return this;\n                },\n                each: function(callback, args) {\n                    return jQuery.each(this, callback, args);\n                },\n                index: function(elem) {\n                    var ret = -1;\n                    return jQuery.inArray(((((elem && elem.jquery)) ? elem[0] : elem)), this);\n                },\n                attr: function(JSBNG__name, value, type) {\n                    var options = JSBNG__name;\n                    if (((JSBNG__name.constructor == String))) {\n                        if (((value === undefined))) {\n                            return ((this[0] && jQuery[((type || \"attr\"))](this[0], JSBNG__name)));\n                        }\n                         else {\n                            options = {\n                            };\n                            options[JSBNG__name] = value;\n                        }\n                    ;\n                    ;\n                    }\n                ;\n                ;\n                    return this.each(function(i) {\n                        {\n                            var fin8keys = ((window.top.JSBNG_Replay.forInKeys)((options))), fin8i = (0);\n                            (0);\n                            for (; (fin8i < fin8keys.length); (fin8i++)) {\n                                ((name) = (fin8keys[fin8i]));\n                                {\n                                    jQuery.attr(((type ? this.style : this)), JSBNG__name, jQuery.prop(this, options[JSBNG__name], type, i, JSBNG__name));\n                                };\n                            };\n                        };\n                    ;\n                    });\n                },\n                css: function(key, value) {\n                    if (((((((key == \"width\")) || ((key == \"height\")))) && ((parseFloat(value) < 0))))) {\n                        value = undefined;\n                    }\n                ;\n                ;\n                    return this.attr(key, value, \"curCSS\");\n                },\n                text: function(text) {\n                    if (((((typeof text != \"object\")) && ((text != null))))) {\n                        return this.empty().append(((((this[0] && this[0].ownerDocument)) || JSBNG__document)).createTextNode(text));\n                    }\n                ;\n                ;\n                    var ret = \"\";\n                    jQuery.each(((text || this)), function() {\n                        jQuery.each(this.childNodes, function() {\n                            if (((this.nodeType != 8))) {\n                                ret += ((((this.nodeType != 1)) ? this.nodeValue : jQuery.fn.text([this,])));\n                            }\n                        ;\n                        ;\n                        });\n                    });\n                    return ret;\n                },\n                wrapAll: function(html) {\n                    if (this[0]) {\n                        jQuery(html, this[0].ownerDocument).clone().insertBefore(this[0]).map(function() {\n                            var elem = this;\n                            while (elem.firstChild) {\n                                elem = elem.firstChild;\n                            };\n                        ;\n                            return elem;\n                        }).append(this);\n                    }\n                ;\n                ;\n                    return this;\n                },\n                wrapInner: function(html) {\n                    return this.each(function() {\n                        jQuery(this).contents().wrapAll(html);\n                    });\n                },\n                wrap: function(html) {\n                    return this.each(function() {\n                        jQuery(this).wrapAll(html);\n                    });\n                },\n                append: function() {\n                    return this.domManip(arguments, true, false, function(elem) {\n                        if (((this.nodeType == 1))) {\n                            this.appendChild(elem);\n                        }\n                    ;\n                    ;\n                    });\n                },\n                prepend: function() {\n                    return this.domManip(arguments, true, true, function(elem) {\n                        if (((this.nodeType == 1))) {\n                            this.insertBefore(elem, this.firstChild);\n                        }\n                    ;\n                    ;\n                    });\n                },\n                before: function() {\n                    return this.domManip(arguments, false, false, function(elem) {\n                        this.parentNode.insertBefore(elem, this);\n                    });\n                },\n                after: function() {\n                    return this.domManip(arguments, false, true, function(elem) {\n                        this.parentNode.insertBefore(elem, this.nextSibling);\n                    });\n                },\n                end: function() {\n                    return ((this.prevObject || jQuery([])));\n                },\n                JSBNG__find: function(selector) {\n                    var elems = jQuery.map(this, function(elem) {\n                        return jQuery.JSBNG__find(selector, elem);\n                    });\n                    return this.pushStack(((((/[^+>] [^+>]/.test(selector) || ((selector.indexOf(\"..\") > -1)))) ? jQuery.unique(elems) : elems)));\n                },\n                clone: function(events) {\n                    var ret = this.map(function() {\n                        if (((jQuery.browser.msie && !jQuery.isXMLDoc(this)))) {\n                            var clone = this.cloneNode(true), container = JSBNG__document.createElement(\"div\");\n                            container.appendChild(clone);\n                            return jQuery.clean([container.innerHTML,])[0];\n                        }\n                         else {\n                            return this.cloneNode(true);\n                        }\n                    ;\n                    ;\n                    });\n                    var clone = ret.JSBNG__find(\"*\").andSelf().each(function() {\n                        if (((this[expando] != undefined))) {\n                            this[expando] = null;\n                        }\n                    ;\n                    ;\n                    });\n                    if (((events === true))) {\n                        this.JSBNG__find(\"*\").andSelf().each(function(i) {\n                            if (((this.nodeType == 3))) {\n                                return;\n                            }\n                        ;\n                        ;\n                            var events = jQuery.data(this, \"events\");\n                            {\n                                var fin9keys = ((window.top.JSBNG_Replay.forInKeys)((events))), fin9i = (0);\n                                var type;\n                                for (; (fin9i < fin9keys.length); (fin9i++)) {\n                                    ((type) = (fin9keys[fin9i]));\n                                    {\n                                        {\n                                            var fin10keys = ((window.top.JSBNG_Replay.forInKeys)((events[type]))), fin10i = (0);\n                                            var handler;\n                                            for (; (fin10i < fin10keys.length); (fin10i++)) {\n                                                ((handler) = (fin10keys[fin10i]));\n                                                {\n                                                    jQuery.JSBNG__event.add(clone[i], type, events[type][handler], events[type][handler].data);\n                                                };\n                                            };\n                                        };\n                                    ;\n                                    };\n                                };\n                            };\n                        ;\n                        });\n                    }\n                ;\n                ;\n                    return ret;\n                },\n                filter: function(selector) {\n                    return this.pushStack(((((jQuery.isFunction(selector) && jQuery.grep(this, function(elem, i) {\n                        return selector.call(elem, i);\n                    }))) || jQuery.multiFilter(selector, this))));\n                },\n                not: function(selector) {\n                    if (((selector.constructor == String))) {\n                        if (isSimple.test(selector)) {\n                            return this.pushStack(jQuery.multiFilter(selector, this, true));\n                        }\n                         else {\n                            selector = jQuery.multiFilter(selector, this);\n                        }\n                    ;\n                    ;\n                    }\n                ;\n                ;\n                    var isArrayLike = ((((selector.length && ((selector[((selector.length - 1))] !== undefined)))) && !selector.nodeType));\n                    return this.filter(function() {\n                        return ((isArrayLike ? ((jQuery.inArray(this, selector) < 0)) : ((this != selector))));\n                    });\n                },\n                add: function(selector) {\n                    return this.pushStack(jQuery.unique(jQuery.merge(this.get(), ((((typeof selector == \"string\")) ? jQuery(selector) : jQuery.makeArray(selector))))));\n                },\n                is: function(selector) {\n                    return ((!!selector && ((jQuery.multiFilter(selector, this).length > 0))));\n                },\n                hasClass: function(selector) {\n                    return this.is(((\".\" + selector)));\n                },\n                val: function(value) {\n                    if (((value == undefined))) {\n                        if (this.length) {\n                            var elem = this[0];\n                            if (jQuery.nodeName(elem, \"select\")) {\n                                var index = elem.selectedIndex, values = [], options = elem.options, one = ((elem.type == \"select-one\"));\n                                if (((index < 0))) {\n                                    return null;\n                                }\n                            ;\n                            ;\n                                for (var i = ((one ? index : 0)), max = ((one ? ((index + 1)) : options.length)); ((i < max)); i++) {\n                                    var option = options[i];\n                                    if (option.selected) {\n                                        value = ((((jQuery.browser.msie && !option.attributes.value.specified)) ? option.text : option.value));\n                                        if (one) {\n                                            return value;\n                                        }\n                                    ;\n                                    ;\n                                        values.push(value);\n                                    }\n                                ;\n                                ;\n                                };\n                            ;\n                                return values;\n                            }\n                             else {\n                                return ((this[0].value || \"\")).replace(/\\r/g, \"\");\n                            }\n                        ;\n                        ;\n                        }\n                    ;\n                    ;\n                        return undefined;\n                    }\n                ;\n                ;\n                    if (((value.constructor == Number))) {\n                        value += \"\";\n                    }\n                ;\n                ;\n                    return this.each(function() {\n                        if (((this.nodeType != 1))) {\n                            return;\n                        }\n                    ;\n                    ;\n                        if (((((value.constructor == Array)) && /radio|checkbox/.test(this.type)))) {\n                            this.checked = ((((jQuery.inArray(this.value, value) >= 0)) || ((jQuery.inArray(this.JSBNG__name, value) >= 0))));\n                        }\n                         else {\n                            if (jQuery.nodeName(this, \"select\")) {\n                                var values = jQuery.makeArray(value);\n                                jQuery(\"option\", this).each(function() {\n                                    this.selected = ((((jQuery.inArray(this.value, values) >= 0)) || ((jQuery.inArray(this.text, values) >= 0))));\n                                });\n                                if (!values.length) {\n                                    this.selectedIndex = -1;\n                                }\n                            ;\n                            ;\n                            }\n                             else {\n                                this.value = value;\n                            }\n                        ;\n                        ;\n                        }\n                    ;\n                    ;\n                    });\n                },\n                html: function(value) {\n                    return ((((value == undefined)) ? ((this[0] ? this[0].innerHTML : null)) : this.empty().append(value)));\n                },\n                replaceWith: function(value) {\n                    return this.after(value).remove();\n                },\n                eq: function(i) {\n                    return this.slice(i, ((i + 1)));\n                },\n                slice: function() {\n                    return this.pushStack(Array.prototype.slice.apply(this, arguments));\n                },\n                map: function(callback) {\n                    return this.pushStack(jQuery.map(this, function(elem, i) {\n                        return callback.call(elem, i, elem);\n                    }));\n                },\n                andSelf: function() {\n                    return this.add(this.prevObject);\n                },\n                data: function(key, value) {\n                    var parts = key.split(\".\");\n                    parts[1] = ((parts[1] ? ((\".\" + parts[1])) : \"\"));\n                    if (((value === undefined))) {\n                        var data = this.triggerHandler(((((\"getData\" + parts[1])) + \"!\")), [parts[0],]);\n                        if (((((data === undefined)) && this.length))) {\n                            data = jQuery.data(this[0], key);\n                        }\n                    ;\n                    ;\n                        return ((((((data === undefined)) && parts[1])) ? this.data(parts[0]) : data));\n                    }\n                     else {\n                        return this.trigger(((((\"setData\" + parts[1])) + \"!\")), [parts[0],value,]).each(function() {\n                            jQuery.data(this, key, value);\n                        });\n                    }\n                ;\n                ;\n                },\n                removeData: function(key) {\n                    return this.each(function() {\n                        jQuery.removeData(this, key);\n                    });\n                },\n                domManip: function(args, table, reverse, callback) {\n                    var clone = ((this.length > 1)), elems;\n                    return this.each(function() {\n                        if (!elems) {\n                            elems = jQuery.clean(args, this.ownerDocument);\n                            if (reverse) {\n                                elems.reverse();\n                            }\n                        ;\n                        ;\n                        }\n                    ;\n                    ;\n                        var obj = this;\n                        if (((((table && jQuery.nodeName(this, \"table\"))) && jQuery.nodeName(elems[0], \"tr\")))) {\n                            obj = ((this.getElementsByTagName(\"tbody\")[0] || this.appendChild(this.ownerDocument.createElement(\"tbody\"))));\n                        }\n                    ;\n                    ;\n                        var scripts = jQuery([]);\n                        jQuery.each(elems, function() {\n                            var elem = ((clone ? jQuery(this).clone(true)[0] : this));\n                            if (jQuery.nodeName(elem, \"script\")) {\n                                scripts = scripts.add(elem);\n                            }\n                             else {\n                                if (((elem.nodeType == 1))) {\n                                    scripts = scripts.add(jQuery(\"script\", elem).remove());\n                                }\n                            ;\n                            ;\n                                callback.call(obj, elem);\n                            }\n                        ;\n                        ;\n                        });\n                        scripts.each(evalScript);\n                    });\n                }\n            };\n            jQuery.fn.init.prototype = jQuery.fn;\n            function evalScript(i, elem) {\n                if (elem.src) {\n                    jQuery.ajax({\n                        url: elem.src,\n                        async: false,\n                        dataType: \"script\"\n                    });\n                }\n                 else {\n                    jQuery.globalEval(((((((elem.text || elem.textContent)) || elem.innerHTML)) || \"\")));\n                }\n            ;\n            ;\n                if (elem.parentNode) {\n                    elem.parentNode.removeChild(elem);\n                }\n            ;\n            ;\n            };\n        ;\n            function now() {\n                return +new JSBNG__Date;\n            };\n        ;\n            jQuery.extend = jQuery.fn.extend = function() {\n                var target = ((arguments[0] || {\n                })), i = 1, length = arguments.length, deep = false, options;\n                if (((target.constructor == Boolean))) {\n                    deep = target;\n                    target = ((arguments[1] || {\n                    }));\n                    i = 2;\n                }\n            ;\n            ;\n                if (((((typeof target != \"object\")) && ((typeof target != \"function\"))))) {\n                    target = {\n                    };\n                }\n            ;\n            ;\n                if (((length == i))) {\n                    target = this;\n                    --i;\n                }\n            ;\n            ;\n                for (; ((i < length)); i++) {\n                    if ((((options = arguments[i]) != null))) {\n                        {\n                            var fin11keys = ((window.top.JSBNG_Replay.forInKeys)((options))), fin11i = (0);\n                            var JSBNG__name;\n                            for (; (fin11i < fin11keys.length); (fin11i++)) {\n                                ((name) = (fin11keys[fin11i]));\n                                {\n                                    var src = target[JSBNG__name], copy = options[JSBNG__name];\n                                    if (((target === copy))) {\n                                        continue;\n                                    }\n                                ;\n                                ;\n                                    if (((((((deep && copy)) && ((typeof copy == \"object\")))) && !copy.nodeType))) {\n                                        target[JSBNG__name] = jQuery.extend(deep, ((src || ((((copy.length != null)) ? [] : {\n                                        })))), copy);\n                                    }\n                                     else {\n                                        if (((copy !== undefined))) {\n                                            target[JSBNG__name] = copy;\n                                        }\n                                    ;\n                                    ;\n                                    }\n                                ;\n                                ;\n                                };\n                            };\n                        };\n                    ;\n                    }\n                ;\n                ;\n                };\n            ;\n                return target;\n            };\n            var expando = ((\"jQuery\" + now())), uuid = 0, windowData = {\n            }, exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i, defaultView = ((JSBNG__document.defaultView || {\n            }));\n            jQuery.extend({\n                noConflict: function(deep) {\n                    window.$ = _$;\n                    if (deep) {\n                        window.jQuery = _jQuery;\n                    }\n                ;\n                ;\n                    return jQuery;\n                },\n                isFunction: function(fn) {\n                    return ((((((((!!fn && ((typeof fn != \"string\")))) && !fn.nodeName)) && ((fn.constructor != Array)))) && /^[\\s[]?function/.test(((fn + \"\")))));\n                },\n                isXMLDoc: function(elem) {\n                    return ((((elem.documentElement && !elem.body)) || ((((elem.tagName && elem.ownerDocument)) && !elem.ownerDocument.body))));\n                },\n                globalEval: function(data) {\n                    data = jQuery.trim(data);\n                    if (data) {\n                        var head = ((JSBNG__document.getElementsByTagName(\"head\")[0] || JSBNG__document.documentElement)), script = JSBNG__document.createElement(\"script\");\n                        script.type = \"text/javascript\";\n                        if (jQuery.browser.msie) {\n                            script.text = data;\n                        }\n                         else {\n                            script.appendChild(JSBNG__document.createTextNode(data));\n                        }\n                    ;\n                    ;\n                        head.insertBefore(script, head.firstChild);\n                        head.removeChild(script);\n                    }\n                ;\n                ;\n                },\n                nodeName: function(elem, JSBNG__name) {\n                    return ((elem.nodeName && ((elem.nodeName.toUpperCase() == JSBNG__name.toUpperCase()))));\n                },\n                cache: {\n                },\n                data: function(elem, JSBNG__name, data) {\n                    elem = ((((elem == window)) ? windowData : elem));\n                    var id = elem[expando];\n                    if (!id) {\n                        id = elem[expando] = ++uuid;\n                    }\n                ;\n                ;\n                    if (((JSBNG__name && !jQuery.cache[id]))) {\n                        jQuery.cache[id] = {\n                        };\n                    }\n                ;\n                ;\n                    if (((data !== undefined))) {\n                        jQuery.cache[id][JSBNG__name] = data;\n                    }\n                ;\n                ;\n                    return ((JSBNG__name ? jQuery.cache[id][JSBNG__name] : id));\n                },\n                removeData: function(elem, JSBNG__name) {\n                    elem = ((((elem == window)) ? windowData : elem));\n                    var id = elem[expando];\n                    if (JSBNG__name) {\n                        if (jQuery.cache[id]) {\n                            delete jQuery.cache[id][JSBNG__name];\n                            JSBNG__name = \"\";\n                            {\n                                var fin12keys = ((window.top.JSBNG_Replay.forInKeys)((jQuery.cache[id]))), fin12i = (0);\n                                (0);\n                                for (; (fin12i < fin12keys.length); (fin12i++)) {\n                                    ((name) = (fin12keys[fin12i]));\n                                    {\n                                        break;\n                                    };\n                                };\n                            };\n                        ;\n                            if (!JSBNG__name) {\n                                jQuery.removeData(elem);\n                            }\n                        ;\n                        ;\n                        }\n                    ;\n                    ;\n                    }\n                     else {\n                        try {\n                            delete elem[expando];\n                        } catch (e) {\n                            if (elem.removeAttribute) {\n                                elem.removeAttribute(expando);\n                            }\n                        ;\n                        ;\n                        };\n                    ;\n                        delete jQuery.cache[id];\n                    }\n                ;\n                ;\n                },\n                each: function(object, callback, args) {\n                    var JSBNG__name, i = 0, length = object.length;\n                    if (args) {\n                        if (((length == undefined))) {\n                            {\n                                var fin13keys = ((window.top.JSBNG_Replay.forInKeys)((object))), fin13i = (0);\n                                (0);\n                                for (; (fin13i < fin13keys.length); (fin13i++)) {\n                                    ((name) = (fin13keys[fin13i]));\n                                    {\n                                        if (((callback.apply(object[JSBNG__name], args) === false))) {\n                                            break;\n                                        }\n                                    ;\n                                    ;\n                                    };\n                                };\n                            };\n                        ;\n                        }\n                         else {\n                            for (; ((i < length)); ) {\n                                if (((callback.apply(object[i++], args) === false))) {\n                                    break;\n                                }\n                            ;\n                            ;\n                            };\n                        ;\n                        }\n                    ;\n                    ;\n                    }\n                     else {\n                        if (((length == undefined))) {\n                            {\n                                var fin14keys = ((window.top.JSBNG_Replay.forInKeys)((object))), fin14i = (0);\n                                (0);\n                                for (; (fin14i < fin14keys.length); (fin14i++)) {\n                                    ((name) = (fin14keys[fin14i]));\n                                    {\n                                        if (((callback.call(object[JSBNG__name], JSBNG__name, object[JSBNG__name]) === false))) {\n                                            break;\n                                        }\n                                    ;\n                                    ;\n                                    };\n                                };\n                            };\n                        ;\n                        }\n                         else {\n                            for (var value = object[0]; ((((i < length)) && ((callback.call(value, i, value) !== false)))); value = object[++i]) {\n                            \n                            };\n                        ;\n                        }\n                    ;\n                    ;\n                    }\n                ;\n                ;\n                    return object;\n                },\n                prop: function(elem, value, type, i, JSBNG__name) {\n                    if (jQuery.isFunction(value)) {\n                        value = value.call(elem, i);\n                    }\n                ;\n                ;\n                    return ((((((((value && ((value.constructor == Number)))) && ((type == \"curCSS\")))) && !exclude.test(JSBNG__name))) ? ((value + \"px\")) : value));\n                },\n                className: {\n                    add: function(elem, classNames) {\n                        jQuery.each(((classNames || \"\")).split(/\\s+/), function(i, className) {\n                            if (((((elem.nodeType == 1)) && !jQuery.className.has(elem.className, className)))) {\n                                elem.className += ((((elem.className ? \" \" : \"\")) + className));\n                            }\n                        ;\n                        ;\n                        });\n                    },\n                    remove: function(elem, classNames) {\n                        if (((elem.nodeType == 1))) {\n                            elem.className = ((((classNames != undefined)) ? jQuery.grep(elem.className.split(/\\s+/), function(className) {\n                                return !jQuery.className.has(classNames, className);\n                            }).join(\" \") : \"\"));\n                        }\n                    ;\n                    ;\n                    },\n                    has: function(elem, className) {\n                        return ((jQuery.inArray(className, ((elem.className || elem)).toString().split(/\\s+/)) > -1));\n                    }\n                },\n                swap: function(elem, options, callback) {\n                    var old = {\n                    };\n                    {\n                        var fin15keys = ((window.top.JSBNG_Replay.forInKeys)((options))), fin15i = (0);\n                        var JSBNG__name;\n                        for (; (fin15i < fin15keys.length); (fin15i++)) {\n                            ((name) = (fin15keys[fin15i]));\n                            {\n                                old[JSBNG__name] = elem.style[JSBNG__name];\n                                elem.style[JSBNG__name] = options[JSBNG__name];\n                            };\n                        };\n                    };\n                ;\n                    callback.call(elem);\n                    {\n                        var fin16keys = ((window.top.JSBNG_Replay.forInKeys)((options))), fin16i = (0);\n                        var JSBNG__name;\n                        for (; (fin16i < fin16keys.length); (fin16i++)) {\n                            ((name) = (fin16keys[fin16i]));\n                            {\n                                elem.style[JSBNG__name] = old[JSBNG__name];\n                            };\n                        };\n                    };\n                ;\n                },\n                css: function(elem, JSBNG__name, force) {\n                    if (((((JSBNG__name == \"width\")) || ((JSBNG__name == \"height\"))))) {\n                        var val, props = {\n                            position: \"absolute\",\n                            visibility: \"hidden\",\n                            display: \"block\"\n                        }, which = ((((JSBNG__name == \"width\")) ? [\"Left\",\"Right\",] : [\"Top\",\"Bottom\",]));\n                        function getWH() {\n                            val = ((((JSBNG__name == \"width\")) ? elem.offsetWidth : elem.offsetHeight));\n                            var padding = 0, border = 0;\n                            jQuery.each(which, function() {\n                                padding += ((parseFloat(jQuery.curCSS(elem, ((\"padding\" + this)), true)) || 0));\n                                border += ((parseFloat(jQuery.curCSS(elem, ((((\"border\" + this)) + \"Width\")), true)) || 0));\n                            });\n                            val -= Math.round(((padding + border)));\n                        };\n                    ;\n                        if (jQuery(elem).is(\":visible\")) {\n                            getWH();\n                        }\n                         else {\n                            jQuery.swap(elem, props, getWH);\n                        }\n                    ;\n                    ;\n                        return Math.max(0, val);\n                    }\n                ;\n                ;\n                    return jQuery.curCSS(elem, JSBNG__name, force);\n                },\n                curCSS: function(elem, JSBNG__name, force) {\n                    var ret, style = elem.style;\n                    function color(elem) {\n                        if (!jQuery.browser.safari) {\n                            return false;\n                        }\n                    ;\n                    ;\n                        var ret = defaultView.JSBNG__getComputedStyle(elem, null);\n                        return ((!ret || ((ret.getPropertyValue(\"color\") == \"\"))));\n                    };\n                ;\n                    if (((((JSBNG__name == \"opacity\")) && jQuery.browser.msie))) {\n                        ret = jQuery.attr(style, \"opacity\");\n                        return ((((ret == \"\")) ? \"1\" : ret));\n                    }\n                ;\n                ;\n                    if (((jQuery.browser.JSBNG__opera && ((JSBNG__name == \"display\"))))) {\n                        var save = style.outline;\n                        style.outline = \"0 solid black\";\n                        style.outline = save;\n                    }\n                ;\n                ;\n                    if (JSBNG__name.match(/float/i)) {\n                        JSBNG__name = styleFloat;\n                    }\n                ;\n                ;\n                    if (((((!force && style)) && style[JSBNG__name]))) {\n                        ret = style[JSBNG__name];\n                    }\n                     else {\n                        if (defaultView.JSBNG__getComputedStyle) {\n                            if (JSBNG__name.match(/float/i)) {\n                                JSBNG__name = \"float\";\n                            }\n                        ;\n                        ;\n                            JSBNG__name = JSBNG__name.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n                            var computedStyle = defaultView.JSBNG__getComputedStyle(elem, null);\n                            if (((computedStyle && !color(elem)))) {\n                                ret = computedStyle.getPropertyValue(JSBNG__name);\n                            }\n                             else {\n                                var swap = [], stack = [], a = elem, i = 0;\n                                for (; ((a && color(a))); a = a.parentNode) {\n                                    stack.unshift(a);\n                                };\n                            ;\n                                for (; ((i < stack.length)); i++) {\n                                    if (color(stack[i])) {\n                                        swap[i] = stack[i].style.display;\n                                        stack[i].style.display = \"block\";\n                                    }\n                                ;\n                                ;\n                                };\n                            ;\n                                ret = ((((((JSBNG__name == \"display\")) && ((swap[((stack.length - 1))] != null)))) ? \"none\" : ((((computedStyle && computedStyle.getPropertyValue(JSBNG__name))) || \"\"))));\n                                for (i = 0; ((i < swap.length)); i++) {\n                                    if (((swap[i] != null))) {\n                                        stack[i].style.display = swap[i];\n                                    }\n                                ;\n                                ;\n                                };\n                            ;\n                            }\n                        ;\n                        ;\n                            if (((((JSBNG__name == \"opacity\")) && ((ret == \"\"))))) {\n                                ret = \"1\";\n                            }\n                        ;\n                        ;\n                        }\n                         else {\n                            if (elem.currentStyle) {\n                                var camelCase = JSBNG__name.replace(/\\-(\\w)/g, function(all, letter) {\n                                    return letter.toUpperCase();\n                                });\n                                ret = ((elem.currentStyle[JSBNG__name] || elem.currentStyle[camelCase]));\n                                if (((!/^\\d+(px)?$/i.test(ret) && /^\\d/.test(ret)))) {\n                                    var left = style.left, rsLeft = elem.runtimeStyle.left;\n                                    elem.runtimeStyle.left = elem.currentStyle.left;\n                                    style.left = ((ret || 0));\n                                    ret = ((style.pixelLeft + \"px\"));\n                                    style.left = left;\n                                    elem.runtimeStyle.left = rsLeft;\n                                }\n                            ;\n                            ;\n                            }\n                        ;\n                        ;\n                        }\n                    ;\n                    ;\n                    }\n                ;\n                ;\n                    return ret;\n                },\n                clean: function(elems, context) {\n                    var ret = [];\n                    context = ((context || JSBNG__document));\n                    if (((typeof context.createElement == \"undefined\"))) {\n                        context = ((((context.ownerDocument || ((context[0] && context[0].ownerDocument)))) || JSBNG__document));\n                    }\n                ;\n                ;\n                    jQuery.each(elems, function(i, elem) {\n                        if (!elem) {\n                            return;\n                        }\n                    ;\n                    ;\n                        if (((elem.constructor == Number))) {\n                            elem += \"\";\n                        }\n                    ;\n                    ;\n                        if (((typeof elem == \"string\"))) {\n                            elem = elem.replace(/(<(\\w+)[^>]*?)\\/>/g, function(all, front, tag) {\n                                return ((tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ? all : ((((((front + \"\\u003E\\u003C/\")) + tag)) + \"\\u003E\"))));\n                            });\n                            var tags = jQuery.trim(elem).toLowerCase(), div = context.createElement(\"div\");\n                            var wrap = ((((((((((((((((!tags.indexOf(\"\\u003Copt\") && [1,\"\\u003Cselect multiple='multiple'\\u003E\",\"\\u003C/select\\u003E\",])) || ((!tags.indexOf(\"\\u003Cleg\") && [1,\"\\u003Cfieldset\\u003E\",\"\\u003C/fieldset\\u003E\",])))) || ((tags.match(/^<(thead|tbody|tfoot|colg|cap)/) && [1,\"\\u003Ctable\\u003E\",\"\\u003C/table\\u003E\",])))) || ((!tags.indexOf(\"\\u003Ctr\") && [2,\"\\u003Ctable\\u003E\\u003Ctbody\\u003E\",\"\\u003C/tbody\\u003E\\u003C/table\\u003E\",])))) || ((((!tags.indexOf(\"\\u003Ctd\") || !tags.indexOf(\"\\u003Cth\"))) && [3,\"\\u003Ctable\\u003E\\u003Ctbody\\u003E\\u003Ctr\\u003E\",\"\\u003C/tr\\u003E\\u003C/tbody\\u003E\\u003C/table\\u003E\",])))) || ((!tags.indexOf(\"\\u003Ccol\") && [2,\"\\u003Ctable\\u003E\\u003Ctbody\\u003E\\u003C/tbody\\u003E\\u003Ccolgroup\\u003E\",\"\\u003C/colgroup\\u003E\\u003C/table\\u003E\",])))) || ((jQuery.browser.msie && [1,\"div\\u003Cdiv\\u003E\",\"\\u003C/div\\u003E\",])))) || [0,\"\",\"\",]));\n                            div.innerHTML = ((((wrap[1] + elem)) + wrap[2]));\n                            while (wrap[0]--) {\n                                div = div.lastChild;\n                            };\n                        ;\n                            if (jQuery.browser.msie) {\n                                var tbody = ((((!tags.indexOf(\"\\u003Ctable\") && ((tags.indexOf(\"\\u003Ctbody\") < 0)))) ? ((div.firstChild && div.firstChild.childNodes)) : ((((((wrap[1] == \"\\u003Ctable\\u003E\")) && ((tags.indexOf(\"\\u003Ctbody\") < 0)))) ? div.childNodes : []))));\n                                for (var j = ((tbody.length - 1)); ((j >= 0)); --j) {\n                                    if (((jQuery.nodeName(tbody[j], \"tbody\") && !tbody[j].childNodes.length))) {\n                                        tbody[j].parentNode.removeChild(tbody[j]);\n                                    }\n                                ;\n                                ;\n                                };\n                            ;\n                                if (/^\\s/.test(elem)) {\n                                    div.insertBefore(context.createTextNode(elem.match(/^\\s*/)[0]), div.firstChild);\n                                }\n                            ;\n                            ;\n                            }\n                        ;\n                        ;\n                            elem = jQuery.makeArray(div.childNodes);\n                        }\n                    ;\n                    ;\n                        if (((((elem.length === 0)) && ((!jQuery.nodeName(elem, \"form\") && !jQuery.nodeName(elem, \"select\")))))) {\n                            return;\n                        }\n                    ;\n                    ;\n                        if (((((((elem[0] == undefined)) || jQuery.nodeName(elem, \"form\"))) || elem.options))) {\n                            ret.push(elem);\n                        }\n                         else {\n                            ret = jQuery.merge(ret, elem);\n                        }\n                    ;\n                    ;\n                    });\n                    return ret;\n                },\n                attr: function(elem, JSBNG__name, value) {\n                    if (((((!elem || ((elem.nodeType == 3)))) || ((elem.nodeType == 8))))) {\n                        return undefined;\n                    }\n                ;\n                ;\n                    var notxml = !jQuery.isXMLDoc(elem), set = ((value !== undefined)), msie = jQuery.browser.msie;\n                    JSBNG__name = ((((notxml && jQuery.props[JSBNG__name])) || JSBNG__name));\n                    if (elem.tagName) {\n                        var special = /href|src|style/.test(JSBNG__name);\n                        if (((((JSBNG__name == \"selected\")) && jQuery.browser.safari))) {\n                            elem.parentNode.selectedIndex;\n                        }\n                    ;\n                    ;\n                        if (((((((JSBNG__name in elem)) && notxml)) && !special))) {\n                            if (set) {\n                                if (((((((JSBNG__name == \"type\")) && jQuery.nodeName(elem, \"input\"))) && elem.parentNode))) {\n                                    throw \"type property can't be changed\";\n                                }\n                            ;\n                            ;\n                                elem[JSBNG__name] = value;\n                            }\n                        ;\n                        ;\n                            if (((jQuery.nodeName(elem, \"form\") && elem.getAttributeNode(JSBNG__name)))) {\n                                return elem.getAttributeNode(JSBNG__name).nodeValue;\n                            }\n                        ;\n                        ;\n                            return elem[JSBNG__name];\n                        }\n                    ;\n                    ;\n                        if (((((msie && notxml)) && ((JSBNG__name == \"style\"))))) {\n                            return jQuery.attr(elem.style, \"cssText\", value);\n                        }\n                    ;\n                    ;\n                        if (set) {\n                            elem.setAttribute(JSBNG__name, ((\"\" + value)));\n                        }\n                    ;\n                    ;\n                        var attr = ((((((msie && notxml)) && special)) ? elem.getAttribute(JSBNG__name, 2) : elem.getAttribute(JSBNG__name)));\n                        return ((((attr === null)) ? undefined : attr));\n                    }\n                ;\n                ;\n                    if (((msie && ((JSBNG__name == \"opacity\"))))) {\n                        if (set) {\n                            elem.zoom = 1;\n                            elem.filter = ((((elem.filter || \"\")).replace(/alpha\\([^)]*\\)/, \"\") + ((((((parseInt(value) + \"\")) == \"NaN\")) ? \"\" : ((((\"alpha(opacity=\" + ((value * 100)))) + \")\"))))));\n                        }\n                    ;\n                    ;\n                        return ((((elem.filter && ((elem.filter.indexOf(\"opacity=\") >= 0)))) ? ((((parseFloat(elem.filter.match(/opacity=([^)]*)/)[1]) / 100)) + \"\")) : \"\"));\n                    }\n                ;\n                ;\n                    JSBNG__name = JSBNG__name.replace(/-([a-z])/gi, function(all, letter) {\n                        return letter.toUpperCase();\n                    });\n                    if (set) {\n                        elem[JSBNG__name] = value;\n                    }\n                ;\n                ;\n                    return elem[JSBNG__name];\n                },\n                trim: function(text) {\n                    return ((text || \"\")).replace(/^\\s+|\\s+$/g, \"\");\n                },\n                makeArray: function(array) {\n                    var ret = [];\n                    if (((array != null))) {\n                        var i = array.length;\n                        if (((((((((i == null)) || array.split)) || array.JSBNG__setInterval)) || array.call))) {\n                            ret[0] = array;\n                        }\n                         else {\n                            while (i) {\n                                ret[--i] = array[i];\n                            };\n                        ;\n                        }\n                    ;\n                    ;\n                    }\n                ;\n                ;\n                    return ret;\n                },\n                inArray: function(elem, array) {\n                    for (var i = 0, length = array.length; ((i < length)); i++) {\n                        if (((array[i] === elem))) {\n                            return i;\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                    return -1;\n                },\n                merge: function(first, second) {\n                    var i = 0, elem, pos = first.length;\n                    if (jQuery.browser.msie) {\n                        while (elem = second[i++]) {\n                            if (((elem.nodeType != 8))) {\n                                first[pos++] = elem;\n                            }\n                        ;\n                        ;\n                        };\n                    ;\n                    }\n                     else {\n                        while (elem = second[i++]) {\n                            first[pos++] = elem;\n                        };\n                    ;\n                    }\n                ;\n                ;\n                    return first;\n                },\n                unique: function(array) {\n                    var ret = [], done = {\n                    };\n                    try {\n                        for (var i = 0, length = array.length; ((i < length)); i++) {\n                            var id = jQuery.data(array[i]);\n                            if (!done[id]) {\n                                done[id] = true;\n                                ret.push(array[i]);\n                            }\n                        ;\n                        ;\n                        };\n                    ;\n                    } catch (e) {\n                        ret = array;\n                    };\n                ;\n                    return ret;\n                },\n                grep: function(elems, callback, inv) {\n                    var ret = [];\n                    for (var i = 0, length = elems.length; ((i < length)); i++) {\n                        if (((!inv != !callback(elems[i], i)))) {\n                            ret.push(elems[i]);\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                    return ret;\n                },\n                map: function(elems, callback) {\n                    var ret = [];\n                    for (var i = 0, length = elems.length; ((i < length)); i++) {\n                        var value = callback(elems[i], i);\n                        if (((value != null))) {\n                            ret[ret.length] = value;\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                    return ret.concat.apply([], ret);\n                }\n            });\n            var userAgent = JSBNG__navigator.userAgent.toLowerCase();\n            jQuery.browser = {\n                version: ((userAgent.match(/.+(?:rv|it|ra|ie)[\\/: ]([\\d.]+)/) || []))[1],\n                safari: /webkit/.test(userAgent),\n                JSBNG__opera: /opera/.test(userAgent),\n                msie: ((/msie/.test(userAgent) && !/opera/.test(userAgent))),\n                mozilla: ((/mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent)))\n            };\n            var styleFloat = ((jQuery.browser.msie ? \"styleFloat\" : \"cssFloat\"));\n            jQuery.extend({\n                boxModel: ((!jQuery.browser.msie || ((JSBNG__document.compatMode == \"CSS1Compat\")))),\n                props: {\n                    \"for\": \"htmlFor\",\n                    class: \"className\",\n                    float: styleFloat,\n                    cssFloat: styleFloat,\n                    styleFloat: styleFloat,\n                    readonly: \"readOnly\",\n                    maxlength: \"maxLength\",\n                    cellspacing: \"cellSpacing\"\n                }\n            });\n            jQuery.each({\n                parent: function(elem) {\n                    return elem.parentNode;\n                },\n                parents: function(elem) {\n                    return jQuery.dir(elem, \"parentNode\");\n                },\n                next: function(elem) {\n                    return jQuery.nth(elem, 2, \"nextSibling\");\n                },\n                prev: function(elem) {\n                    return jQuery.nth(elem, 2, \"previousSibling\");\n                },\n                nextAll: function(elem) {\n                    return jQuery.dir(elem, \"nextSibling\");\n                },\n                prevAll: function(elem) {\n                    return jQuery.dir(elem, \"previousSibling\");\n                },\n                siblings: function(elem) {\n                    return jQuery.sibling(elem.parentNode.firstChild, elem);\n                },\n                children: function(elem) {\n                    return jQuery.sibling(elem.firstChild);\n                },\n                contents: function(elem) {\n                    return ((jQuery.nodeName(elem, \"div\") ? ((elem.contentDocument || elem.contentWindow.JSBNG__document)) : jQuery.makeArray(elem.childNodes)));\n                }\n            }, function(JSBNG__name, fn) {\n                jQuery.fn[JSBNG__name] = function(selector) {\n                    var ret = jQuery.map(this, fn);\n                    if (((selector && ((typeof selector == \"string\"))))) {\n                        ret = jQuery.multiFilter(selector, ret);\n                    }\n                ;\n                ;\n                    return this.pushStack(jQuery.unique(ret));\n                };\n            });\n            jQuery.each({\n                appendTo: \"append\",\n                prependTo: \"prepend\",\n                insertBefore: \"before\",\n                insertAfter: \"after\",\n                replaceAll: \"replaceWith\"\n            }, function(JSBNG__name, original) {\n                jQuery.fn[JSBNG__name] = function() {\n                    var args = arguments;\n                    return this.each(function() {\n                        for (var i = 0, length = args.length; ((i < length)); i++) {\n                            jQuery(args[i])[original](this);\n                        };\n                    ;\n                    });\n                };\n            });\n            jQuery.each({\n                removeAttr: function(JSBNG__name) {\n                    jQuery.attr(this, JSBNG__name, \"\");\n                    if (((this.nodeType == 1))) {\n                        this.removeAttribute(JSBNG__name);\n                    }\n                ;\n                ;\n                },\n                addClass: function(classNames) {\n                    jQuery.className.add(this, classNames);\n                },\n                removeClass: function(classNames) {\n                    jQuery.className.remove(this, classNames);\n                },\n                toggleClass: function(classNames) {\n                    jQuery.className[((jQuery.className.has(this, classNames) ? \"remove\" : \"add\"))](this, classNames);\n                },\n                remove: function(selector) {\n                    if (((!selector || jQuery.filter(selector, [this,]).r.length))) {\n                        jQuery(\"*\", this).add(this).each(function() {\n                            jQuery.JSBNG__event.remove(this);\n                            jQuery.removeData(this);\n                        });\n                        if (this.parentNode) {\n                            this.parentNode.removeChild(this);\n                        }\n                    ;\n                    ;\n                    }\n                ;\n                ;\n                },\n                empty: function() {\n                    jQuery(\"\\u003E*\", this).remove();\n                    while (this.firstChild) {\n                        this.removeChild(this.firstChild);\n                    };\n                ;\n                }\n            }, function(JSBNG__name, fn) {\n                jQuery.fn[JSBNG__name] = function() {\n                    return this.each(fn, arguments);\n                };\n            });\n            jQuery.each([\"Height\",\"Width\",], function(i, JSBNG__name) {\n                var type = JSBNG__name.toLowerCase();\n                jQuery.fn[type] = function(size) {\n                    return ((((this[0] == window)) ? ((((((((jQuery.browser.JSBNG__opera && JSBNG__document.body[((\"client\" + JSBNG__name))])) || ((jQuery.browser.safari && window[((\"JSBNG__inner\" + JSBNG__name))])))) || ((((JSBNG__document.compatMode == \"CSS1Compat\")) && JSBNG__document.documentElement[((\"client\" + JSBNG__name))])))) || JSBNG__document.body[((\"client\" + JSBNG__name))])) : ((((this[0] == JSBNG__document)) ? Math.max(Math.max(JSBNG__document.body[((\"JSBNG__scroll\" + JSBNG__name))], JSBNG__document.documentElement[((\"JSBNG__scroll\" + JSBNG__name))]), Math.max(JSBNG__document.body[((\"offset\" + JSBNG__name))], JSBNG__document.documentElement[((\"offset\" + JSBNG__name))])) : ((((size == undefined)) ? ((this.length ? jQuery.css(this[0], type) : null)) : this.css(type, ((((size.constructor == String)) ? size : ((size + \"px\")))))))))));\n                };\n            });\n            function num(elem, prop) {\n                return ((((elem[0] && parseInt(jQuery.curCSS(elem[0], prop, true), 10))) || 0));\n            };\n        ;\n            var chars = ((((jQuery.browser.safari && ((parseInt(jQuery.browser.version) < 417)))) ? \"(?:[\\\\w*_-]|\\\\\\\\.)\" : \"(?:[\\\\w\\u0128-\\uffff*_-]|\\\\\\\\.)\")), quickChild = new RegExp(((((\"^\\u003E\\\\s*(\" + chars)) + \"+)\"))), quickID = new RegExp(((((((((\"^(\" + chars)) + \"+)(#)(\")) + chars)) + \"+)\"))), quickClass = new RegExp(((((\"^([#.]?)(\" + chars)) + \"*)\")));\n            jQuery.extend({\n                expr: {\n                    \"\": function(a, i, m) {\n                        return ((((m[2] == \"*\")) || jQuery.nodeName(a, m[2])));\n                    },\n                    \"#\": function(a, i, m) {\n                        return ((a.getAttribute(\"id\") == m[2]));\n                    },\n                    \":\": {\n                        lt: function(a, i, m) {\n                            return ((i < ((m[3] - 0))));\n                        },\n                        gt: function(a, i, m) {\n                            return ((i > ((m[3] - 0))));\n                        },\n                        nth: function(a, i, m) {\n                            return ((((m[3] - 0)) == i));\n                        },\n                        eq: function(a, i, m) {\n                            return ((((m[3] - 0)) == i));\n                        },\n                        first: function(a, i) {\n                            return ((i == 0));\n                        },\n                        last: function(a, i, m, r) {\n                            return ((i == ((r.length - 1))));\n                        },\n                        even: function(a, i) {\n                            return ((((i % 2)) == 0));\n                        },\n                        odd: function(a, i) {\n                            return ((i % 2));\n                        },\n                        \"first-child\": function(a) {\n                            return ((a.parentNode.getElementsByTagName(\"*\")[0] == a));\n                        },\n                        \"last-child\": function(a) {\n                            return ((jQuery.nth(a.parentNode.lastChild, 1, \"previousSibling\") == a));\n                        },\n                        \"only-child\": function(a) {\n                            return !jQuery.nth(a.parentNode.lastChild, 2, \"previousSibling\");\n                        },\n                        parent: function(a) {\n                            return a.firstChild;\n                        },\n                        empty: function(a) {\n                            return !a.firstChild;\n                        },\n                        contains: function(a, i, m) {\n                            return ((((((((a.textContent || a.innerText)) || jQuery(a).text())) || \"\")).indexOf(m[3]) >= 0));\n                        },\n                        visible: function(a) {\n                            return ((((((\"hidden\" != a.type)) && ((jQuery.css(a, \"display\") != \"none\")))) && ((jQuery.css(a, \"visibility\") != \"hidden\"))));\n                        },\n                        hidden: function(a) {\n                            return ((((((\"hidden\" == a.type)) || ((jQuery.css(a, \"display\") == \"none\")))) || ((jQuery.css(a, \"visibility\") == \"hidden\"))));\n                        },\n                        enabled: function(a) {\n                            return !a.disabled;\n                        },\n                        disabled: function(a) {\n                            return a.disabled;\n                        },\n                        checked: function(a) {\n                            return a.checked;\n                        },\n                        selected: function(a) {\n                            return ((a.selected || jQuery.attr(a, \"selected\")));\n                        },\n                        text: function(a) {\n                            return ((\"text\" == a.type));\n                        },\n                        radio: function(a) {\n                            return ((\"radio\" == a.type));\n                        },\n                        checkbox: function(a) {\n                            return ((\"checkbox\" == a.type));\n                        },\n                        file: function(a) {\n                            return ((\"file\" == a.type));\n                        },\n                        password: function(a) {\n                            return ((\"password\" == a.type));\n                        },\n                        submit: function(a) {\n                            return ((\"submit\" == a.type));\n                        },\n                        image: function(a) {\n                            return ((\"image\" == a.type));\n                        },\n                        reset: function(a) {\n                            return ((\"reset\" == a.type));\n                        },\n                        button: function(a) {\n                            return ((((\"button\" == a.type)) || jQuery.nodeName(a, \"button\")));\n                        },\n                        input: function(a) {\n                            return /input|select|textarea|button/i.test(a.nodeName);\n                        },\n                        has: function(a, i, m) {\n                            return jQuery.JSBNG__find(m[3], a).length;\n                        },\n                        header: function(a) {\n                            return /h\\d/i.test(a.nodeName);\n                        },\n                        animated: function(a) {\n                            return jQuery.grep(jQuery.timers, function(fn) {\n                                return ((a == fn.elem));\n                            }).length;\n                        }\n                    }\n                },\n                parse: [/^(\\[) *@?([\\w-]+) *([!*$^~=]*) *('?\"?)(.*?)\\4 *\\]/,/^(:)([\\w-]+)\\(\"?'?(.*?(\\(.*?\\))?[^(]*?)\"?'?\\)/,new RegExp(((((\"^([:.#]*)(\" + chars)) + \"+)\"))),],\n                multiFilter: function(expr, elems, not) {\n                    var old, cur = [];\n                    while (((expr && ((expr != old))))) {\n                        old = expr;\n                        var f = jQuery.filter(expr, elems, not);\n                        expr = f.t.replace(/^\\s*,\\s*/, \"\");\n                        cur = ((not ? elems = f.r : jQuery.merge(cur, f.r)));\n                    };\n                ;\n                    return cur;\n                },\n                JSBNG__find: function(t, context) {\n                    if (((typeof t != \"string\"))) {\n                        return [t,];\n                    }\n                ;\n                ;\n                    if (((((context && ((context.nodeType != 1)))) && ((context.nodeType != 9))))) {\n                        return [];\n                    }\n                ;\n                ;\n                    context = ((context || JSBNG__document));\n                    var ret = [context,], done = [], last, nodeName;\n                    while (((t && ((last != t))))) {\n                        var r = [];\n                        last = t;\n                        t = jQuery.trim(t);\n                        var foundToken = false, re = quickChild, m = re.exec(t);\n                        if (m) {\n                            nodeName = m[1].toUpperCase();\n                            for (var i = 0; ret[i]; i++) {\n                                for (var c = ret[i].firstChild; c; c = c.nextSibling) {\n                                    if (((((c.nodeType == 1)) && ((((nodeName == \"*\")) || ((c.nodeName.toUpperCase() == nodeName))))))) {\n                                        r.push(c);\n                                    }\n                                ;\n                                ;\n                                };\n                            ;\n                            };\n                        ;\n                            ret = r;\n                            t = t.replace(re, \"\");\n                            if (((t.indexOf(\" \") == 0))) {\n                                continue;\n                            }\n                        ;\n                        ;\n                            foundToken = true;\n                        }\n                         else {\n                            re = /^([>+~])\\s*(\\w*)/i;\n                            if ((((m = re.exec(t)) != null))) {\n                                r = [];\n                                var merge = {\n                                };\n                                nodeName = m[2].toUpperCase();\n                                m = m[1];\n                                for (var j = 0, rl = ret.length; ((j < rl)); j++) {\n                                    var n = ((((((m == \"~\")) || ((m == \"+\")))) ? ret[j].nextSibling : ret[j].firstChild));\n                                    for (; n; n = n.nextSibling) {\n                                        if (((n.nodeType == 1))) {\n                                            var id = jQuery.data(n);\n                                            if (((((m == \"~\")) && merge[id]))) {\n                                                break;\n                                            }\n                                        ;\n                                        ;\n                                            if (((!nodeName || ((n.nodeName.toUpperCase() == nodeName))))) {\n                                                if (((m == \"~\"))) {\n                                                    merge[id] = true;\n                                                }\n                                            ;\n                                            ;\n                                                r.push(n);\n                                            }\n                                        ;\n                                        ;\n                                            if (((m == \"+\"))) {\n                                                break;\n                                            }\n                                        ;\n                                        ;\n                                        }\n                                    ;\n                                    ;\n                                    };\n                                ;\n                                };\n                            ;\n                                ret = r;\n                                t = jQuery.trim(t.replace(re, \"\"));\n                                foundToken = true;\n                            }\n                        ;\n                        ;\n                        }\n                    ;\n                    ;\n                        if (((t && !foundToken))) {\n                            if (!t.indexOf(\",\")) {\n                                if (((context == ret[0]))) {\n                                    ret.shift();\n                                }\n                            ;\n                            ;\n                                done = jQuery.merge(done, ret);\n                                r = ret = [context,];\n                                t = ((\" \" + t.substr(1, t.length)));\n                            }\n                             else {\n                                var re2 = quickID;\n                                var m = re2.exec(t);\n                                if (m) {\n                                    m = [0,m[2],m[3],m[1],];\n                                }\n                                 else {\n                                    re2 = quickClass;\n                                    m = re2.exec(t);\n                                }\n                            ;\n                            ;\n                                m[2] = m[2].replace(/\\\\/g, \"\");\n                                var elem = ret[((ret.length - 1))];\n                                if (((((((((m[1] == \"#\")) && elem)) && elem.getElementById)) && !jQuery.isXMLDoc(elem)))) {\n                                    var oid = elem.getElementById(m[2]);\n                                    if (((((((((jQuery.browser.msie || jQuery.browser.JSBNG__opera)) && oid)) && ((typeof oid.id == \"string\")))) && ((oid.id != m[2]))))) {\n                                        oid = jQuery(((((\"[@id=\\\"\" + m[2])) + \"\\\"]\")), elem)[0];\n                                    }\n                                ;\n                                ;\n                                    ret = r = ((((oid && ((!m[3] || jQuery.nodeName(oid, m[3]))))) ? [oid,] : []));\n                                }\n                                 else {\n                                    for (var i = 0; ret[i]; i++) {\n                                        var tag = ((((((m[1] == \"#\")) && m[3])) ? m[3] : ((((((m[1] != \"\")) || ((m[0] == \"\")))) ? \"*\" : m[2]))));\n                                        if (((((tag == \"*\")) && ((ret[i].nodeName.toLowerCase() == \"object\"))))) {\n                                            tag = \"param\";\n                                        }\n                                    ;\n                                    ;\n                                        r = jQuery.merge(r, ret[i].getElementsByTagName(tag));\n                                    };\n                                ;\n                                    if (((m[1] == \".\"))) {\n                                        r = jQuery.classFilter(r, m[2]);\n                                    }\n                                ;\n                                ;\n                                    if (((m[1] == \"#\"))) {\n                                        var tmp = [];\n                                        for (var i = 0; r[i]; i++) {\n                                            if (((r[i].getAttribute(\"id\") == m[2]))) {\n                                                tmp = [r[i],];\n                                                break;\n                                            }\n                                        ;\n                                        ;\n                                        };\n                                    ;\n                                        r = tmp;\n                                    }\n                                ;\n                                ;\n                                    ret = r;\n                                }\n                            ;\n                            ;\n                                t = t.replace(re2, \"\");\n                            }\n                        ;\n                        ;\n                        }\n                    ;\n                    ;\n                        if (t) {\n                            var val = jQuery.filter(t, r);\n                            ret = r = val.r;\n                            t = jQuery.trim(val.t);\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                    if (t) {\n                        ret = [];\n                    }\n                ;\n                ;\n                    if (((ret && ((context == ret[0]))))) {\n                        ret.shift();\n                    }\n                ;\n                ;\n                    done = jQuery.merge(done, ret);\n                    return done;\n                },\n                classFilter: function(r, m, not) {\n                    m = ((((\" \" + m)) + \" \"));\n                    var tmp = [];\n                    for (var i = 0; r[i]; i++) {\n                        var pass = ((((((\" \" + r[i].className)) + \" \")).indexOf(m) >= 0));\n                        if (((((!not && pass)) || ((not && !pass))))) {\n                            tmp.push(r[i]);\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                    return tmp;\n                },\n                filter: function(t, r, not) {\n                    var last;\n                    while (((t && ((t != last))))) {\n                        last = t;\n                        var p = jQuery.parse, m;\n                        for (var i = 0; p[i]; i++) {\n                            m = p[i].exec(t);\n                            if (m) {\n                                t = t.substring(m[0].length);\n                                m[2] = m[2].replace(/\\\\/g, \"\");\n                                break;\n                            }\n                        ;\n                        ;\n                        };\n                    ;\n                        if (!m) {\n                            break;\n                        }\n                    ;\n                    ;\n                        if (((((m[1] == \":\")) && ((m[2] == \"not\"))))) {\n                            r = ((isSimple.test(m[3]) ? jQuery.filter(m[3], r, true).r : jQuery(r).not(m[3])));\n                        }\n                         else {\n                            if (((m[1] == \".\"))) {\n                                r = jQuery.classFilter(r, m[2], not);\n                            }\n                             else {\n                                if (((m[1] == \"[\"))) {\n                                    var tmp = [], type = m[3];\n                                    for (var i = 0, rl = r.length; ((i < rl)); i++) {\n                                        var a = r[i], z = a[((jQuery.props[m[2]] || m[2]))];\n                                        if (((((z == null)) || /href|src|selected/.test(m[2])))) {\n                                            z = ((jQuery.attr(a, m[2]) || \"\"));\n                                        }\n                                    ;\n                                    ;\n                                        if (((((((((((((((((type == \"\")) && !!z)) || ((((type == \"=\")) && ((z == m[5])))))) || ((((type == \"!=\")) && ((z != m[5])))))) || ((((((type == \"^=\")) && z)) && !z.indexOf(m[5]))))) || ((((type == \"$=\")) && ((z.substr(((z.length - m[5].length))) == m[5])))))) || ((((((type == \"*=\")) || ((type == \"~=\")))) && ((z.indexOf(m[5]) >= 0)))))) ^ not))) {\n                                            tmp.push(a);\n                                        }\n                                    ;\n                                    ;\n                                    };\n                                ;\n                                    r = tmp;\n                                }\n                                 else {\n                                    if (((((m[1] == \":\")) && ((m[2] == \"nth-child\"))))) {\n                                        var merge = {\n                                        }, tmp = [], test = /(-?)(\\d*)n((?:\\+|-)?\\d*)/.exec(((((((((((m[3] == \"even\")) && \"2n\")) || ((((m[3] == \"odd\")) && \"2n+1\")))) || ((!/\\D/.test(m[3]) && ((\"0n+\" + m[3])))))) || m[3]))), first = ((((test[1] + ((test[2] || 1)))) - 0)), last = ((test[3] - 0));\n                                        for (var i = 0, rl = r.length; ((i < rl)); i++) {\n                                            var node = r[i], parentNode = node.parentNode, id = jQuery.data(parentNode);\n                                            if (!merge[id]) {\n                                                var c = 1;\n                                                for (var n = parentNode.firstChild; n; n = n.nextSibling) {\n                                                    if (((n.nodeType == 1))) {\n                                                        n.nodeIndex = c++;\n                                                    }\n                                                ;\n                                                ;\n                                                };\n                                            ;\n                                                merge[id] = true;\n                                            }\n                                        ;\n                                        ;\n                                            var add = false;\n                                            if (((first == 0))) {\n                                                if (((node.nodeIndex == last))) {\n                                                    add = true;\n                                                }\n                                            ;\n                                            ;\n                                            }\n                                             else {\n                                                if (((((((((node.nodeIndex - last)) % first)) == 0)) && ((((((node.nodeIndex - last)) / first)) >= 0))))) {\n                                                    add = true;\n                                                }\n                                            ;\n                                            ;\n                                            }\n                                        ;\n                                        ;\n                                            if (((add ^ not))) {\n                                                tmp.push(node);\n                                            }\n                                        ;\n                                        ;\n                                        };\n                                    ;\n                                        r = tmp;\n                                    }\n                                     else {\n                                        var fn = jQuery.expr[m[1]];\n                                        if (((typeof fn == \"object\"))) {\n                                            fn = fn[m[2]];\n                                        }\n                                    ;\n                                    ;\n                                        if (((typeof fn == \"string\"))) {\n                                            fn = eval(((((\"false||function(a,i){return \" + fn)) + \";}\")));\n                                        }\n                                    ;\n                                    ;\n                                        r = jQuery.grep(r, function(elem, i) {\n                                            return fn(elem, i, m, r);\n                                        }, not);\n                                    }\n                                ;\n                                ;\n                                }\n                            ;\n                            ;\n                            }\n                        ;\n                        ;\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                    return {\n                        r: r,\n                        t: t\n                    };\n                },\n                dir: function(elem, dir) {\n                    var matched = [], cur = elem[dir];\n                    while (((cur && ((cur != JSBNG__document))))) {\n                        if (((cur.nodeType == 1))) {\n                            matched.push(cur);\n                        }\n                    ;\n                    ;\n                        cur = cur[dir];\n                    };\n                ;\n                    return matched;\n                },\n                nth: function(cur, result, dir, elem) {\n                    result = ((result || 1));\n                    var num = 0;\n                    for (; cur; cur = cur[dir]) {\n                        if (((((cur.nodeType == 1)) && ((++num == result))))) {\n                            break;\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                    return cur;\n                },\n                sibling: function(n, elem) {\n                    var r = [];\n                    for (; n; n = n.nextSibling) {\n                        if (((((n.nodeType == 1)) && ((n != elem))))) {\n                            r.push(n);\n                        }\n                    ;\n                    ;\n                    };\n                ;\n                    return r;\n                }\n            });\n            jQuery.JSBNG__event = {\n                add: function(elem, types, handler, data) {\n                    if (((((elem.nodeType == 3)) || ((elem.nodeType == 8))))) {\n                        return;\n                    }\n                ;\n                ;\n                    if (((jQuery.browser.msie && elem.JSBNG__setInterval))) {\n                        elem = window;\n                    }\n                ;\n                ;\n                    if (!handler.guid) {\n                        handler.guid = this.guid++;\n                    }\n                ;\n                ;\n                    if (((data != undefined))) {\n                        var fn = handler;\n                        handler = this.proxy(fn, function() {\n                            return fn.apply(this, arguments);\n                        });\n                        handler.data = data;\n                    }\n                ;\n                ;\n                    var events = ((jQuery.data(elem, \"events\") || jQuery.data(elem, \"events\", {\n                    }))), handle = ((jQuery.data(elem, \"handle\") || jQuery.data(elem, \"handle\", function() {\n                        if (((((typeof jQuery != \"undefined\")) && !jQuery.JSBNG__event.triggered))) {\n                            return jQuery.JSBNG__event.handle.apply(arguments.callee.elem, arguments);\n                        }\n                    ;\n                    ;\n                    })));\n                    handle.elem = elem;\n                    jQuery.each(types.split(/\\s+/), function(index, type) {\n                        var parts = type.split(\".\");\n                        type = parts[0];\n                        handler.type = parts[1];\n                        var handlers = events[type];\n                        if (!handlers) {\n                            handlers = events[type] = {\n                            };\n                            if (((!jQuery.JSBNG__event.special[type] || ((jQuery.JSBNG__event.special[type].setup.call(elem) === false))))) {\n                                if (elem.JSBNG__addEventListener) {\n                                    elem.JSBNG__addEventListener(type, handle, false);\n                                }\n                                 else {\n                                    if (elem.JSBNG__attachEvent) {\n                                        elem.JSBNG__attachEvent(((\"JSBNG__on\" + type)), handle);\n                                    }\n                                ;\n                                ;\n                                }\n                            ;\n                            ;\n                            }\n                        ;\n                        ;\n                        }\n                    ;\n                    ;\n                        handlers[handler.guid] = handler;\n                        jQuery.JSBNG__event.global[type] = true;\n                    });\n                    elem = null;\n                },\n                guid: 1,\n                global: {\n                },\n                remove: function(elem, types, handler) {\n                    if (((((elem.nodeType == 3)) || ((elem.nodeType == 8))))) {\n                        return;\n                    }\n                ;\n                ;\n                    var events = jQuery.data(elem, \"events\"), ret, index;\n                    if (events) {\n                        if (((((types == undefined)) || ((((typeof types == \"string\")) && ((types.charAt(0) == \".\"))))))) {\n                            {\n                                var fin17keys = ((window.top.JSBNG_Replay.forInKeys)((events))), fin17i = (0);\n                                var type;\n                                for (; (fin17i < fin17keys.length); (fin17i++)) {\n                                    ((type) = (fin17keys[fin17i]));\n                                    {\n                                        this.remove(elem, ((type + ((types || \"\")))));\n                                    };\n                                };\n                            };\n                        ;\n                        }\n                         else {\n                            if (types.type) {\n                                handler = types.handler;\n                                types = types.type;\n                            }\n                        ;\n                        ;\n                            jQuery.each(types.split(/\\s+/), function(index, type) {\n                                var parts = type.split(\".\");\n                                type = parts[0];\n                                if (events[type]) {\n                                    if (handler) {\n                                        delete events[type][handler.guid];\n                                    }\n                                     else {\n                                        {\n                                            var fin18keys = ((window.top.JSBNG_Replay.forInKeys)((events[type]))), fin18i = (0);\n                                            (0);\n                                            for (; (fin18i < fin18keys.length); (fin18i++)) {\n                                                ((handler) = (fin18keys[fin18i]));\n                                                {\n                                                    if (((!parts[1] || ((events[type][handler].type == parts[1]))))) {\n                                                        delete events[type][handler];\n                                                    }\n                                                ;\n                                                ;\n                                                };\n                                            };\n                                        };\n                                    ;\n                                    }\n                                ;\n                                ;\n                                    {\n                                        var fin19keys = ((window.top.JSBNG_Replay.forInKeys)((events[type]))), fin19i = (0);\n                                        (0);\n                                        for (; (fin19i < fin19keys.length); (fin19i++)) {\n                                            ((ret) = (fin19keys[fin19i]));\n                                            {\n                                                break;\n                                            };\n                                        };\n                                    };\n                                ;\n                                    if (!ret) {\n                                        if (((!jQuery.JSBNG__event.special[type] || ((jQuery.JSBNG__event.special[type].teardown.call(elem) === false))))) {\n                                            if (elem.JSBNG__removeEventListener) {\n                                                elem.JSBNG__removeEventListener(type, jQuery.data(elem, \"handle\"), false);\n                                            }\n                                             else {\n                                                if (elem.JSBNG__detachEvent) {\n                                                    elem.JSBNG__detachEvent(((\"JSBNG__on\" + type)), jQuery.data(elem, \"handle\"));\n                                                }\n                                            ;\n                                            ;\n                                            }\n                                        ;\n                                        ;\n                                        }\n                                    ;\n                                    ;\n                                        ret = null;\n                                        delete events[type];\n                                    }\n                                ;\n                                ;\n                                }\n                            ;\n                            ;\n                            });\n                        }\n                    ;\n                    ;\n                        {\n                            var fin20keys = ((window.top.JSBNG_Replay.forInKeys)((events))), fin20i = (0);\n                            (0);\n                            for (; (fin20i < fin20keys.length); (fin20i++)) {\n                                ((ret) = (fin20keys[fin20i]));\n                                {\n                                    break;\n                                };\n                            };\n                        };\n                    ;\n                        if (!ret) {\n                            var handle = jQuery.data(elem, \"handle\");\n                            if (handle) {\n                                handle.elem = null;\n                            }\n                        ;\n                        ;\n                            jQuery.removeData(elem, \"events\");\n                            jQuery.removeData(elem, \"handle\");\n                        }\n                    ;\n                    ;\n                    }\n                ;\n                ;\n                },\n                trigger: function(type, data, elem, donative, extra) {\n                    data = jQuery.makeArray(data);\n                    if (((type.indexOf(\"!\") >= 0))) {\n                        type = type.slice(0, -1);\n                        var exclusive = true;\n                    }\n                ;\n                ;\n                    if (!elem) {\n                        if (this.global[type]) {\n                            jQuery(\"*\").add([window,JSBNG__document,]).trigger(type, data);\n                        }\n                    ;\n                    ;\n                    }\n                     else {\n                        if (((((elem.nodeType == 3)) || ((elem.nodeType == 8))))) {\n                            return undefined;\n                        }\n                    ;\n                    ;\n                        var val, ret, fn = jQuery.isFunction(((elem[type] || null))), JSBNG__event = ((!data[0] || !data[0].preventDefault));\n                        if (JSBNG__event) {\n                            data.unshift({\n                                type: type,\n                                target: elem,\n                                preventDefault: function() {\n                                \n                                },\n                                stopPropagation: function() {\n                                \n                                },\n                                timeStamp: now()\n                            });\n                            data[0][expando] = true;\n                        }\n                    ;\n                    ;\n                        data[0].type = type;\n                        if (exclusive) {\n                            data[0].exclusive = true;\n                        }\n                    ;\n                    ;\n                        var handle = jQuery.data(elem, \"handle\");\n                        if (handle) {\n                            val = handle.apply(elem, data);\n                        }\n                    ;\n                    ;\n                        if (((((((!fn || ((jQuery.nodeName(elem, \"a\") && ((type == \"click\")))))) && elem[((\"JSBNG__on\" + type))])) && ((elem[((\"JSBNG__on\" + type))].apply(elem, data) === false))))) {\n                            val = false;\n                        }\n                    ;\n                    ;\n                        if (JSBNG__event) {\n                            data.shift();\n                        }\n                    ;\n                    ;\n                        if (((extra && jQuery.isFunction(extra)))) {\n                            ret = extra.apply(elem, ((((val == null)) ? data : data.concat(val))));\n                            if (((ret !== undefined))) {\n                                val = ret;\n                            }\n                        ;\n                        ;\n                        }\n                    ;\n                    ;\n                        if (((((((fn && ((donative !== false)))) && ((val !== false)))) && !((jQuery.nodeName(elem, \"a\") && ((type == \"click\"))))))) {\n                            this.triggered = true;\n                            try {\n                                elem[type]();\n                            } catch (e) {\n                            \n                            };\n                        ;\n                        }\n                    ;\n                    ;\n                        this.triggered = false;\n                    }\n                ;\n                ;\n                    return val;\n                },\n                handle: function(JSBNG__event) {\n                    var val, ret, namespace, all, handlers;\n                    JSBNG__event = arguments[0] = jQuery.JSBNG__event.fix(((JSBNG__event || window.JSBNG__event)));\n                    namespace = JSBNG__event.type.split(\".\");\n                    JSBNG__event.type = namespace[0];\n                    namespace = namespace[1];\n                    all = ((!namespace && !JSBNG__event.exclusive));\n                    handlers = ((jQuery.data(this, \"events\") || {\n                    }))[JSBNG__event.type];\n                    {\n                        var fin21keys = ((window.top.JSBNG_Replay.forInKeys)((handlers))), fin21i = (0);\n                        var j;\n                        for (; (fin21i < fin21keys.length); (fin21i++)) {\n                            ((j) = (fin21keys[fin21i]));\n                            {\n                                var handler = handlers[j];\n                                if (((all || ((handler.type == namespace))))) {\n                                    JSBNG__event.handler = handler;\n                                    JSBNG__event.data = handler.data;\n                                    ret = handler.apply(this, arguments);\n                                    if (((val !== false))) {\n                                        val = ret;\n                                    }\n                                ;\n                                ;\n                                    if (((ret === false))) {\n                                        JSBNG__event.preventDefault();\n                                        JSBNG__event.stopPropagation();\n                                    }\n                                ;\n                                ;\n                                }\n                            ;\n                            ;\n                            };\n                        };\n                    };\n                ;\n                    return val;\n                },\n                fix: function(JSBNG__event) {\n                    if (((JSBNG__event[expando] == true))) {\n                        return JSBNG__event;\n                    }\n                ;\n                ;\n                    var originalEvent = JSBNG__event;\n                    JSBNG__event = {\n                        originalEvent: originalEvent\n                    };\n                    var props = \"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which\".split(\" \");\n                    for (var i = props.length; i; i--) {\n                        JSBNG__event[props[i]] = originalEvent[props[i]];\n                    };\n                ;\n                    JSBNG__event[expando] = true;\n                    JSBNG__event.preventDefault = function() {\n                        if (originalEvent.preventDefault) {\n                            originalEvent.preventDefault();\n                        }\n                    ;\n                    ;\n                        originalEvent.returnValue = false;\n                    };\n                    JSBNG__event.stopPropagation = function() {\n                        if (originalEvent.stopPropagation) {\n                            originalEvent.stopPropagation();\n                        }\n                    ;\n                    ;\n                        originalEvent.cancelBubble = true;\n                    };\n                    JSBNG__event.timeStamp = ((JSBNG__event.timeStamp || now()));\n                    if (!JSBNG__event.target) {\n                        JSBNG__event.target = ((JSBNG__event.srcElement || JSBNG__document));\n                    }\n                ;\n                ;\n                    if (((JSBNG__event.target.nodeType == 3))) {\n                        JSBNG__event.target = JSBNG__event.target.parentNode;\n                    }\n                ;\n                ;\n                    if (((!JSBNG__event.relatedTarget && JSBNG__event.fromElement))) {\n                        JSBNG__event.relatedTarget = ((((JSBNG__event.fromElement == JSBNG__event.target)) ? JSBNG__event.toElement : JSBNG__event.fromElement));\n                    }\n                ;\n                ;\n                    if (((((JSBNG__event.pageX == null)) && ((JSBNG__event.clientX != null))))) {\n                        var doc = JSBNG__document.documentElement, body = JSBNG__document.body;\n                        JSBNG__event.pageX = ((((JSBNG__event.clientX + ((((((doc && doc.scrollLeft)) || ((body && body.scrollLeft)))) || 0)))) - ((doc.clientLeft || 0))));\n                        JSBNG__event.pageY = ((((JSBNG__event.clientY + ((((((doc && doc.scrollTop)) || ((body && body.scrollTop)))) || 0)))) - ((doc.clientTop || 0))));\n                    }\n                ;\n                ;\n                    if (((!JSBNG__event.which && ((((JSBNG__event.charCode || ((JSBNG__event.charCode === 0)))) ? JSBNG__event.charCode : JSBNG__event.keyCode))))) {\n                        JSBNG__event.which = ((JSBNG__event.charCode || JSBNG__event.keyCode));\n                    }\n                ;\n                ;\n                    if (((!JSBNG__event.metaKey && JSBNG__event.ctrlKey))) {\n                        JSBNG__event.metaKey = JSBNG__event.ctrlKey;\n                    }\n                ;\n                ;\n                    if (((!JSBNG__event.which && JSBNG__event.button))) {\n                        JSBNG__event.which = ((((JSBNG__event.button & 1)) ? 1 : ((((JSBNG__event.button & 2)) ? 3 : ((((JSBNG__event.button & 4)) ? 2 : 0))))));\n                    }\n                ;\n                ;\n                    return JSBNG__event;\n                },\n                proxy: function(fn, proxy) {\n                    proxy.guid = fn.guid = ((((fn.guid || proxy.guid)) || this.guid++));\n                    return proxy;\n                },\n                special: {\n                    ready: {\n                        setup: function() {\n                            bindReady();\n                            return;\n                        },\n                        teardown: function() {\n                            return;\n                        }\n                    },\n                    mouseenter: {\n                        setup: function() {\n                            if (jQuery.browser.msie) {\n                                return false;\n                            }\n                        ;\n                        ;\n                            jQuery(this).bind(\"mouseover\", jQuery.JSBNG__event.special.mouseenter.handler);\n                            return true;\n                        },\n                        teardown: function() {\n                            if (jQuery.browser.msie) {\n                                return false;\n                            }\n                        ;\n                        ;\n                            jQuery(this).unbind(\"mouseover\", jQuery.JSBNG__event.special.mouseenter.handler);\n                            return true;\n                        },\n                        handler: function(JSBNG__event) {\n                            if (withinElement(JSBNG__event, this)) {\n                                return true;\n                            }\n                        ;\n                        ;\n                            JSBNG__event.type = \"mouseenter\";\n                            return jQuery.JSBNG__event.handle.apply(this, arguments);\n                        }\n                    },\n                    mouseleave: {\n                        setup: function() {\n                            if (jQuery.browser.msie) {\n                                return false;\n                            }\n                        ;\n                        ;\n                            jQuery(this).bind(\"mouseout\", jQuery.JSBNG__event.special.mouseleave.handler);\n                            return true;\n                        },\n                        teardown: function() {\n                            if (jQuery.browser.msie) {\n                                return false;\n                            }\n                        ;\n                        ;\n                            jQuery(this).unbind(\"mouseout\", jQuery.JSBNG__event.special.mouseleave.handler);\n                            return true;\n                        },\n                        handler: function(JSBNG__event) {\n                            if (withinElement(JSBNG__event, this)) {\n                                return true;\n                            }\n                        ;\n                        ;\n                            JSBNG__event.type = \"mouseleave\";\n                            return jQuery.JSBNG__event.handle.apply(this, arguments);\n                        }\n                    }\n                }\n            };\n            jQuery.fn.extend({\n                bind: function(type, data, fn) {\n                    return ((((type == \"unload\")) ? this.one(type, data, fn) : this.each(function() {\n                        jQuery.JSBNG__event.add(this, type, ((fn || data)), ((fn && data)));\n                    })));\n                },\n                one: function(type, data, fn) {\n                    var one = jQuery.JSBNG__event.proxy(((fn || data)), function(JSBNG__event) {\n                        jQuery(this).unbind(JSBNG__event, one);\n                        return ((fn || data)).apply(this, arguments);\n                    });\n                    return this.each(function() {\n                        jQuery.JSBNG__event.add(this, type, one, ((fn && data)));\n                    });\n                },\n                unbind: function(type, fn) {\n                    return this.each(function() {\n                        jQuery.JSBNG__event.remove(this, type, fn);\n                    });\n                },\n                trigger: function(type, data, fn) {\n                    return this.each(function() {\n                        jQuery.JSBNG__event.trigger(type, data, this, true, fn);\n                    });\n                },\n                triggerHandler: function(type, data, fn) {\n                    return ((this[0] && jQuery.JSBNG__event.trigger(type, data, this[0], false, fn)));\n                },\n                toggle: function(fn) {\n                    var args = arguments, i = 1;\n                    while (((i < args.length))) {\n                        jQuery.JSBNG__event.proxy(fn, args[i++]);\n                    };\n                ;\n                    return this.click(jQuery.JSBNG__event.proxy(fn, function(JSBNG__event) {\n                        this.lastToggle = ((((this.lastToggle || 0)) % i));\n                        JSBNG__event.preventDefault();\n                        return ((args[this.lastToggle++].apply(this, arguments) || false));\n                    }));\n                },\n                hover: function(fnOver, fnOut) {\n                    return this.bind(\"mouseenter\", fnOver).bind(\"mouseleave\", fnOut);\n                },\n                ready: function(fn) {\n                    bindReady();\n                    if (jQuery.isReady) {\n                        fn.call(JSBNG__document, jQuery);\n                    }\n                     else {\n                        jQuery.readyList.push(function() {\n                            return fn.call(this, jQuery);\n                        });\n                    }\n                ;\n                ;\n                    return this;\n                }\n            });\n            jQuery.extend({\n                isReady: false,\n                readyList: [],\n                ready: function() {\n                    if (!jQuery.isReady) {\n                        jQuery.isReady = true;\n                        if (jQuery.readyList) {\n                            jQuery.each(jQuery.readyList, function() {\n                                this.call(JSBNG__document);\n                            });\n                            jQuery.readyList = null;\n                        }\n                    ;\n                    ;\n                        jQuery(JSBNG__document).triggerHandler(\"ready\");\n                    }\n                ;\n                ;\n                }\n            });\n            var readyBound = false;\n            function bindReady() {\n                if (readyBound) {\n                    return;\n                }\n            ;\n            ;\n                readyBound = true;\n                if (((JSBNG__document.JSBNG__addEventListener && !jQuery.browser.JSBNG__opera))) {\n                    JSBNG__document.JSBNG__addEventListener(\"DOMContentLoaded\", jQuery.ready, false);\n                }\n            ;\n            ;\n                if (((jQuery.browser.msie && ((window == JSBNG__top))))) {\n                    (function() {\n                        if (jQuery.isReady) {\n                            return;\n                        }\n                    ;\n                    ;\n                        try {\n                            JSBNG__document.documentElement.doScroll(\"left\");\n                        } catch (error) {\n                            JSBNG__setTimeout(arguments.callee, jQuery126PatchDelay);\n                            return;\n                        };\n                    ;\n                        jQuery.ready();\n                    })();\n                }\n            ;\n            ;\n                if (jQuery.browser.JSBNG__opera) {\n                    JSBNG__document.JSBNG__addEventListener(\"DOMContentLoaded\", function() {\n                        if (jQuery.isReady) {\n                            return;\n                        }\n                    ;\n                    ;\n                        for (var i = 0; ((i < JSBNG__document.styleSheets.length)); i++) {\n                            if (JSBNG__document.styleSheets[i].disabled) {\n                                JSBNG__setTimeout(arguments.callee, jQuery126PatchDelay);\n                                return;\n                            }\n                        ;\n                        ;\n                        };\n                    ;\n                        jQuery.ready();\n                    }, false);\n                }\n            ;\n            ;\n                if (jQuery.browser.safari) {\n                    var numStyles;\n                    (function() {\n                        if (jQuery.isReady) {\n                            return;\n                        }\n                    ;\n                    ;\n                        if (((((JSBNG__document.readyState != \"loaded\")) && ((JSBNG__document.readyState != \"complete\"))))) {\n                            JSBNG__setTimeout(arguments.callee, jQuery126PatchDelay);\n                            return;\n                        }\n                    ;\n                    ;\n                        if (((numStyles === undefined))) {\n                            numStyles = jQuery(\"style, link[rel=stylesheet]\").length;\n                        }\n                    ;\n                    ;\n                        if (((JSBNG__document.styleSheets.length != numStyles))) {\n                            JSBNG__setTimeout(arguments.callee, jQuery126PatchDelay);\n                            return;\n                        }\n                    ;\n                    ;\n                        jQuery.ready();\n                    })();\n                }\n            ;\n            ;\n                jQuery.JSBNG__event.add(window, \"load\", jQuery.ready);\n            };\n        ;\n            jQuery.each(((((\"blur,focus,load,resize,scroll,unload,click,dblclick,\" + \"mousedown,mouseup,mousemove,mouseover,mouseout,change,select,\")) + \"submit,keydown,keypress,keyup,error\")).split(\",\"), function(i, JSBNG__name) {\n                jQuery.fn[JSBNG__name] = function(fn) {\n                    return ((fn ? this.bind(JSBNG__name, fn) : this.trigger(JSBNG__name)));\n                };\n            });\n            var withinElement = function(JSBNG__event, elem) {\n                var parent = JSBNG__event.relatedTarget;\n                while (((parent && ((parent != elem))))) {\n                    try {\n                        parent = parent.parentNode;\n                    } catch (error) {\n                        parent = elem;\n                    };\n                ;\n                };\n            ;\n                return ((parent == elem));\n&nbs