keep removing MochiKit dependencies
[dygraphs.git] / dygraph-combined.js
1 /***
2
3 MochiKit.MochiKit 1.4 : PACKED VERSION
4
5 THIS FILE IS AUTOMATICALLY GENERATED. If creating patches, please
6 diff against the source tree, not this file.
7
8 See <http://mochikit.com/> for documentation, downloads, license, etc.
9
10 (c) 2005 Bob Ippolito. All rights Reserved.
11
12 ***/
13
14 if(typeof (dojo)!="undefined"){
15 dojo.provide("MochiKit.Base");
16 }
17 if(typeof (MochiKit)=="undefined"){
18 MochiKit={};
19 }
20 if(typeof (MochiKit.Base)=="undefined"){
21 MochiKit.Base={};
22 }
23 if(typeof (MochiKit.__export__)=="undefined"){
24 MochiKit.__export__=(MochiKit.__compat__||(typeof (JSAN)=="undefined"&&typeof (dojo)=="undefined"));
25 }
26 MochiKit.Base.VERSION="1.4";
27 MochiKit.Base.NAME="MochiKit.Base";
28 MochiKit.Base.update=function(_1,_2){
29 if(_1===null){
30 _1={};
31 }
32 for(var i=1;i<arguments.length;i++){
33 var o=arguments[i];
34 if(typeof (o)!="undefined"&&o!==null){
35 for(var k in o){
36 _1[k]=o[k];
37 }
38 }
39 }
40 return _1;
41 };
42 MochiKit.Base.update(MochiKit.Base,{__repr__:function(){
43 return "["+this.NAME+" "+this.VERSION+"]";
44 },toString:function(){
45 return this.__repr__();
46 },camelize:function(_6){
47 var _7=_6.split("-");
48 var cc=_7[0];
49 for(var i=1;i<_7.length;i++){
50 cc+=_7[i].charAt(0).toUpperCase()+_7[i].substring(1);
51 }
52 return cc;
53 },counter:function(n){
54 if(arguments.length===0){
55 n=1;
56 }
57 return function(){
58 return n++;
59 };
60 },clone:function(_b){
61 var me=arguments.callee;
62 if(arguments.length==1){
63 me.prototype=_b;
64 return new me();
65 }
66 },_flattenArray:function(_d,_e){
67 for(var i=0;i<_e.length;i++){
68 var o=_e[i];
69 if(o instanceof Array){
70 arguments.callee(_d,o);
71 }else{
72 _d.push(o);
73 }
74 }
75 return _d;
76 },flattenArray:function(lst){
77 return MochiKit.Base._flattenArray([],lst);
78 },flattenArguments:function(lst){
79 var res=[];
80 var m=MochiKit.Base;
81 var _15=m.extend(null,arguments);
82 while(_15.length){
83 var o=_15.shift();
84 if(o&&typeof (o)=="object"&&typeof (o.length)=="number"){
85 for(var i=o.length-1;i>=0;i--){
86 _15.unshift(o[i]);
87 }
88 }else{
89 res.push(o);
90 }
91 }
92 return res;
93 },extend:function(_18,obj,_1a){
94 if(!_1a){
95 _1a=0;
96 }
97 if(obj){
98 var l=obj.length;
99 if(typeof (l)!="number"){
100 if(typeof (MochiKit.Iter)!="undefined"){
101 obj=MochiKit.Iter.list(obj);
102 l=obj.length;
103 }else{
104 throw new TypeError("Argument not an array-like and MochiKit.Iter not present");
105 }
106 }
107 if(!_18){
108 _18=[];
109 }
110 for(var i=_1a;i<l;i++){
111 _18.push(obj[i]);
112 }
113 }
114 return _18;
115 },updatetree:function(_1d,obj){
116 if(_1d===null){
117 _1d={};
118 }
119 for(var i=1;i<arguments.length;i++){
120 var o=arguments[i];
121 if(typeof (o)!="undefined"&&o!==null){
122 for(var k in o){
123 var v=o[k];
124 if(typeof (_1d[k])=="object"&&typeof (v)=="object"){
125 arguments.callee(_1d[k],v);
126 }else{
127 _1d[k]=v;
128 }
129 }
130 }
131 }
132 return _1d;
133 },setdefault:function(_23,obj){
134 if(_23===null){
135 _23={};
136 }
137 for(var i=1;i<arguments.length;i++){
138 var o=arguments[i];
139 for(var k in o){
140 if(!(k in _23)){
141 _23[k]=o[k];
142 }
143 }
144 }
145 return _23;
146 },keys:function(obj){
147 var _29=[];
148 for(var _2a in obj){
149 _29.push(_2a);
150 }
151 return _29;
152 },values:function(obj){
153 var _2c=[];
154 for(var _2d in obj){
155 _2c.push(obj[_2d]);
156 }
157 return _2c;
158 },items:function(obj){
159 var _2f=[];
160 var e;
161 for(var _31 in obj){
162 var v;
163 try{
164 v=obj[_31];
165 }
166 catch(e){
167 continue;
168 }
169 _2f.push([_31,v]);
170 }
171 return _2f;
172 },_newNamedError:function(_33,_34,_35){
173 _35.prototype=new MochiKit.Base.NamedError(_33.NAME+"."+_34);
174 _33[_34]=_35;
175 },operator:{truth:function(a){
176 return !!a;
177 },lognot:function(a){
178 return !a;
179 },identity:function(a){
180 return a;
181 },not:function(a){
182 return ~a;
183 },neg:function(a){
184 return -a;
185 },add:function(a,b){
186 return a+b;
187 },sub:function(a,b){
188 return a-b;
189 },div:function(a,b){
190 return a/b;
191 },mod:function(a,b){
192 return a%b;
193 },mul:function(a,b){
194 return a*b;
195 },and:function(a,b){
196 return a&b;
197 },or:function(a,b){
198 return a|b;
199 },xor:function(a,b){
200 return a^b;
201 },lshift:function(a,b){
202 return a<<b;
203 },rshift:function(a,b){
204 return a>>b;
205 },zrshift:function(a,b){
206 return a>>>b;
207 },eq:function(a,b){
208 return a==b;
209 },ne:function(a,b){
210 return a!=b;
211 },gt:function(a,b){
212 return a>b;
213 },ge:function(a,b){
214 return a>=b;
215 },lt:function(a,b){
216 return a<b;
217 },le:function(a,b){
218 return a<=b;
219 },seq:function(a,b){
220 return a===b;
221 },sne:function(a,b){
222 return a!==b;
223 },ceq:function(a,b){
224 return MochiKit.Base.compare(a,b)===0;
225 },cne:function(a,b){
226 return MochiKit.Base.compare(a,b)!==0;
227 },cgt:function(a,b){
228 return MochiKit.Base.compare(a,b)==1;
229 },cge:function(a,b){
230 return MochiKit.Base.compare(a,b)!=-1;
231 },clt:function(a,b){
232 return MochiKit.Base.compare(a,b)==-1;
233 },cle:function(a,b){
234 return MochiKit.Base.compare(a,b)!=1;
235 },logand:function(a,b){
236 return a&&b;
237 },logor:function(a,b){
238 return a||b;
239 },contains:function(a,b){
240 return b in a;
241 }},forwardCall:function(_73){
242 return function(){
243 return this[_73].apply(this,arguments);
244 };
245 },itemgetter:function(_74){
246 return function(arg){
247 return arg[_74];
248 };
249 },typeMatcher:function(){
250 var _76={};
251 for(var i=0;i<arguments.length;i++){
252 var typ=arguments[i];
253 _76[typ]=typ;
254 }
255 return function(){
256 for(var i=0;i<arguments.length;i++){
257 if(!(typeof (arguments[i]) in _76)){
258 return false;
259 }
260 }
261 return true;
262 };
263 },isNull:function(){
264 for(var i=0;i<arguments.length;i++){
265 if(arguments[i]!==null){
266 return false;
267 }
268 }
269 return true;
270 },isUndefinedOrNull:function(){
271 for(var i=0;i<arguments.length;i++){
272 var o=arguments[i];
273 if(!(typeof (o)=="undefined"||o===null)){
274 return false;
275 }
276 }
277 return true;
278 },isEmpty:function(obj){
279 return !MochiKit.Base.isNotEmpty.apply(this,arguments);
280 },isNotEmpty:function(obj){
281 for(var i=0;i<arguments.length;i++){
282 var o=arguments[i];
283 if(!(o&&o.length)){
284 return false;
285 }
286 }
287 return true;
288 },isArrayLike:function(){
289 for(var i=0;i<arguments.length;i++){
290 var o=arguments[i];
291 var typ=typeof (o);
292 if((typ!="object"&&!(typ=="function"&&typeof (o.item)=="function"))||o===null||typeof (o.length)!="number"||o.nodeType===3){
293 return false;
294 }
295 }
296 return true;
297 },isDateLike:function(){
298 for(var i=0;i<arguments.length;i++){
299 var o=arguments[i];
300 if(typeof (o)!="object"||o===null||typeof (o.getTime)!="function"){
301 return false;
302 }
303 }
304 return true;
305 },xmap:function(fn){
306 if(fn===null){
307 return MochiKit.Base.extend(null,arguments,1);
308 }
309 var _87=[];
310 for(var i=1;i<arguments.length;i++){
311 _87.push(fn(arguments[i]));
312 }
313 return _87;
314 },map:function(fn,lst){
315 var m=MochiKit.Base;
316 var itr=MochiKit.Iter;
317 var _8d=m.isArrayLike;
318 if(arguments.length<=2){
319 if(!_8d(lst)){
320 if(itr){
321 lst=itr.list(lst);
322 if(fn===null){
323 return lst;
324 }
325 }else{
326 throw new TypeError("Argument not an array-like and MochiKit.Iter not present");
327 }
328 }
329 if(fn===null){
330 return m.extend(null,lst);
331 }
332 var _8e=[];
333 for(var i=0;i<lst.length;i++){
334 _8e.push(fn(lst[i]));
335 }
336 return _8e;
337 }else{
338 if(fn===null){
339 fn=Array;
340 }
341 var _90=null;
342 for(i=1;i<arguments.length;i++){
343 if(!_8d(arguments[i])){
344 if(itr){
345 return itr.list(itr.imap.apply(null,arguments));
346 }else{
347 throw new TypeError("Argument not an array-like and MochiKit.Iter not present");
348 }
349 }
350 var l=arguments[i].length;
351 if(_90===null||_90>l){
352 _90=l;
353 }
354 }
355 _8e=[];
356 for(i=0;i<_90;i++){
357 var _92=[];
358 for(var j=1;j<arguments.length;j++){
359 _92.push(arguments[j][i]);
360 }
361 _8e.push(fn.apply(this,_92));
362 }
363 return _8e;
364 }
365 },xfilter:function(fn){
366 var _95=[];
367 if(fn===null){
368 fn=MochiKit.Base.operator.truth;
369 }
370 for(var i=1;i<arguments.length;i++){
371 var o=arguments[i];
372 if(fn(o)){
373 _95.push(o);
374 }
375 }
376 return _95;
377 },filter:function(fn,lst,_9a){
378 var _9b=[];
379 var m=MochiKit.Base;
380 if(!m.isArrayLike(lst)){
381 if(MochiKit.Iter){
382 lst=MochiKit.Iter.list(lst);
383 }else{
384 throw new TypeError("Argument not an array-like and MochiKit.Iter not present");
385 }
386 }
387 if(fn===null){
388 fn=m.operator.truth;
389 }
390 if(typeof (Array.prototype.filter)=="function"){
391 return Array.prototype.filter.call(lst,fn,_9a);
392 }else{
393 if(typeof (_9a)=="undefined"||_9a===null){
394 for(var i=0;i<lst.length;i++){
395 var o=lst[i];
396 if(fn(o)){
397 _9b.push(o);
398 }
399 }
400 }else{
401 for(i=0;i<lst.length;i++){
402 o=lst[i];
403 if(fn.call(_9a,o)){
404 _9b.push(o);
405 }
406 }
407 }
408 }
409 return _9b;
410 },_wrapDumbFunction:function(_9f){
411 return function(){
412 switch(arguments.length){
413 case 0:
414 return _9f();
415 case 1:
416 return _9f(arguments[0]);
417 case 2:
418 return _9f(arguments[0],arguments[1]);
419 case 3:
420 return _9f(arguments[0],arguments[1],arguments[2]);
421 }
422 var _a0=[];
423 for(var i=0;i<arguments.length;i++){
424 _a0.push("arguments["+i+"]");
425 }
426 return eval("(func("+_a0.join(",")+"))");
427 };
428 },methodcaller:function(_a2){
429 var _a3=MochiKit.Base.extend(null,arguments,1);
430 if(typeof (_a2)=="function"){
431 return function(obj){
432 return _a2.apply(obj,_a3);
433 };
434 }else{
435 return function(obj){
436 return obj[_a2].apply(obj,_a3);
437 };
438 }
439 },method:function(_a6,_a7){
440 var m=MochiKit.Base;
441 return m.bind.apply(this,m.extend([_a7,_a6],arguments,2));
442 },compose:function(f1,f2){
443 var _ab=[];
444 var m=MochiKit.Base;
445 if(arguments.length===0){
446 throw new TypeError("compose() requires at least one argument");
447 }
448 for(var i=0;i<arguments.length;i++){
449 var fn=arguments[i];
450 if(typeof (fn)!="function"){
451 throw new TypeError(m.repr(fn)+" is not a function");
452 }
453 _ab.push(fn);
454 }
455 return function(){
456 var _af=arguments;
457 for(var i=_ab.length-1;i>=0;i--){
458 _af=[_ab[i].apply(this,_af)];
459 }
460 return _af[0];
461 };
462 },bind:function(_b1,_b2){
463 if(typeof (_b1)=="string"){
464 _b1=_b2[_b1];
465 }
466 var _b3=_b1.im_func;
467 var _b4=_b1.im_preargs;
468 var _b5=_b1.im_self;
469 var m=MochiKit.Base;
470 if(typeof (_b1)=="function"&&typeof (_b1.apply)=="undefined"){
471 _b1=m._wrapDumbFunction(_b1);
472 }
473 if(typeof (_b3)!="function"){
474 _b3=_b1;
475 }
476 if(typeof (_b2)!="undefined"){
477 _b5=_b2;
478 }
479 if(typeof (_b4)=="undefined"){
480 _b4=[];
481 }else{
482 _b4=_b4.slice();
483 }
484 m.extend(_b4,arguments,2);
485 var _b7=function(){
486 var _b8=arguments;
487 var me=arguments.callee;
488 if(me.im_preargs.length>0){
489 _b8=m.concat(me.im_preargs,_b8);
490 }
491 var _ba=me.im_self;
492 if(!_ba){
493 _ba=this;
494 }
495 return me.im_func.apply(_ba,_b8);
496 };
497 _b7.im_self=_b5;
498 _b7.im_func=_b3;
499 _b7.im_preargs=_b4;
500 return _b7;
501 },bindMethods:function(_bb){
502 var _bc=MochiKit.Base.bind;
503 for(var k in _bb){
504 var _be=_bb[k];
505 if(typeof (_be)=="function"){
506 _bb[k]=_bc(_be,_bb);
507 }
508 }
509 },registerComparator:function(_bf,_c0,_c1,_c2){
510 MochiKit.Base.comparatorRegistry.register(_bf,_c0,_c1,_c2);
511 },_primitives:{"boolean":true,"string":true,"number":true},compare:function(a,b){
512 if(a==b){
513 return 0;
514 }
515 var _c5=(typeof (a)=="undefined"||a===null);
516 var _c6=(typeof (b)=="undefined"||b===null);
517 if(_c5&&_c6){
518 return 0;
519 }else{
520 if(_c5){
521 return -1;
522 }else{
523 if(_c6){
524 return 1;
525 }
526 }
527 }
528 var m=MochiKit.Base;
529 var _c8=m._primitives;
530 if(!(typeof (a) in _c8&&typeof (b) in _c8)){
531 try{
532 return m.comparatorRegistry.match(a,b);
533 }
534 catch(e){
535 if(e!=m.NotFound){
536 throw e;
537 }
538 }
539 }
540 if(a<b){
541 return -1;
542 }else{
543 if(a>b){
544 return 1;
545 }
546 }
547 var _c9=m.repr;
548 throw new TypeError(_c9(a)+" and "+_c9(b)+" can not be compared");
549 },compareDateLike:function(a,b){
550 return MochiKit.Base.compare(a.getTime(),b.getTime());
551 },compareArrayLike:function(a,b){
552 var _ce=MochiKit.Base.compare;
553 var _cf=a.length;
554 var _d0=0;
555 if(_cf>b.length){
556 _d0=1;
557 _cf=b.length;
558 }else{
559 if(_cf<b.length){
560 _d0=-1;
561 }
562 }
563 for(var i=0;i<_cf;i++){
564 var cmp=_ce(a[i],b[i]);
565 if(cmp){
566 return cmp;
567 }
568 }
569 return _d0;
570 },registerRepr:function(_d3,_d4,_d5,_d6){
571 MochiKit.Base.reprRegistry.register(_d3,_d4,_d5,_d6);
572 },repr:function(o){
573 if(typeof (o)=="undefined"){
574 return "undefined";
575 }else{
576 if(o===null){
577 return "null";
578 }
579 }
580 try{
581 if(typeof (o.__repr__)=="function"){
582 return o.__repr__();
583 }else{
584 if(typeof (o.repr)=="function"&&o.repr!=arguments.callee){
585 return o.repr();
586 }
587 }
588 return MochiKit.Base.reprRegistry.match(o);
589 }
590 catch(e){
591 if(typeof (o.NAME)=="string"&&(o.toString==Function.prototype.toString||o.toString==Object.prototype.toString)){
592 return o.NAME;
593 }
594 }
595 try{
596 var _d8=(o+"");
597 }
598 catch(e){
599 return "["+typeof (o)+"]";
600 }
601 if(typeof (o)=="function"){
602 o=_d8.replace(/^\s+/,"");
603 var idx=o.indexOf("{");
604 if(idx!=-1){
605 o=o.substr(0,idx)+"{...}";
606 }
607 }
608 return _d8;
609 },reprArrayLike:function(o){
610 var m=MochiKit.Base;
611 return "["+m.map(m.repr,o).join(", ")+"]";
612 },reprString:function(o){
613 return ("\""+o.replace(/(["\\])/g,"\\$1")+"\"").replace(/[\f]/g,"\\f").replace(/[\b]/g,"\\b").replace(/[\n]/g,"\\n").replace(/[\t]/g,"\\t").replace(/[\r]/g,"\\r");
614 },reprNumber:function(o){
615 return o+"";
616 },registerJSON:function(_de,_df,_e0,_e1){
617 MochiKit.Base.jsonRegistry.register(_de,_df,_e0,_e1);
618 },evalJSON:function(){
619 return eval("("+arguments[0]+")");
620 },serializeJSON:function(o){
621 var _e3=typeof (o);
622 if(_e3=="number"||_e3=="boolean"){
623 return o+"";
624 }else{
625 if(o===null){
626 return "null";
627 }
628 }
629 var m=MochiKit.Base;
630 var _e5=m.reprString;
631 if(_e3=="string"){
632 return _e5(o);
633 }
634 var me=arguments.callee;
635 var _e7;
636 if(typeof (o.__json__)=="function"){
637 _e7=o.__json__();
638 if(o!==_e7){
639 return me(_e7);
640 }
641 }
642 if(typeof (o.json)=="function"){
643 _e7=o.json();
644 if(o!==_e7){
645 return me(_e7);
646 }
647 }
648 if(_e3!="function"&&typeof (o.length)=="number"){
649 var res=[];
650 for(var i=0;i<o.length;i++){
651 var val=me(o[i]);
652 if(typeof (val)!="string"){
653 val="undefined";
654 }
655 res.push(val);
656 }
657 return "["+res.join(", ")+"]";
658 }
659 try{
660 _e7=m.jsonRegistry.match(o);
661 if(o!==_e7){
662 return me(_e7);
663 }
664 }
665 catch(e){
666 if(e!=m.NotFound){
667 throw e;
668 }
669 }
670 if(_e3=="undefined"){
671 throw new TypeError("undefined can not be serialized as JSON");
672 }
673 if(_e3=="function"){
674 return null;
675 }
676 res=[];
677 for(var k in o){
678 var _ec;
679 if(typeof (k)=="number"){
680 _ec="\""+k+"\"";
681 }else{
682 if(typeof (k)=="string"){
683 _ec=_e5(k);
684 }else{
685 continue;
686 }
687 }
688 val=me(o[k]);
689 if(typeof (val)!="string"){
690 continue;
691 }
692 res.push(_ec+":"+val);
693 }
694 return "{"+res.join(", ")+"}";
695 },objEqual:function(a,b){
696 return (MochiKit.Base.compare(a,b)===0);
697 },arrayEqual:function(_ef,arr){
698 if(_ef.length!=arr.length){
699 return false;
700 }
701 return (MochiKit.Base.compare(_ef,arr)===0);
702 },concat:function(){
703 var _f1=[];
704 var _f2=MochiKit.Base.extend;
705 for(var i=0;i<arguments.length;i++){
706 _f2(_f1,arguments[i]);
707 }
708 return _f1;
709 },keyComparator:function(key){
710 var m=MochiKit.Base;
711 var _f6=m.compare;
712 if(arguments.length==1){
713 return function(a,b){
714 return _f6(a[key],b[key]);
715 };
716 }
717 var _f9=m.extend(null,arguments);
718 return function(a,b){
719 var _fc=0;
720 for(var i=0;(_fc===0)&&(i<_f9.length);i++){
721 var key=_f9[i];
722 _fc=_f6(a[key],b[key]);
723 }
724 return _fc;
725 };
726 },reverseKeyComparator:function(key){
727 var _100=MochiKit.Base.keyComparator.apply(this,arguments);
728 return function(a,b){
729 return _100(b,a);
730 };
731 },partial:function(func){
732 var m=MochiKit.Base;
733 return m.bind.apply(this,m.extend([func,undefined],arguments,1));
734 },listMinMax:function(_105,lst){
735 if(lst.length===0){
736 return null;
737 }
738 var cur=lst[0];
739 var _108=MochiKit.Base.compare;
740 for(var i=1;i<lst.length;i++){
741 var o=lst[i];
742 if(_108(o,cur)==_105){
743 cur=o;
744 }
745 }
746 return cur;
747 },objMax:function(){
748 return MochiKit.Base.listMinMax(1,arguments);
749 },objMin:function(){
750 return MochiKit.Base.listMinMax(-1,arguments);
751 },findIdentical:function(lst,_10c,_10d,end){
752 if(typeof (end)=="undefined"||end===null){
753 end=lst.length;
754 }
755 if(typeof (_10d)=="undefined"||_10d===null){
756 _10d=0;
757 }
758 for(var i=_10d;i<end;i++){
759 if(lst[i]===_10c){
760 return i;
761 }
762 }
763 return -1;
764 },mean:function(){
765 var sum=0;
766 var m=MochiKit.Base;
767 var args=m.extend(null,arguments);
768 var _113=args.length;
769 while(args.length){
770 var o=args.shift();
771 if(o&&typeof (o)=="object"&&typeof (o.length)=="number"){
772 _113+=o.length-1;
773 for(var i=o.length-1;i>=0;i--){
774 sum+=o[i];
775 }
776 }else{
777 sum+=o;
778 }
779 }
780 if(_113<=0){
781 throw new TypeError("mean() requires at least one argument");
782 }
783 return sum/_113;
784 },median:function(){
785 var data=MochiKit.Base.flattenArguments(arguments);
786 if(data.length===0){
787 throw new TypeError("median() requires at least one argument");
788 }
789 data.sort(compare);
790 if(data.length%2==0){
791 var _117=data.length/2;
792 return (data[_117]+data[_117-1])/2;
793 }else{
794 return data[(data.length-1)/2];
795 }
796 },findValue:function(lst,_119,_11a,end){
797 if(typeof (end)=="undefined"||end===null){
798 end=lst.length;
799 }
800 if(typeof (_11a)=="undefined"||_11a===null){
801 _11a=0;
802 }
803 var cmp=MochiKit.Base.compare;
804 for(var i=_11a;i<end;i++){
805 if(cmp(lst[i],_119)===0){
806 return i;
807 }
808 }
809 return -1;
810 },nodeWalk:function(node,_11f){
811 var _120=[node];
812 var _121=MochiKit.Base.extend;
813 while(_120.length){
814 var res=_11f(_120.shift());
815 if(res){
816 _121(_120,res);
817 }
818 }
819 },nameFunctions:function(_123){
820 var base=_123.NAME;
821 if(typeof (base)=="undefined"){
822 base="";
823 }else{
824 base=base+".";
825 }
826 for(var name in _123){
827 var o=_123[name];
828 if(typeof (o)=="function"&&typeof (o.NAME)=="undefined"){
829 try{
830 o.NAME=base+name;
831 }
832 catch(e){
833 }
834 }
835 }
836 },queryString:function(_127,_128){
837 if(typeof (MochiKit.DOM)!="undefined"&&arguments.length==1&&(typeof (_127)=="string"||(typeof (_127.nodeType)!="undefined"&&_127.nodeType>0))){
838 var kv=MochiKit.DOM.formContents(_127);
839 _127=kv[0];
840 _128=kv[1];
841 }else{
842 if(arguments.length==1){
843 if(typeof (_127.length)=="number"&&_127.length==2){
844 return arguments.callee(_127[0],_127[1]);
845 }
846 var o=_127;
847 _127=[];
848 _128=[];
849 for(var k in o){
850 var v=o[k];
851 if(typeof (v)=="function"){
852 continue;
853 }else{
854 if(typeof (v)!="string"&&typeof (v.length)=="number"){
855 for(var i=0;i<v.length;i++){
856 _127.push(k);
857 _128.push(v[i]);
858 }
859 }else{
860 _127.push(k);
861 _128.push(v);
862 }
863 }
864 }
865 }
866 }
867 var rval=[];
868 var len=Math.min(_127.length,_128.length);
869 var _130=MochiKit.Base.urlEncode;
870 for(var i=0;i<len;i++){
871 v=_128[i];
872 if(typeof (v)!="undefined"&&v!==null){
873 rval.push(_130(_127[i])+"="+_130(v));
874 }
875 }
876 return rval.join("&");
877 },parseQueryString:function(_131,_132){
878 var qstr=(_131.charAt(0)=="?")?_131.substring(1):_131;
879 var _134=qstr.replace(/\+/g,"%20").split(/(\&amp\;|\&\#38\;|\&#x26;|\&)/);
880 var o={};
881 var _136;
882 if(typeof (decodeURIComponent)!="undefined"){
883 _136=decodeURIComponent;
884 }else{
885 _136=unescape;
886 }
887 if(_132){
888 for(var i=0;i<_134.length;i++){
889 var pair=_134[i].split("=");
890 var name=_136(pair.shift());
891 if(!name){
892 continue;
893 }
894 var arr=o[name];
895 if(!(arr instanceof Array)){
896 arr=[];
897 o[name]=arr;
898 }
899 arr.push(_136(pair.join("=")));
900 }
901 }else{
902 for(i=0;i<_134.length;i++){
903 pair=_134[i].split("=");
904 var name=pair.shift();
905 if(!name){
906 continue;
907 }
908 o[_136(name)]=_136(pair.join("="));
909 }
910 }
911 return o;
912 }});
913 MochiKit.Base.AdapterRegistry=function(){
914 this.pairs=[];
915 };
916 MochiKit.Base.AdapterRegistry.prototype={register:function(name,_13c,wrap,_13e){
917 if(_13e){
918 this.pairs.unshift([name,_13c,wrap]);
919 }else{
920 this.pairs.push([name,_13c,wrap]);
921 }
922 },match:function(){
923 for(var i=0;i<this.pairs.length;i++){
924 var pair=this.pairs[i];
925 if(pair[1].apply(this,arguments)){
926 return pair[2].apply(this,arguments);
927 }
928 }
929 throw MochiKit.Base.NotFound;
930 },unregister:function(name){
931 for(var i=0;i<this.pairs.length;i++){
932 var pair=this.pairs[i];
933 if(pair[0]==name){
934 this.pairs.splice(i,1);
935 return true;
936 }
937 }
938 return false;
939 }};
940 MochiKit.Base.EXPORT=["flattenArray","noop","camelize","counter","clone","extend","update","updatetree","setdefault","keys","values","items","NamedError","operator","forwardCall","itemgetter","typeMatcher","isCallable","isUndefined","isUndefinedOrNull","isNull","isEmpty","isNotEmpty","isArrayLike","isDateLike","xmap","map","xfilter","filter","methodcaller","compose","bind","bindMethods","NotFound","AdapterRegistry","registerComparator","compare","registerRepr","repr","objEqual","arrayEqual","concat","keyComparator","reverseKeyComparator","partial","merge","listMinMax","listMax","listMin","objMax","objMin","nodeWalk","zip","urlEncode","queryString","serializeJSON","registerJSON","evalJSON","parseQueryString","findValue","findIdentical","flattenArguments","method","average","mean","median"];
941 MochiKit.Base.EXPORT_OK=["nameFunctions","comparatorRegistry","reprRegistry","jsonRegistry","compareDateLike","compareArrayLike","reprArrayLike","reprString","reprNumber"];
942 MochiKit.Base._exportSymbols=function(_144,_145){
943 if(!MochiKit.__export__){
944 return;
945 }
946 var all=_145.EXPORT_TAGS[":all"];
947 for(var i=0;i<all.length;i++){
948 _144[all[i]]=_145[all[i]];
949 }
950 };
951 MochiKit.Base.__new__=function(){
952 var m=this;
953 m.noop=m.operator.identity;
954 m.forward=m.forwardCall;
955 m.find=m.findValue;
956 if(typeof (encodeURIComponent)!="undefined"){
957 m.urlEncode=function(_149){
958 return encodeURIComponent(_149).replace(/\'/g,"%27");
959 };
960 }else{
961 m.urlEncode=function(_14a){
962 return escape(_14a).replace(/\+/g,"%2B").replace(/\"/g,"%22").rval.replace(/\'/g,"%27");
963 };
964 }
965 m.NamedError=function(name){
966 this.message=name;
967 this.name=name;
968 };
969 m.NamedError.prototype=new Error();
970 m.update(m.NamedError.prototype,{repr:function(){
971 if(this.message&&this.message!=this.name){
972 return this.name+"("+m.repr(this.message)+")";
973 }else{
974 return this.name+"()";
975 }
976 },toString:m.forwardCall("repr")});
977 m.NotFound=new m.NamedError("MochiKit.Base.NotFound");
978 m.listMax=m.partial(m.listMinMax,1);
979 m.listMin=m.partial(m.listMinMax,-1);
980 m.isCallable=m.typeMatcher("function");
981 m.isUndefined=m.typeMatcher("undefined");
982 m.merge=m.partial(m.update,null);
983 m.zip=m.partial(m.map,null);
984 m.average=m.mean;
985 m.comparatorRegistry=new m.AdapterRegistry();
986 m.registerComparator("dateLike",m.isDateLike,m.compareDateLike);
987 m.registerComparator("arrayLike",m.isArrayLike,m.compareArrayLike);
988 m.reprRegistry=new m.AdapterRegistry();
989 m.registerRepr("arrayLike",m.isArrayLike,m.reprArrayLike);
990 m.registerRepr("string",m.typeMatcher("string"),m.reprString);
991 m.registerRepr("numbers",m.typeMatcher("number","boolean"),m.reprNumber);
992 m.jsonRegistry=new m.AdapterRegistry();
993 var all=m.concat(m.EXPORT,m.EXPORT_OK);
994 m.EXPORT_TAGS={":common":m.concat(m.EXPORT_OK),":all":all};
995 m.nameFunctions(this);
996 };
997 MochiKit.Base.__new__();
998 if(MochiKit.__export__){
999 compare=MochiKit.Base.compare;
1000 compose=MochiKit.Base.compose;
1001 serializeJSON=MochiKit.Base.serializeJSON;
1002 }
1003 MochiKit.Base._exportSymbols(this,MochiKit.Base);
1004 if(typeof (dojo)!="undefined"){
1005 dojo.provide("MochiKit.Color");
1006 dojo.require("MochiKit.Base");
1007 }
1008 if(typeof (JSAN)!="undefined"){
1009 JSAN.use("MochiKit.Base",[]);
1010 }
1011 try{
1012 if(typeof (MochiKit.Base)=="undefined"){
1013 throw "";
1014 }
1015 }
1016 catch(e){
1017 throw "MochiKit.Color depends on MochiKit.Base";
1018 }
1019 if(typeof (MochiKit.Color)=="undefined"){
1020 MochiKit.Color={};
1021 }
1022 MochiKit.Color.NAME="MochiKit.Color";
1023 MochiKit.Color.VERSION="1.4";
1024 MochiKit.Color.__repr__=function(){
1025 return "["+this.NAME+" "+this.VERSION+"]";
1026 };
1027 MochiKit.Color.toString=function(){
1028 return this.__repr__();
1029 };
1030 MochiKit.Color.Color=function(red,_14e,blue,_150){
1031 if(typeof (_150)=="undefined"||_150===null){
1032 _150=1;
1033 }
1034 this.rgb={r:red,g:_14e,b:blue,a:_150};
1035 };
1036 MochiKit.Color.Color.prototype={__class__:MochiKit.Color.Color,colorWithAlpha:function(_151){
1037 var rgb=this.rgb;
1038 var m=MochiKit.Color;
1039 return m.Color.fromRGB(rgb.r,rgb.g,rgb.b,_151);
1040 },colorWithHue:function(hue){
1041 var hsl=this.asHSL();
1042 hsl.h=hue;
1043 var m=MochiKit.Color;
1044 return m.Color.fromHSL(hsl);
1045 },colorWithSaturation:function(_157){
1046 var hsl=this.asHSL();
1047 hsl.s=_157;
1048 var m=MochiKit.Color;
1049 return m.Color.fromHSL(hsl);
1050 },colorWithLightness:function(_15a){
1051 var hsl=this.asHSL();
1052 hsl.l=_15a;
1053 var m=MochiKit.Color;
1054 return m.Color.fromHSL(hsl);
1055 },darkerColorWithLevel:function(_15d){
1056 var hsl=this.asHSL();
1057 hsl.l=Math.max(hsl.l-_15d,0);
1058 var m=MochiKit.Color;
1059 return m.Color.fromHSL(hsl);
1060 },lighterColorWithLevel:function(_160){
1061 var hsl=this.asHSL();
1062 hsl.l=Math.min(hsl.l+_160,1);
1063 var m=MochiKit.Color;
1064 return m.Color.fromHSL(hsl);
1065 },blendedColor:function(_163,_164){
1066 if(typeof (_164)=="undefined"||_164===null){
1067 _164=0.5;
1068 }
1069 var sf=1-_164;
1070 var s=this.rgb;
1071 var d=_163.rgb;
1072 var df=_164;
1073 return MochiKit.Color.Color.fromRGB((s.r*sf)+(d.r*df),(s.g*sf)+(d.g*df),(s.b*sf)+(d.b*df),(s.a*sf)+(d.a*df));
1074 },compareRGB:function(_169){
1075 var a=this.asRGB();
1076 var b=_169.asRGB();
1077 return MochiKit.Base.compare([a.r,a.g,a.b,a.a],[b.r,b.g,b.b,b.a]);
1078 },isLight:function(){
1079 return this.asHSL().b>0.5;
1080 },isDark:function(){
1081 return (!this.isLight());
1082 },toHSLString:function(){
1083 var c=this.asHSL();
1084 var ccc=MochiKit.Color.clampColorComponent;
1085 var rval=this._hslString;
1086 if(!rval){
1087 var mid=(ccc(c.h,360).toFixed(0)+","+ccc(c.s,100).toPrecision(4)+"%"+","+ccc(c.l,100).toPrecision(4)+"%");
1088 var a=c.a;
1089 if(a>=1){
1090 a=1;
1091 rval="hsl("+mid+")";
1092 }else{
1093 if(a<=0){
1094 a=0;
1095 }
1096 rval="hsla("+mid+","+a+")";
1097 }
1098 this._hslString=rval;
1099 }
1100 return rval;
1101 },toRGBString:function(){
1102 var c=this.rgb;
1103 var ccc=MochiKit.Color.clampColorComponent;
1104 var rval=this._rgbString;
1105 if(!rval){
1106 var mid=(ccc(c.r,255).toFixed(0)+","+ccc(c.g,255).toFixed(0)+","+ccc(c.b,255).toFixed(0));
1107 if(c.a!=1){
1108 rval="rgba("+mid+","+c.a+")";
1109 }else{
1110 rval="rgb("+mid+")";
1111 }
1112 this._rgbString=rval;
1113 }
1114 return rval;
1115 },asRGB:function(){
1116 return MochiKit.Base.clone(this.rgb);
1117 },toHexString:function(){
1118 var m=MochiKit.Color;
1119 var c=this.rgb;
1120 var ccc=MochiKit.Color.clampColorComponent;
1121 var rval=this._hexString;
1122 if(!rval){
1123 rval=("#"+m.toColorPart(ccc(c.r,255))+m.toColorPart(ccc(c.g,255))+m.toColorPart(ccc(c.b,255)));
1124 this._hexString=rval;
1125 }
1126 return rval;
1127 },asHSV:function(){
1128 var hsv=this.hsv;
1129 var c=this.rgb;
1130 if(typeof (hsv)=="undefined"||hsv===null){
1131 hsv=MochiKit.Color.rgbToHSV(this.rgb);
1132 this.hsv=hsv;
1133 }
1134 return MochiKit.Base.clone(hsv);
1135 },asHSL:function(){
1136 var hsl=this.hsl;
1137 var c=this.rgb;
1138 if(typeof (hsl)=="undefined"||hsl===null){
1139 hsl=MochiKit.Color.rgbToHSL(this.rgb);
1140 this.hsl=hsl;
1141 }
1142 return MochiKit.Base.clone(hsl);
1143 },toString:function(){
1144 return this.toRGBString();
1145 },repr:function(){
1146 var c=this.rgb;
1147 var col=[c.r,c.g,c.b,c.a];
1148 return this.__class__.NAME+"("+col.join(", ")+")";
1149 }};
1150 MochiKit.Base.update(MochiKit.Color.Color,{fromRGB:function(red,_180,blue,_182){
1151 var _183=MochiKit.Color.Color;
1152 if(arguments.length==1){
1153 var rgb=red;
1154 red=rgb.r;
1155 _180=rgb.g;
1156 blue=rgb.b;
1157 if(typeof (rgb.a)=="undefined"){
1158 _182=undefined;
1159 }else{
1160 _182=rgb.a;
1161 }
1162 }
1163 return new _183(red,_180,blue,_182);
1164 },fromHSL:function(hue,_186,_187,_188){
1165 var m=MochiKit.Color;
1166 return m.Color.fromRGB(m.hslToRGB.apply(m,arguments));
1167 },fromHSV:function(hue,_18b,_18c,_18d){
1168 var m=MochiKit.Color;
1169 return m.Color.fromRGB(m.hsvToRGB.apply(m,arguments));
1170 },fromName:function(name){
1171 var _190=MochiKit.Color.Color;
1172 if(name.charAt(0)=="\""){
1173 name=name.substr(1,name.length-2);
1174 }
1175 var _191=_190._namedColors[name.toLowerCase()];
1176 if(typeof (_191)=="string"){
1177 return _190.fromHexString(_191);
1178 }else{
1179 if(name=="transparent"){
1180 return _190.transparentColor();
1181 }
1182 }
1183 return null;
1184 },fromString:function(_192){
1185 var self=MochiKit.Color.Color;
1186 var _194=_192.substr(0,3);
1187 if(_194=="rgb"){
1188 return self.fromRGBString(_192);
1189 }else{
1190 if(_194=="hsl"){
1191 return self.fromHSLString(_192);
1192 }else{
1193 if(_192.charAt(0)=="#"){
1194 return self.fromHexString(_192);
1195 }
1196 }
1197 }
1198 return self.fromName(_192);
1199 },fromHexString:function(_195){
1200 if(_195.charAt(0)=="#"){
1201 _195=_195.substring(1);
1202 }
1203 var _196=[];
1204 var i,hex;
1205 if(_195.length==3){
1206 for(i=0;i<3;i++){
1207 hex=_195.substr(i,1);
1208 _196.push(parseInt(hex+hex,16)/255);
1209 }
1210 }else{
1211 for(i=0;i<6;i+=2){
1212 hex=_195.substr(i,2);
1213 _196.push(parseInt(hex,16)/255);
1214 }
1215 }
1216 var _199=MochiKit.Color.Color;
1217 return _199.fromRGB.apply(_199,_196);
1218 },_fromColorString:function(pre,_19b,_19c,_19d){
1219 if(_19d.indexOf(pre)===0){
1220 _19d=_19d.substring(_19d.indexOf("(",3)+1,_19d.length-1);
1221 }
1222 var _19e=_19d.split(/\s*,\s*/);
1223 var _19f=[];
1224 for(var i=0;i<_19e.length;i++){
1225 var c=_19e[i];
1226 var val;
1227 var _1a3=c.substring(c.length-3);
1228 if(c.charAt(c.length-1)=="%"){
1229 val=0.01*parseFloat(c.substring(0,c.length-1));
1230 }else{
1231 if(_1a3=="deg"){
1232 val=parseFloat(c)/360;
1233 }else{
1234 if(_1a3=="rad"){
1235 val=parseFloat(c)/(Math.PI*2);
1236 }else{
1237 val=_19c[i]*parseFloat(c);
1238 }
1239 }
1240 }
1241 _19f.push(val);
1242 }
1243 return this[_19b].apply(this,_19f);
1244 },fromBackground:function(elem){
1245 var cls=MochiKit.Color.Color;
1246 return cls.fromComputedStyle(elem,"backgroundColor","background-color")||cls.whiteColor();
1247 },fromText:function(elem){
1248 var cls=MochiKit.Color.Color;
1249 return cls.fromComputedStyle(elem,"color","color")||cls.blackColor();
1250 },namedColors:function(){
1251 return MochiKit.Base.clone(MochiKit.Color.Color._namedColors);
1252 }});
1253 MochiKit.Base.update(MochiKit.Color,{clampColorComponent:function(v,_1a9){
1254 v*=_1a9;
1255 if(v<0){
1256 return 0;
1257 }else{
1258 if(v>_1a9){
1259 return _1a9;
1260 }else{
1261 return v;
1262 }
1263 }
1264 },_hslValue:function(n1,n2,hue){
1265 if(hue>6){
1266 hue-=6;
1267 }else{
1268 if(hue<0){
1269 hue+=6;
1270 }
1271 }
1272 var val;
1273 if(hue<1){
1274 val=n1+(n2-n1)*hue;
1275 }else{
1276 if(hue<3){
1277 val=n2;
1278 }else{
1279 if(hue<4){
1280 val=n1+(n2-n1)*(4-hue);
1281 }else{
1282 val=n1;
1283 }
1284 }
1285 }
1286 return val;
1287 },hsvToRGB:function(hue,_1af,_1b0,_1b1){
1288 if(arguments.length==1){
1289 var hsv=hue;
1290 hue=hsv.h;
1291 _1af=hsv.s;
1292 _1b0=hsv.v;
1293 _1b1=hsv.a;
1294 }
1295 var red;
1296 var _1b4;
1297 var blue;
1298 if(_1af===0){
1299 red=_1b0;
1300 _1b4=_1b0;
1301 blue=_1b0;
1302 }else{
1303 var i=Math.floor(hue*6);
1304 var f=(hue*6)-i;
1305 var p=_1b0*(1-_1af);
1306 var q=_1b0*(1-(_1af*f));
1307 var t=_1b0*(1-(_1af*(1-f)));
1308 switch(i){
1309 case 1:
1310 red=q;
1311 _1b4=_1b0;
1312 blue=p;
1313 break;
1314 case 2:
1315 red=p;
1316 _1b4=_1b0;
1317 blue=t;
1318 break;
1319 case 3:
1320 red=p;
1321 _1b4=q;
1322 blue=_1b0;
1323 break;
1324 case 4:
1325 red=t;
1326 _1b4=p;
1327 blue=_1b0;
1328 break;
1329 case 5:
1330 red=_1b0;
1331 _1b4=p;
1332 blue=q;
1333 break;
1334 case 6:
1335 case 0:
1336 red=_1b0;
1337 _1b4=t;
1338 blue=p;
1339 break;
1340 }
1341 }
1342 return {r:red,g:_1b4,b:blue,a:_1b1};
1343 },hslToRGB:function(hue,_1bc,_1bd,_1be){
1344 if(arguments.length==1){
1345 var hsl=hue;
1346 hue=hsl.h;
1347 _1bc=hsl.s;
1348 _1bd=hsl.l;
1349 _1be=hsl.a;
1350 }
1351 var red;
1352 var _1c1;
1353 var blue;
1354 if(_1bc===0){
1355 red=_1bd;
1356 _1c1=_1bd;
1357 blue=_1bd;
1358 }else{
1359 var m2;
1360 if(_1bd<=0.5){
1361 m2=_1bd*(1+_1bc);
1362 }else{
1363 m2=_1bd+_1bc-(_1bd*_1bc);
1364 }
1365 var m1=(2*_1bd)-m2;
1366 var f=MochiKit.Color._hslValue;
1367 var h6=hue*6;
1368 red=f(m1,m2,h6+2);
1369 _1c1=f(m1,m2,h6);
1370 blue=f(m1,m2,h6-2);
1371 }
1372 return {r:red,g:_1c1,b:blue,a:_1be};
1373 },rgbToHSV:function(red,_1c8,blue,_1ca){
1374 if(arguments.length==1){
1375 var rgb=red;
1376 red=rgb.r;
1377 _1c8=rgb.g;
1378 blue=rgb.b;
1379 _1ca=rgb.a;
1380 }
1381 var max=Math.max(Math.max(red,_1c8),blue);
1382 var min=Math.min(Math.min(red,_1c8),blue);
1383 var hue;
1384 var _1cf;
1385 var _1d0=max;
1386 if(min==max){
1387 hue=0;
1388 _1cf=0;
1389 }else{
1390 var _1d1=(max-min);
1391 _1cf=_1d1/max;
1392 if(red==max){
1393 hue=(_1c8-blue)/_1d1;
1394 }else{
1395 if(_1c8==max){
1396 hue=2+((blue-red)/_1d1);
1397 }else{
1398 hue=4+((red-_1c8)/_1d1);
1399 }
1400 }
1401 hue/=6;
1402 if(hue<0){
1403 hue+=1;
1404 }
1405 if(hue>1){
1406 hue-=1;
1407 }
1408 }
1409 return {h:hue,s:_1cf,v:_1d0,a:_1ca};
1410 },rgbToHSL:function(red,_1d3,blue,_1d5){
1411 if(arguments.length==1){
1412 var rgb=red;
1413 red=rgb.r;
1414 _1d3=rgb.g;
1415 blue=rgb.b;
1416 _1d5=rgb.a;
1417 }
1418 var max=Math.max(red,Math.max(_1d3,blue));
1419 var min=Math.min(red,Math.min(_1d3,blue));
1420 var hue;
1421 var _1da;
1422 var _1db=(max+min)/2;
1423 var _1dc=max-min;
1424 if(_1dc===0){
1425 hue=0;
1426 _1da=0;
1427 }else{
1428 if(_1db<=0.5){
1429 _1da=_1dc/(max+min);
1430 }else{
1431 _1da=_1dc/(2-max-min);
1432 }
1433 if(red==max){
1434 hue=(_1d3-blue)/_1dc;
1435 }else{
1436 if(_1d3==max){
1437 hue=2+((blue-red)/_1dc);
1438 }else{
1439 hue=4+((red-_1d3)/_1dc);
1440 }
1441 }
1442 hue/=6;
1443 if(hue<0){
1444 hue+=1;
1445 }
1446 if(hue>1){
1447 hue-=1;
1448 }
1449 }
1450 return {h:hue,s:_1da,l:_1db,a:_1d5};
1451 },toColorPart:function(num){
1452 num=Math.round(num);
1453 var _1de=num.toString(16);
1454 if(num<16){
1455 return "0"+_1de;
1456 }
1457 return _1de;
1458 },__new__:function(){
1459 var m=MochiKit.Base;
1460 this.Color.fromRGBString=m.bind(this.Color._fromColorString,this.Color,"rgb","fromRGB",[1/255,1/255,1/255,1]);
1461 this.Color.fromHSLString=m.bind(this.Color._fromColorString,this.Color,"hsl","fromHSL",[1/360,0.01,0.01,1]);
1462 var _1e0=1/3;
1463 var _1e1={black:[0,0,0],blue:[0,0,1],brown:[0.6,0.4,0.2],cyan:[0,1,1],darkGray:[_1e0,_1e0,_1e0],gray:[0.5,0.5,0.5],green:[0,1,0],lightGray:[2*_1e0,2*_1e0,2*_1e0],magenta:[1,0,1],orange:[1,0.5,0],purple:[0.5,0,0.5],red:[1,0,0],transparent:[0,0,0,0],white:[1,1,1],yellow:[1,1,0]};
1464 var _1e2=function(name,r,g,b,a){
1465 var rval=this.fromRGB(r,g,b,a);
1466 this[name]=function(){
1467 return rval;
1468 };
1469 return rval;
1470 };
1471 for(var k in _1e1){
1472 var name=k+"Color";
1473 var _1eb=m.concat([_1e2,this.Color,name],_1e1[k]);
1474 this.Color[name]=m.bind.apply(null,_1eb);
1475 }
1476 var _1ec=function(){
1477 for(var i=0;i<arguments.length;i++){
1478 if(!(arguments[i] instanceof Color)){
1479 return false;
1480 }
1481 }
1482 return true;
1483 };
1484 var _1ee=function(a,b){
1485 return a.compareRGB(b);
1486 };
1487 m.nameFunctions(this);
1488 m.registerComparator(this.Color.NAME,_1ec,_1ee);
1489 this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)};
1490 }});
1491 MochiKit.Color.EXPORT=["Color"];
1492 MochiKit.Color.EXPORT_OK=["clampColorComponent","rgbToHSL","hslToRGB","rgbToHSV","hsvToRGB","toColorPart"];
1493 MochiKit.Color.__new__();
1494 MochiKit.Base._exportSymbols(this,MochiKit.Color);
1495 MochiKit.Color.Color._namedColors={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};
1496 if(typeof (dojo)!="undefined"){
1497 dojo.provide("MochiKit.DOM");
1498 dojo.require("MochiKit.Base");
1499 }
1500 if(typeof (JSAN)!="undefined"){
1501 JSAN.use("MochiKit.Base",[]);
1502 }
1503 try{
1504 if(typeof (MochiKit.Base)=="undefined"){
1505 throw "";
1506 }
1507 }
1508 catch(e){
1509 throw "MochiKit.DOM depends on MochiKit.Base!";
1510 }
1511 if(typeof (MochiKit.DOM)=="undefined"){
1512 MochiKit.DOM={};
1513 }
1514 MochiKit.DOM.NAME="MochiKit.DOM";
1515 MochiKit.DOM.VERSION="1.4";
1516 MochiKit.DOM.__repr__=function(){
1517 return "["+this.NAME+" "+this.VERSION+"]";
1518 };
1519 MochiKit.DOM.toString=function(){
1520 return this.__repr__();
1521 };
1522 MochiKit.DOM.EXPORT=["removeEmptyTextNodes","formContents","currentWindow","currentDocument","withWindow","withDocument","registerDOMConverter","coerceToDOM","createDOM","createDOMFunc","isChildNode","getNodeAttribute","removeNodeAttribute","setNodeAttribute","updateNodeAttributes","appendChildNodes","insertSiblingNodesAfter","insertSiblingNodesBefore","replaceChildNodes","removeElement","swapDOM","BUTTON","TT","PRE","H1","H2","H3","BR","CANVAS","HR","LABEL","TEXTAREA","FORM","STRONG","SELECT","OPTION","OPTGROUP","LEGEND","FIELDSET","P","UL","OL","LI","TD","TR","THEAD","TBODY","TFOOT","TABLE","TH","INPUT","SPAN","A","DIV","IMG","getElement","$","getElementsByTagAndClassName","addToCallStack","addLoadEvent","focusOnLoad","setElementClass","toggleElementClass","addElementClass","removeElementClass","swapElementClass","hasElementClass","escapeHTML","toHTML","emitHTML","scrapeText","isParent","getFirstParentByTagAndClassName","makeClipping","undoClipping","makePositioned","undoPositioned","getFirstElementByTagAndClassName"];
1523 MochiKit.DOM.EXPORT_OK=["domConverters"];
1524 MochiKit.DOM.DEPRECATED=[["computedStyle","MochiKit.Style.getStyle","1.4"],["elementDimensions","MochiKit.Style.getElementDimensions","1.4"],["elementPosition","MochiKit.Style.getElementPosition","1.4"],["hideElement","MochiKit.Style.hideElement","1.4"],["setElementDimensions","MochiKit.Style.setElementDimensions","1.4"],["setElementPosition","MochiKit.Style.setElementPosition","1.4"],["setDisplayForElement","MochiKit.Style.setDisplayForElement","1.4"],["setOpacity","MochiKit.Style.setOpacity","1.4"],["showElement","MochiKit.Style.showElement","1.4"],["Coordinates","MochiKit.Style.Coordinates","1.4"],["Dimensions","MochiKit.Style.Dimensions","1.4"]];
1525 MochiKit.DOM.getViewportDimensions=new Function(""+"if (!MochiKit[\"Style\"]) {"+" throw new Error(\"This function has been deprecated and depends on MochiKit.Style.\");"+"}"+"return MochiKit.Style.getViewportDimensions.apply(this, arguments);");
1526 MochiKit.Base.update(MochiKit.DOM,{currentWindow:function(){
1527 return MochiKit.DOM._window;
1528 },currentDocument:function(){
1529 return MochiKit.DOM._document;
1530 },withWindow:function(win,func){
1531 var self=MochiKit.DOM;
1532 var _1f4=self._document;
1533 var _1f5=self._window;
1534 var rval;
1535 try{
1536 self._window=win;
1537 self._document=win.document;
1538 rval=func();
1539 }
1540 catch(e){
1541 self._window=_1f5;
1542 self._document=_1f4;
1543 throw e;
1544 }
1545 self._window=_1f5;
1546 self._document=_1f4;
1547 return rval;
1548 },formContents:function(elem){
1549 var _1f8=[];
1550 var _1f9=[];
1551 var m=MochiKit.Base;
1552 var self=MochiKit.DOM;
1553 if(typeof (elem)=="undefined"||elem===null){
1554 elem=self._document.body;
1555 }else{
1556 elem=self.getElement(elem);
1557 }
1558 m.nodeWalk(elem,function(elem){
1559 var name=elem.name;
1560 if(m.isNotEmpty(name)){
1561 var _1fe=elem.tagName.toUpperCase();
1562 if(_1fe==="INPUT"&&(elem.type=="radio"||elem.type=="checkbox")&&!elem.checked){
1563 return null;
1564 }
1565 if(_1fe==="SELECT"){
1566 if(elem.type=="select-one"){
1567 if(elem.selectedIndex>=0){
1568 var opt=elem.options[elem.selectedIndex];
1569 var v=opt.value;
1570 if(!v){
1571 var h=opt.outerHTML;
1572 if(h&&!h.match(/^[^>]+\svalue\s*=/i)){
1573 v=opt.text;
1574 }
1575 }
1576 _1f8.push(name);
1577 _1f9.push(v);
1578 return null;
1579 }
1580 _1f8.push(name);
1581 _1f9.push("");
1582 return null;
1583 }else{
1584 var opts=elem.options;
1585 if(!opts.length){
1586 _1f8.push(name);
1587 _1f9.push("");
1588 return null;
1589 }
1590 for(var i=0;i<opts.length;i++){
1591 var opt=opts[i];
1592 if(!opt.selected){
1593 continue;
1594 }
1595 var v=opt.value;
1596 if(!v){
1597 var h=opt.outerHTML;
1598 if(h&&!h.match(/^[^>]+\svalue\s*=/i)){
1599 v=opt.text;
1600 }
1601 }
1602 _1f8.push(name);
1603 _1f9.push(v);
1604 }
1605 return null;
1606 }
1607 }
1608 if(_1fe==="FORM"||_1fe==="P"||_1fe==="SPAN"||_1fe==="DIV"){
1609 return elem.childNodes;
1610 }
1611 _1f8.push(name);
1612 _1f9.push(elem.value||"");
1613 return null;
1614 }
1615 return elem.childNodes;
1616 });
1617 return [_1f8,_1f9];
1618 },withDocument:function(doc,func){
1619 var self=MochiKit.DOM;
1620 var _207=self._document;
1621 var rval;
1622 try{
1623 self._document=doc;
1624 rval=func();
1625 }
1626 catch(e){
1627 self._document=_207;
1628 throw e;
1629 }
1630 self._document=_207;
1631 return rval;
1632 },registerDOMConverter:function(name,_20a,wrap,_20c){
1633 MochiKit.DOM.domConverters.register(name,_20a,wrap,_20c);
1634 },coerceToDOM:function(node,ctx){
1635 var m=MochiKit.Base;
1636 var im=MochiKit.Iter;
1637 var self=MochiKit.DOM;
1638 if(im){
1639 var iter=im.iter;
1640 var _213=im.repeat;
1641 var map=m.map;
1642 }
1643 var _215=self.domConverters;
1644 var _216=arguments.callee;
1645 var _217=m.NotFound;
1646 while(true){
1647 if(typeof (node)=="undefined"||node===null){
1648 return null;
1649 }
1650 if(typeof (node)=="function"&&typeof (node.length)=="number"&&!(node instanceof Function)){
1651 node=im.list(node);
1652 }
1653 if(typeof (node.nodeType)!="undefined"&&node.nodeType>0){
1654 return node;
1655 }
1656 if(typeof (node)=="number"||typeof (node)=="boolean"){
1657 node=node.toString();
1658 }
1659 if(typeof (node)=="string"){
1660 return self._document.createTextNode(node);
1661 }
1662 if(typeof (node.__dom__)=="function"){
1663 node=node.__dom__(ctx);
1664 continue;
1665 }
1666 if(typeof (node.dom)=="function"){
1667 node=node.dom(ctx);
1668 continue;
1669 }
1670 if(typeof (node)=="function"){
1671 node=node.apply(ctx,[ctx]);
1672 continue;
1673 }
1674 if(im){
1675 var _218=null;
1676 try{
1677 _218=iter(node);
1678 }
1679 catch(e){
1680 }
1681 if(_218){
1682 return map(_216,_218,_213(ctx));
1683 }
1684 }
1685 try{
1686 node=_215.match(node,ctx);
1687 continue;
1688 }
1689 catch(e){
1690 if(e!=_217){
1691 throw e;
1692 }
1693 }
1694 return self._document.createTextNode(node.toString());
1695 }
1696 return undefined;
1697 },isChildNode:function(node,_21a){
1698 var self=MochiKit.DOM;
1699 if(typeof (node)=="string"){
1700 node=self.getElement(node);
1701 }
1702 if(typeof (_21a)=="string"){
1703 _21a=self.getElement(_21a);
1704 }
1705 if(node===_21a){
1706 return true;
1707 }
1708 while(node&&node.tagName.toUpperCase()!="BODY"){
1709 node=node.parentNode;
1710 if(node===_21a){
1711 return true;
1712 }
1713 }
1714 return false;
1715 },setNodeAttribute:function(node,attr,_21e){
1716 var o={};
1717 o[attr]=_21e;
1718 try{
1719 return MochiKit.DOM.updateNodeAttributes(node,o);
1720 }
1721 catch(e){
1722 }
1723 return null;
1724 },getNodeAttribute:function(node,attr){
1725 var self=MochiKit.DOM;
1726 var _223=self.attributeArray.renames[attr];
1727 node=self.getElement(node);
1728 try{
1729 if(_223){
1730 return node[_223];
1731 }
1732 return node.getAttribute(attr);
1733 }
1734 catch(e){
1735 }
1736 return null;
1737 },removeNodeAttribute:function(node,attr){
1738 var self=MochiKit.DOM;
1739 var _227=self.attributeArray.renames[attr];
1740 node=self.getElement(node);
1741 try{
1742 if(_227){
1743 return node[_227];
1744 }
1745 return node.removeAttribute(attr);
1746 }
1747 catch(e){
1748 }
1749 return null;
1750 },updateNodeAttributes:function(node,_229){
1751 var elem=node;
1752 var self=MochiKit.DOM;
1753 if(typeof (node)=="string"){
1754 elem=self.getElement(node);
1755 }
1756 if(_229){
1757 var _22c=MochiKit.Base.updatetree;
1758 if(self.attributeArray.compliant){
1759 for(var k in _229){
1760 var v=_229[k];
1761 if(typeof (v)=="object"&&typeof (elem[k])=="object"){
1762 if(k=="style"&&MochiKit.Style){
1763 MochiKit.Style.setStyle(elem,v);
1764 }else{
1765 _22c(elem[k],v);
1766 }
1767 }else{
1768 if(k.substring(0,2)=="on"){
1769 if(typeof (v)=="string"){
1770 v=new Function(v);
1771 }
1772 elem[k]=v;
1773 }else{
1774 elem.setAttribute(k,v);
1775 }
1776 }
1777 }
1778 }else{
1779 var _22f=self.attributeArray.renames;
1780 for(var k in _229){
1781 v=_229[k];
1782 var _230=_22f[k];
1783 if(k=="style"&&typeof (v)=="string"){
1784 elem.style.cssText=v;
1785 }else{
1786 if(typeof (_230)=="string"){
1787 elem[_230]=v;
1788 }else{
1789 if(typeof (elem[k])=="object"&&typeof (v)=="object"){
1790 if(k=="style"&&MochiKit.Style){
1791 MochiKit.Style.setStyle(elem,v);
1792 }else{
1793 _22c(elem[k],v);
1794 }
1795 }else{
1796 if(k.substring(0,2)=="on"){
1797 if(typeof (v)=="string"){
1798 v=new Function(v);
1799 }
1800 elem[k]=v;
1801 }else{
1802 elem.setAttribute(k,v);
1803 }
1804 }
1805 }
1806 }
1807 }
1808 }
1809 }
1810 return elem;
1811 },appendChildNodes:function(node){
1812 var elem=node;
1813 var self=MochiKit.DOM;
1814 if(typeof (node)=="string"){
1815 elem=self.getElement(node);
1816 }
1817 var _234=[self.coerceToDOM(MochiKit.Base.extend(null,arguments,1),elem)];
1818 var _235=MochiKit.Base.concat;
1819 while(_234.length){
1820 var n=_234.shift();
1821 if(typeof (n)=="undefined"||n===null){
1822 }else{
1823 if(typeof (n.nodeType)=="number"){
1824 elem.appendChild(n);
1825 }else{
1826 _234=_235(n,_234);
1827 }
1828 }
1829 }
1830 return elem;
1831 },insertSiblingNodesBefore:function(node){
1832 var elem=node;
1833 var self=MochiKit.DOM;
1834 if(typeof (node)=="string"){
1835 elem=self.getElement(node);
1836 }
1837 var _23a=[self.coerceToDOM(MochiKit.Base.extend(null,arguments,1),elem)];
1838 var _23b=elem.parentNode;
1839 var _23c=MochiKit.Base.concat;
1840 while(_23a.length){
1841 var n=_23a.shift();
1842 if(typeof (n)=="undefined"||n===null){
1843 }else{
1844 if(typeof (n.nodeType)=="number"){
1845 _23b.insertBefore(n,elem);
1846 }else{
1847 _23a=_23c(n,_23a);
1848 }
1849 }
1850 }
1851 return _23b;
1852 },insertSiblingNodesAfter:function(node){
1853 var elem=node;
1854 var self=MochiKit.DOM;
1855 if(typeof (node)=="string"){
1856 elem=self.getElement(node);
1857 }
1858 var _241=[self.coerceToDOM(MochiKit.Base.extend(null,arguments,1),elem)];
1859 if(elem.nextSibling){
1860 return self.insertSiblingNodesBefore(elem.nextSibling,_241);
1861 }else{
1862 return self.appendChildNodes(elem.parentNode,_241);
1863 }
1864 },replaceChildNodes:function(node){
1865 var elem=node;
1866 var self=MochiKit.DOM;
1867 if(typeof (node)=="string"){
1868 elem=self.getElement(node);
1869 arguments[0]=elem;
1870 }
1871 var _245;
1872 while((_245=elem.firstChild)){
1873 elem.removeChild(_245);
1874 }
1875 if(arguments.length<2){
1876 return elem;
1877 }else{
1878 return self.appendChildNodes.apply(this,arguments);
1879 }
1880 },createDOM:function(name,_247){
1881 var elem;
1882 var self=MochiKit.DOM;
1883 var m=MochiKit.Base;
1884 if(typeof (_247)=="string"||typeof (_247)=="number"){
1885 var args=m.extend([name,null],arguments,1);
1886 return arguments.callee.apply(this,args);
1887 }
1888 if(typeof (name)=="string"){
1889 var _24c=self._xhtml;
1890 if(_247&&!self.attributeArray.compliant){
1891 var _24d="";
1892 if("name" in _247){
1893 _24d+=" name=\""+self.escapeHTML(_247.name)+"\"";
1894 }
1895 if(name=="input"&&"type" in _247){
1896 _24d+=" type=\""+self.escapeHTML(_247.type)+"\"";
1897 }
1898 if(_24d){
1899 name="<"+name+_24d+">";
1900 _24c=false;
1901 }
1902 }
1903 var d=self._document;
1904 if(_24c&&d===document){
1905 elem=d.createElementNS("http://www.w3.org/1999/xhtml",name);
1906 }else{
1907 elem=d.createElement(name);
1908 }
1909 }else{
1910 elem=name;
1911 }
1912 if(_247){
1913 self.updateNodeAttributes(elem,_247);
1914 }
1915 if(arguments.length<=2){
1916 return elem;
1917 }else{
1918 var args=m.extend([elem],arguments,2);
1919 return self.appendChildNodes.apply(this,args);
1920 }
1921 },createDOMFunc:function(){
1922 var m=MochiKit.Base;
1923 return m.partial.apply(this,m.extend([MochiKit.DOM.createDOM],arguments));
1924 },removeElement:function(elem){
1925 var e=MochiKit.DOM.getElement(elem);
1926 e.parentNode.removeChild(e);
1927 return e;
1928 },swapDOM:function(dest,src){
1929 var self=MochiKit.DOM;
1930 dest=self.getElement(dest);
1931 var _255=dest.parentNode;
1932 if(src){
1933 src=self.getElement(src);
1934 _255.replaceChild(src,dest);
1935 }else{
1936 _255.removeChild(dest);
1937 }
1938 return src;
1939 },getElement:function(id){
1940 var self=MochiKit.DOM;
1941 if(arguments.length==1){
1942 return ((typeof (id)=="string")?self._document.getElementById(id):id);
1943 }else{
1944 return MochiKit.Base.map(self.getElement,arguments);
1945 }
1946 },getElementsByTagAndClassName:function(_258,_259,_25a){
1947 var self=MochiKit.DOM;
1948 if(typeof (_258)=="undefined"||_258===null){
1949 _258="*";
1950 }
1951 if(typeof (_25a)=="undefined"||_25a===null){
1952 _25a=self._document;
1953 }
1954 _25a=self.getElement(_25a);
1955 var _25c=(_25a.getElementsByTagName(_258)||self._document.all);
1956 if(typeof (_259)=="undefined"||_259===null){
1957 return MochiKit.Base.extend(null,_25c);
1958 }
1959 var _25d=[];
1960 for(var i=0;i<_25c.length;i++){
1961 var _25f=_25c[i];
1962 var cls=_25f.className;
1963 if(!cls){
1964 continue;
1965 }
1966 var _261=cls.split(" ");
1967 for(var j=0;j<_261.length;j++){
1968 if(_261[j]==_259){
1969 _25d.push(_25f);
1970 break;
1971 }
1972 }
1973 }
1974 return _25d;
1975 },_newCallStack:function(path,once){
1976 var rval=function(){
1977 var _266=arguments.callee.callStack;
1978 for(var i=0;i<_266.length;i++){
1979 if(_266[i].apply(this,arguments)===false){
1980 break;
1981 }
1982 }
1983 if(once){
1984 try{
1985 this[path]=null;
1986 }
1987 catch(e){
1988 }
1989 }
1990 };
1991 rval.callStack=[];
1992 return rval;
1993 },addToCallStack:function(_268,path,func,once){
1994 var self=MochiKit.DOM;
1995 var _26d=_268[path];
1996 var _26e=_26d;
1997 if(!(typeof (_26d)=="function"&&typeof (_26d.callStack)=="object"&&_26d.callStack!==null)){
1998 _26e=self._newCallStack(path,once);
1999 if(typeof (_26d)=="function"){
2000 _26e.callStack.push(_26d);
2001 }
2002 _268[path]=_26e;
2003 }
2004 _26e.callStack.push(func);
2005 },addLoadEvent:function(func){
2006 var self=MochiKit.DOM;
2007 self.addToCallStack(self._window,"onload",func,true);
2008 },focusOnLoad:function(_271){
2009 var self=MochiKit.DOM;
2010 self.addLoadEvent(function(){
2011 _271=self.getElement(_271);
2012 if(_271){
2013 _271.focus();
2014 }
2015 });
2016 },setElementClass:function(_273,_274){
2017 var self=MochiKit.DOM;
2018 var obj=self.getElement(_273);
2019 if(self.attributeArray.compliant){
2020 obj.setAttribute("class",_274);
2021 }else{
2022 obj.setAttribute("className",_274);
2023 }
2024 },toggleElementClass:function(_277){
2025 var self=MochiKit.DOM;
2026 for(var i=1;i<arguments.length;i++){
2027 var obj=self.getElement(arguments[i]);
2028 if(!self.addElementClass(obj,_277)){
2029 self.removeElementClass(obj,_277);
2030 }
2031 }
2032 },addElementClass:function(_27b,_27c){
2033 var self=MochiKit.DOM;
2034 var obj=self.getElement(_27b);
2035 var cls=obj.className;
2036 if(cls==undefined||cls.length===0){
2037 self.setElementClass(obj,_27c);
2038 return true;
2039 }
2040 if(cls==_27c){
2041 return false;
2042 }
2043 var _280=cls.split(" ");
2044 for(var i=0;i<_280.length;i++){
2045 if(_280[i]==_27c){
2046 return false;
2047 }
2048 }
2049 self.setElementClass(obj,cls+" "+_27c);
2050 return true;
2051 },removeElementClass:function(_282,_283){
2052 var self=MochiKit.DOM;
2053 var obj=self.getElement(_282);
2054 var cls=obj.className;
2055 if(cls==undefined||cls.length===0){
2056 return false;
2057 }
2058 if(cls==_283){
2059 self.setElementClass(obj,"");
2060 return true;
2061 }
2062 var _287=cls.split(" ");
2063 for(var i=0;i<_287.length;i++){
2064 if(_287[i]==_283){
2065 _287.splice(i,1);
2066 self.setElementClass(obj,_287.join(" "));
2067 return true;
2068 }
2069 }
2070 return false;
2071 },swapElementClass:function(_289,_28a,_28b){
2072 var obj=MochiKit.DOM.getElement(_289);
2073 var res=MochiKit.DOM.removeElementClass(obj,_28a);
2074 if(res){
2075 MochiKit.DOM.addElementClass(obj,_28b);
2076 }
2077 return res;
2078 },hasElementClass:function(_28e,_28f){
2079 var obj=MochiKit.DOM.getElement(_28e);
2080 var cls=obj.className;
2081 if(!cls){
2082 return false;
2083 }
2084 var _292=cls.split(" ");
2085 for(var i=1;i<arguments.length;i++){
2086 var good=false;
2087 for(var j=0;j<_292.length;j++){
2088 if(_292[j]==arguments[i]){
2089 good=true;
2090 break;
2091 }
2092 }
2093 if(!good){
2094 return false;
2095 }
2096 }
2097 return true;
2098 },escapeHTML:function(s){
2099 return s.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;");
2100 },toHTML:function(dom){
2101 return MochiKit.DOM.emitHTML(dom).join("");
2102 },emitHTML:function(dom,lst){
2103 if(typeof (lst)=="undefined"||lst===null){
2104 lst=[];
2105 }
2106 var _29a=[dom];
2107 var self=MochiKit.DOM;
2108 var _29c=self.escapeHTML;
2109 var _29d=self.attributeArray;
2110 while(_29a.length){
2111 dom=_29a.pop();
2112 if(typeof (dom)=="string"){
2113 lst.push(dom);
2114 }else{
2115 if(dom.nodeType==1){
2116 lst.push("<"+dom.tagName.toLowerCase());
2117 var _29e=[];
2118 var _29f=_29d(dom);
2119 for(var i=0;i<_29f.length;i++){
2120 var a=_29f[i];
2121 _29e.push([" ",a.name,"=\"",_29c(a.value),"\""]);
2122 }
2123 _29e.sort();
2124 for(i=0;i<_29e.length;i++){
2125 var _2a2=_29e[i];
2126 for(var j=0;j<_2a2.length;j++){
2127 lst.push(_2a2[j]);
2128 }
2129 }
2130 if(dom.hasChildNodes()){
2131 lst.push(">");
2132 _29a.push("</"+dom.tagName.toLowerCase()+">");
2133 var _2a4=dom.childNodes;
2134 for(i=_2a4.length-1;i>=0;i--){
2135 _29a.push(_2a4[i]);
2136 }
2137 }else{
2138 lst.push("/>");
2139 }
2140 }else{
2141 if(dom.nodeType==3){
2142 lst.push(_29c(dom.nodeValue));
2143 }
2144 }
2145 }
2146 }
2147 return lst;
2148 },scrapeText:function(node,_2a6){
2149 var rval=[];
2150 (function(node){
2151 var cn=node.childNodes;
2152 if(cn){
2153 for(var i=0;i<cn.length;i++){
2154 arguments.callee.call(this,cn[i]);
2155 }
2156 }
2157 var _2ab=node.nodeValue;
2158 if(typeof (_2ab)=="string"){
2159 rval.push(_2ab);
2160 }
2161 })(MochiKit.DOM.getElement(node));
2162 if(_2a6){
2163 return rval;
2164 }else{
2165 return rval.join("");
2166 }
2167 },removeEmptyTextNodes:function(_2ac){
2168 _2ac=MochiKit.DOM.getElement(_2ac);
2169 for(var i=0;i<_2ac.childNodes.length;i++){
2170 var node=_2ac.childNodes[i];
2171 if(node.nodeType==3&&!/\S/.test(node.nodeValue)){
2172 node.parentNode.removeChild(node);
2173 }
2174 }
2175 },makeClipping:function(_2af){
2176 _2af=MochiKit.DOM.getElement(_2af);
2177 var _2b0=_2af.style.overflow;
2178 if((MochiKit.Style.getStyle(_2af,"overflow")||"visible")!="hidden"){
2179 _2af.style.overflow="hidden";
2180 }
2181 return _2b0;
2182 },undoClipping:function(_2b1,_2b2){
2183 _2b1=MochiKit.DOM.getElement(_2b1);
2184 if(!_2b2){
2185 return;
2186 }
2187 _2b1.style.overflow=_2b2;
2188 },makePositioned:function(_2b3){
2189 _2b3=MochiKit.DOM.getElement(_2b3);
2190 var pos=MochiKit.Style.getStyle(_2b3,"position");
2191 if(pos=="static"||!pos){
2192 _2b3.style.position="relative";
2193 if(/Opera/.test(navigator.userAgent)){
2194 _2b3.style.top=0;
2195 _2b3.style.left=0;
2196 }
2197 }
2198 },undoPositioned:function(_2b5){
2199 _2b5=MochiKit.DOM.getElement(_2b5);
2200 if(_2b5.style.position=="relative"){
2201 _2b5.style.position=_2b5.style.top=_2b5.style.left=_2b5.style.bottom=_2b5.style.right="";
2202 }
2203 },getFirstElementByTagAndClassName:function(_2b6,_2b7,_2b8){
2204 var self=MochiKit.DOM;
2205 if(typeof (_2b6)=="undefined"||_2b6===null){
2206 _2b6="*";
2207 }
2208 if(typeof (_2b8)=="undefined"||_2b8===null){
2209 _2b8=self._document;
2210 }
2211 _2b8=self.getElement(_2b8);
2212 var _2ba=(_2b8.getElementsByTagName(_2b6)||self._document.all);
2213 if(typeof (_2b7)=="undefined"||_2b7===null){
2214 return _2ba[0];
2215 }
2216 for(var i=0;i<_2ba.length;i++){
2217 var _2bc=_2ba[i];
2218 var _2bd=_2bc.className.split(" ");
2219 for(var j=0;j<_2bd.length;j++){
2220 if(_2bd[j]==_2b7){
2221 return _2bc;
2222 }
2223 }
2224 }
2225 },getFirstParentByTagAndClassName:function(elem,_2c0,_2c1){
2226 var self=MochiKit.DOM;
2227 elem=self.getElement(elem);
2228 if(typeof (_2c0)=="undefined"||_2c0===null){
2229 _2c0="*";
2230 }else{
2231 _2c0=_2c0.toUpperCase();
2232 }
2233 if(typeof (_2c1)=="undefined"||_2c1===null){
2234 _2c1=null;
2235 }
2236 var _2c3="";
2237 var _2c4="";
2238 while(elem&&elem.tagName){
2239 elem=elem.parentNode;
2240 if(_2c0=="*"&&_2c1===null){
2241 return elem;
2242 }
2243 _2c3=elem.className.split(" ");
2244 _2c4=elem.tagName.toUpperCase();
2245 if(_2c1===null&&_2c0==_2c4){
2246 return elem;
2247 }else{
2248 if(_2c1!==null){
2249 for(var i=0;i<_2c3.length;i++){
2250 if(_2c0=="*"&&_2c3[i]==_2c1){
2251 return elem;
2252 }else{
2253 if(_2c0==_2c4&&_2c3[i]==_2c1){
2254 return elem;
2255 }
2256 }
2257 }
2258 }
2259 }
2260 }
2261 return elem;
2262 },isParent:function(_2c6,_2c7){
2263 if(!_2c6.parentNode||_2c6==_2c7){
2264 return false;
2265 }
2266 if(_2c6.parentNode==_2c7){
2267 return true;
2268 }
2269 return MochiKit.DOM.isParent(_2c6.parentNode,_2c7);
2270 },__new__:function(win){
2271 var m=MochiKit.Base;
2272 if(typeof (document)!="undefined"){
2273 this._document=document;
2274 var _2ca="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
2275 this._xhtml=(document.documentElement&&document.createElementNS&&document.documentElement.namespaceURI===_2ca);
2276 }else{
2277 if(MochiKit.MockDOM){
2278 this._document=MochiKit.MockDOM.document;
2279 }
2280 }
2281 this._window=win;
2282 this.domConverters=new m.AdapterRegistry();
2283 var _2cb=this._document.createElement("span");
2284 var _2cc;
2285 if(_2cb&&_2cb.attributes&&_2cb.attributes.length>0){
2286 var _2cd=m.filter;
2287 _2cc=function(node){
2288 return _2cd(_2cc.ignoreAttrFilter,node.attributes);
2289 };
2290 _2cc.ignoreAttr={};
2291 var _2cf=_2cb.attributes;
2292 var _2d0=_2cc.ignoreAttr;
2293 for(var i=0;i<_2cf.length;i++){
2294 var a=_2cf[i];
2295 _2d0[a.name]=a.value;
2296 }
2297 _2cc.ignoreAttrFilter=function(a){
2298 return (_2cc.ignoreAttr[a.name]!=a.value);
2299 };
2300 _2cc.compliant=false;
2301 _2cc.renames={"class":"className","checked":"defaultChecked","usemap":"useMap","for":"htmlFor","readonly":"readOnly","colspan":"colSpan","bgcolor":"bgColor","cellspacing":"cellSpacing","cellpadding":"cellPadding"};
2302 }else{
2303 _2cc=function(node){
2304 return node.attributes;
2305 };
2306 _2cc.compliant=true;
2307 _2cc.renames={};
2308 }
2309 this.attributeArray=_2cc;
2310 var _2d5=function(_2d6,arr){
2311 var _2d8=arr[1].split(".");
2312 var str="";
2313 var obj={};
2314 str+="if (!MochiKit."+_2d8[1]+") { throw new Error(\"";
2315 str+="This function has been deprecated and depends on MochiKit.";
2316 str+=_2d8[1]+".\");}";
2317 str+="return MochiKit."+_2d8[1]+"."+arr[0];
2318 str+=".apply(this, arguments);";
2319 obj[_2d8[2]]=new Function(str);
2320 MochiKit.Base.update(MochiKit[_2d6],obj);
2321 };
2322 for(var i;i<MochiKit.DOM.DEPRECATED.length;i++){
2323 _2d5("DOM",MochiKit.DOM.DEPRECATED[i]);
2324 }
2325 var _2db=this.createDOMFunc;
2326 this.UL=_2db("ul");
2327 this.OL=_2db("ol");
2328 this.LI=_2db("li");
2329 this.TD=_2db("td");
2330 this.TR=_2db("tr");
2331 this.TBODY=_2db("tbody");
2332 this.THEAD=_2db("thead");
2333 this.TFOOT=_2db("tfoot");
2334 this.TABLE=_2db("table");
2335 this.TH=_2db("th");
2336 this.INPUT=_2db("input");
2337 this.SPAN=_2db("span");
2338 this.A=_2db("a");
2339 this.DIV=_2db("div");
2340 this.IMG=_2db("img");
2341 this.BUTTON=_2db("button");
2342 this.TT=_2db("tt");
2343 this.PRE=_2db("pre");
2344 this.H1=_2db("h1");
2345 this.H2=_2db("h2");
2346 this.H3=_2db("h3");
2347 this.BR=_2db("br");
2348 this.HR=_2db("hr");
2349 this.LABEL=_2db("label");
2350 this.TEXTAREA=_2db("textarea");
2351 this.FORM=_2db("form");
2352 this.P=_2db("p");
2353 this.SELECT=_2db("select");
2354 this.OPTION=_2db("option");
2355 this.OPTGROUP=_2db("optgroup");
2356 this.LEGEND=_2db("legend");
2357 this.FIELDSET=_2db("fieldset");
2358 this.STRONG=_2db("strong");
2359 this.CANVAS=_2db("canvas");
2360 this.$=this.getElement;
2361 this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)};
2362 m.nameFunctions(this);
2363 }});
2364 MochiKit.DOM.__new__(((typeof (window)=="undefined")?this:window));
2365 if(MochiKit.__export__){
2366 withWindow=MochiKit.DOM.withWindow;
2367 withDocument=MochiKit.DOM.withDocument;
2368 }
2369 MochiKit.Base._exportSymbols(this,MochiKit.DOM);
2370 if(typeof (dojo)!="undefined"){
2371 dojo.provide("MochiKit.Style");
2372 dojo.require("MochiKit.Base");
2373 dojo.require("MochiKit.DOM");
2374 }
2375 if(typeof (JSAN)!="undefined"){
2376 JSAN.use("MochiKit.Base",[]);
2377 JSAN.use("MochiKit.DOM",[]);
2378 }
2379 try{
2380 if(typeof (MochiKit.Base)=="undefined"){
2381 throw "";
2382 }
2383 }
2384 catch(e){
2385 throw "MochiKit.Style depends on MochiKit.Base!";
2386 }
2387 try{
2388 if(typeof (MochiKit.DOM)=="undefined"){
2389 throw "";
2390 }
2391 }
2392 catch(e){
2393 throw "MochiKit.Style depends on MochiKit.DOM!";
2394 }
2395 if(typeof (MochiKit.Style)=="undefined"){
2396 MochiKit.Style={};
2397 }
2398 MochiKit.Style.NAME="MochiKit.Style";
2399 MochiKit.Style.VERSION="1.4";
2400 MochiKit.Style.__repr__=function(){
2401 return "["+this.NAME+" "+this.VERSION+"]";
2402 };
2403 MochiKit.Style.toString=function(){
2404 return this.__repr__();
2405 };
2406 MochiKit.Style.EXPORT_OK=[];
2407 MochiKit.Style.EXPORT=["setStyle","setOpacity","getStyle","getElementDimensions","elementDimensions","setElementDimensions","getElementPosition","elementPosition","setElementPosition","setDisplayForElement","hideElement","showElement","getViewportDimensions","getViewportPosition","Dimensions","Coordinates"];
2408 MochiKit.Style.Dimensions=function(w,h){
2409 this.w=w;
2410 this.h=h;
2411 };
2412 MochiKit.Style.Dimensions.prototype.__repr__=function(){
2413 var repr=MochiKit.Base.repr;
2414 return "{w: "+repr(this.w)+", h: "+repr(this.h)+"}";
2415 };
2416 MochiKit.Style.Dimensions.prototype.toString=function(){
2417 return this.__repr__();
2418 };
2419 MochiKit.Style.Coordinates=function(x,y){
2420 this.x=x;
2421 this.y=y;
2422 };
2423 MochiKit.Style.Coordinates.prototype.__repr__=function(){
2424 var repr=MochiKit.Base.repr;
2425 return "{x: "+repr(this.x)+", y: "+repr(this.y)+"}";
2426 };
2427 MochiKit.Style.Coordinates.prototype.toString=function(){
2428 return this.__repr__();
2429 };
2430 MochiKit.Base.update(MochiKit.Style,{getStyle:function(elem,_2e3){
2431 var dom=MochiKit.DOM;
2432 var d=dom._document;
2433 elem=dom.getElement(elem);
2434 _2e3=MochiKit.Base.camelize(_2e3);
2435 if(!elem||elem==d){
2436 return undefined;
2437 }
2438 if(_2e3=="opacity"&&elem.filters){
2439 var _2e6=(MochiKit.Style.getStyle(elem,"filter")||"").match(/alpha\(opacity=(.*)\)/);
2440 if(_2e6&&_2e6[1]){
2441 return parseFloat(_2e6[1])/100;
2442 }
2443 return 1;
2444 }
2445 var _2e7=elem.style?elem.style[_2e3]:null;
2446 if(!_2e7){
2447 if(d.defaultView&&d.defaultView.getComputedStyle){
2448 var css=d.defaultView.getComputedStyle(elem,null);
2449 _2e3=_2e3.replace(/([A-Z])/g,"-$1").toLowerCase();
2450 _2e7=css?css.getPropertyValue(_2e3):null;
2451 }else{
2452 if(elem.currentStyle){
2453 _2e7=elem.currentStyle[_2e3];
2454 }
2455 }
2456 }
2457 if(_2e3=="opacity"){
2458 _2e7=parseFloat(_2e7);
2459 }
2460 if(/Opera/.test(navigator.userAgent)&&(MochiKit.Base.find(["left","top","right","bottom"],_2e3)!=-1)){
2461 if(MochiKit.Style.getStyle(elem,"position")=="static"){
2462 _2e7="auto";
2463 }
2464 }
2465 return _2e7=="auto"?null:_2e7;
2466 },setStyle:function(elem,_2ea){
2467 elem=MochiKit.DOM.getElement(elem);
2468 for(var name in _2ea){
2469 if(name=="opacity"){
2470 MochiKit.Style.setOpacity(elem,_2ea[name]);
2471 }else{
2472 elem.style[MochiKit.Base.camelize(name)]=_2ea[name];
2473 }
2474 }
2475 },setOpacity:function(elem,o){
2476 elem=MochiKit.DOM.getElement(elem);
2477 var self=MochiKit.Style;
2478 if(o==1){
2479 var _2ef=/Gecko/.test(navigator.userAgent)&&!(/Konqueror|AppleWebKit|KHTML/.test(navigator.userAgent));
2480 elem.style["opacity"]=_2ef?0.999999:1;
2481 if(/MSIE/.test(navigator.userAgent)){
2482 elem.style["filter"]=self.getStyle(elem,"filter").replace(/alpha\([^\)]*\)/gi,"");
2483 }
2484 }else{
2485 if(o<0.00001){
2486 o=0;
2487 }
2488 elem.style["opacity"]=o;
2489 if(/MSIE/.test(navigator.userAgent)){
2490 elem.style["filter"]=self.getStyle(elem,"filter").replace(/alpha\([^\)]*\)/gi,"")+"alpha(opacity="+o*100+")";
2491 }
2492 }
2493 },getElementPosition:function(elem,_2f1){
2494 var self=MochiKit.Style;
2495 var dom=MochiKit.DOM;
2496 elem=dom.getElement(elem);
2497 if(!elem||(!(elem.x&&elem.y)&&(!elem.parentNode===null||self.getStyle(elem,"display")=="none"))){
2498 return undefined;
2499 }
2500 var c=new self.Coordinates(0,0);
2501 var box=null;
2502 var _2f6=null;
2503 var d=MochiKit.DOM._document;
2504 var de=d.documentElement;
2505 var b=d.body;
2506 if(!elem.parentNode&&elem.x&&elem.y){
2507 c.x+=elem.x||0;
2508 c.y+=elem.y||0;
2509 }else{
2510 if(elem.getBoundingClientRect){
2511 box=elem.getBoundingClientRect();
2512 c.x+=box.left+(de.scrollLeft||b.scrollLeft)-(de.clientLeft||0);
2513 c.y+=box.top+(de.scrollTop||b.scrollTop)-(de.clientTop||0);
2514 }else{
2515 if(elem.offsetParent){
2516 c.x+=elem.offsetLeft;
2517 c.y+=elem.offsetTop;
2518 _2f6=elem.offsetParent;
2519 if(_2f6!=elem){
2520 while(_2f6){
2521 c.x+=_2f6.offsetLeft;
2522 c.y+=_2f6.offsetTop;
2523 _2f6=_2f6.offsetParent;
2524 }
2525 }
2526 var ua=navigator.userAgent.toLowerCase();
2527 if((typeof (opera)!="undefined"&&parseFloat(opera.version())<9)||(ua.indexOf("AppleWebKit")!=-1&&self.getStyle(elem,"position")=="absolute")){
2528 c.x-=b.offsetLeft;
2529 c.y-=b.offsetTop;
2530 }
2531 }
2532 }
2533 }
2534 if(typeof (_2f1)!="undefined"){
2535 _2f1=arguments.callee(_2f1);
2536 if(_2f1){
2537 c.x-=(_2f1.x||0);
2538 c.y-=(_2f1.y||0);
2539 }
2540 }
2541 if(elem.parentNode){
2542 _2f6=elem.parentNode;
2543 }else{
2544 _2f6=null;
2545 }
2546 while(_2f6){
2547 var _2fb=_2f6.tagName.toUpperCase();
2548 if(_2fb==="BODY"||_2fb==="HTML"){
2549 break;
2550 }
2551 var disp=self.getStyle(_2f6,"display");
2552 if(disp!="inline"&&disp!="table-row"){
2553 c.x-=_2f6.scrollLeft;
2554 c.y-=_2f6.scrollTop;
2555 }
2556 if(_2f6.parentNode){
2557 _2f6=_2f6.parentNode;
2558 }else{
2559 _2f6=null;
2560 }
2561 }
2562 return c;
2563 },setElementPosition:function(elem,_2fe,_2ff){
2564 elem=MochiKit.DOM.getElement(elem);
2565 if(typeof (_2ff)=="undefined"){
2566 _2ff="px";
2567 }
2568 var _300={};
2569 var _301=MochiKit.Base.isUndefinedOrNull;
2570 if(!_301(_2fe.x)){
2571 _300["left"]=_2fe.x+_2ff;
2572 }
2573 if(!_301(_2fe.y)){
2574 _300["top"]=_2fe.y+_2ff;
2575 }
2576 MochiKit.DOM.updateNodeAttributes(elem,{"style":_300});
2577 },getElementDimensions:function(elem){
2578 var self=MochiKit.Style;
2579 var dom=MochiKit.DOM;
2580 if(typeof (elem.w)=="number"||typeof (elem.h)=="number"){
2581 return new self.Dimensions(elem.w||0,elem.h||0);
2582 }
2583 elem=dom.getElement(elem);
2584 if(!elem){
2585 return undefined;
2586 }
2587 var disp=self.getStyle(elem,"display");
2588 if(disp!="none"&&disp!==""&&typeof (disp)!="undefined"){
2589 return new self.Dimensions(elem.offsetWidth||0,elem.offsetHeight||0);
2590 }
2591 var s=elem.style;
2592 var _307=s.visibility;
2593 var _308=s.position;
2594 s.visibility="hidden";
2595 s.position="absolute";
2596 s.display="";
2597 var _309=elem.offsetWidth;
2598 var _30a=elem.offsetHeight;
2599 s.display="none";
2600 s.position=_308;
2601 s.visibility=_307;
2602 return new self.Dimensions(_309,_30a);
2603 },setElementDimensions:function(elem,_30c,_30d){
2604 elem=MochiKit.DOM.getElement(elem);
2605 if(typeof (_30d)=="undefined"){
2606 _30d="px";
2607 }
2608 var _30e={};
2609 var _30f=MochiKit.Base.isUndefinedOrNull;
2610 if(!_30f(_30c.w)){
2611 _30e["width"]=_30c.w+_30d;
2612 }
2613 if(!_30f(_30c.h)){
2614 _30e["height"]=_30c.h+_30d;
2615 }
2616 MochiKit.DOM.updateNodeAttributes(elem,{"style":_30e});
2617 },setDisplayForElement:function(_310,_311){
2618 var _312=MochiKit.Base.extend(null,arguments,1);
2619 var _313=MochiKit.DOM.getElement;
2620 for(var i=0;i<_312.length;i++){
2621 _311=_313(_312[i]);
2622 if(_311){
2623 _311.style.display=_310;
2624 }
2625 }
2626 },getViewportDimensions:function(){
2627 var d=new MochiKit.Style.Dimensions();
2628 var w=MochiKit.DOM._window;
2629 var b=MochiKit.DOM._document.body;
2630 if(w.innerWidth){
2631 d.w=w.innerWidth;
2632 d.h=w.innerHeight;
2633 }else{
2634 if(b.parentElement.clientWidth){
2635 d.w=b.parentElement.clientWidth;
2636 d.h=b.parentElement.clientHeight;
2637 }else{
2638 if(b&&b.clientWidth){
2639 d.w=b.clientWidth;
2640 d.h=b.clientHeight;
2641 }
2642 }
2643 }
2644 return d;
2645 },getViewportPosition:function(){
2646 var c=new MochiKit.Style.Coordinates(0,0);
2647 var d=MochiKit.DOM._document;
2648 var de=d.documentElement;
2649 var db=d.body;
2650 if(de&&(de.scrollTop||de.scrollLeft)){
2651 c.x=de.scrollLeft;
2652 c.y=de.scrollTop;
2653 }else{
2654 if(db){
2655 c.x=db.scrollLeft;
2656 c.y=db.scrollTop;
2657 }
2658 }
2659 return c;
2660 },__new__:function(){
2661 var m=MochiKit.Base;
2662 this.elementPosition=this.getElementPosition;
2663 this.elementDimensions=this.getElementDimensions;
2664 this.hideElement=m.partial(this.setDisplayForElement,"none");
2665 this.showElement=m.partial(this.setDisplayForElement,"block");
2666 this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)};
2667 m.nameFunctions(this);
2668 }});
2669 MochiKit.Style.__new__();
2670 MochiKit.Base._exportSymbols(this,MochiKit.Style);
2671 if(typeof (dojo)!="undefined"){
2672 dojo.provide("MochiKit.Signal");
2673 dojo.require("MochiKit.Base");
2674 dojo.require("MochiKit.DOM");
2675 dojo.require("MochiKit.Style");
2676 }
2677 if(typeof (JSAN)!="undefined"){
2678 JSAN.use("MochiKit.Base",[]);
2679 JSAN.use("MochiKit.DOM",[]);
2680 JSAN.use("MochiKit.Style",[]);
2681 }
2682 try{
2683 if(typeof (MochiKit.Base)=="undefined"){
2684 throw "";
2685 }
2686 }
2687 catch(e){
2688 throw "MochiKit.Signal depends on MochiKit.Base!";
2689 }
2690 try{
2691 if(typeof (MochiKit.DOM)=="undefined"){
2692 throw "";
2693 }
2694 }
2695 catch(e){
2696 throw "MochiKit.Signal depends on MochiKit.DOM!";
2697 }
2698 try{
2699 if(typeof (MochiKit.Style)=="undefined"){
2700 throw "";
2701 }
2702 }
2703 catch(e){
2704 throw "MochiKit.Signal depends on MochiKit.Style!";
2705 }
2706 if(typeof (MochiKit.Signal)=="undefined"){
2707 MochiKit.Signal={};
2708 }
2709 MochiKit.Signal.NAME="MochiKit.Signal";
2710 MochiKit.Signal.VERSION="1.4";
2711 MochiKit.Signal._observers=[];
2712 MochiKit.Signal.Event=function(src,e){
2713 this._event=e||window.event;
2714 this._src=src;
2715 };
2716 MochiKit.Base.update(MochiKit.Signal.Event.prototype,{__repr__:function(){
2717 var repr=MochiKit.Base.repr;
2718 var str="{event(): "+repr(this.event())+", src(): "+repr(this.src())+", type(): "+repr(this.type())+", target(): "+repr(this.target());
2719 if(this.type()&&this.type().indexOf("key")===0||this.type().indexOf("mouse")===0||this.type().indexOf("click")!=-1||this.type()=="contextmenu"){
2720 str+=", modifier(): "+"{alt: "+repr(this.modifier().alt)+", ctrl: "+repr(this.modifier().ctrl)+", meta: "+repr(this.modifier().meta)+", shift: "+repr(this.modifier().shift)+", any: "+repr(this.modifier().any)+"}";
2721 }
2722 if(this.type()&&this.type().indexOf("key")===0){
2723 str+=", key(): {code: "+repr(this.key().code)+", string: "+repr(this.key().string)+"}";
2724 }
2725 if(this.type()&&(this.type().indexOf("mouse")===0||this.type().indexOf("click")!=-1||this.type()=="contextmenu")){
2726 str+=", mouse(): {page: "+repr(this.mouse().page)+", client: "+repr(this.mouse().client);
2727 if(this.type()!="mousemove"){
2728 str+=", button: {left: "+repr(this.mouse().button.left)+", middle: "+repr(this.mouse().button.middle)+", right: "+repr(this.mouse().button.right)+"}}";
2729 }else{
2730 str+="}";
2731 }
2732 }
2733 if(this.type()=="mouseover"||this.type()=="mouseout"){
2734 str+=", relatedTarget(): "+repr(this.relatedTarget());
2735 }
2736 str+="}";
2737 return str;
2738 },toString:function(){
2739 return this.__repr__();
2740 },src:function(){
2741 return this._src;
2742 },event:function(){
2743 return this._event;
2744 },type:function(){
2745 return this._event.type||undefined;
2746 },target:function(){
2747 return this._event.target||this._event.srcElement;
2748 },_relatedTarget:null,relatedTarget:function(){
2749 if(this._relatedTarget!==null){
2750 return this._relatedTarget;
2751 }
2752 var elem=null;
2753 if(this.type()=="mouseover"){
2754 elem=(this._event.relatedTarget||this._event.fromElement);
2755 }else{
2756 if(this.type()=="mouseout"){
2757 elem=(this._event.relatedTarget||this._event.toElement);
2758 }
2759 }
2760 if(elem!==null){
2761 this._relatedTarget=elem;
2762 return elem;
2763 }
2764 return undefined;
2765 },_modifier:null,modifier:function(){
2766 if(this._modifier!==null){
2767 return this._modifier;
2768 }
2769 var m={};
2770 m.alt=this._event.altKey;
2771 m.ctrl=this._event.ctrlKey;
2772 m.meta=this._event.metaKey||false;
2773 m.shift=this._event.shiftKey;
2774 m.any=m.alt||m.ctrl||m.shift||m.meta;
2775 this._modifier=m;
2776 return m;
2777 },_key:null,key:function(){
2778 if(this._key!==null){
2779 return this._key;
2780 }
2781 var k={};
2782 if(this.type()&&this.type().indexOf("key")===0){
2783 if(this.type()=="keydown"||this.type()=="keyup"){
2784 k.code=this._event.keyCode;
2785 k.string=(MochiKit.Signal._specialKeys[k.code]||"KEY_UNKNOWN");
2786 this._key=k;
2787 return k;
2788 }else{
2789 if(this.type()=="keypress"){
2790 k.code=0;
2791 k.string="";
2792 if(typeof (this._event.charCode)!="undefined"&&this._event.charCode!==0&&!MochiKit.Signal._specialMacKeys[this._event.charCode]){
2793 k.code=this._event.charCode;
2794 k.string=String.fromCharCode(k.code);
2795 }else{
2796 if(this._event.keyCode&&typeof (this._event.charCode)=="undefined"){
2797 k.code=this._event.keyCode;
2798 k.string=String.fromCharCode(k.code);
2799 }
2800 }
2801 this._key=k;
2802 return k;
2803 }
2804 }
2805 }
2806 return undefined;
2807 },_mouse:null,mouse:function(){
2808 if(this._mouse!==null){
2809 return this._mouse;
2810 }
2811 var m={};
2812 var e=this._event;
2813 if(this.type()&&(this.type().indexOf("mouse")===0||this.type().indexOf("click")!=-1||this.type()=="contextmenu")){
2814 m.client=new MochiKit.Style.Coordinates(0,0);
2815 if(e.clientX||e.clientY){
2816 m.client.x=(!e.clientX||e.clientX<0)?0:e.clientX;
2817 m.client.y=(!e.clientY||e.clientY<0)?0:e.clientY;
2818 }
2819 m.page=new MochiKit.Style.Coordinates(0,0);
2820 if(e.pageX||e.pageY){
2821 m.page.x=(!e.pageX||e.pageX<0)?0:e.pageX;
2822 m.page.y=(!e.pageY||e.pageY<0)?0:e.pageY;
2823 }else{
2824 var de=MochiKit.DOM._document.documentElement;
2825 var b=MochiKit.DOM._document.body;
2826 m.page.x=e.clientX+(de.scrollLeft||b.scrollLeft)-(de.clientLeft||0);
2827 m.page.y=e.clientY+(de.scrollTop||b.scrollTop)-(de.clientTop||0);
2828 }
2829 if(this.type()!="mousemove"){
2830 m.button={};
2831 m.button.left=false;
2832 m.button.right=false;
2833 m.button.middle=false;
2834 if(e.which){
2835 m.button.left=(e.which==1);
2836 m.button.middle=(e.which==2);
2837 m.button.right=(e.which==3);
2838 }else{
2839 m.button.left=!!(e.button&1);
2840 m.button.right=!!(e.button&2);
2841 m.button.middle=!!(e.button&4);
2842 }
2843 }
2844 this._mouse=m;
2845 return m;
2846 }
2847 return undefined;
2848 },stop:function(){
2849 this.stopPropagation();
2850 this.preventDefault();
2851 },stopPropagation:function(){
2852 if(this._event.stopPropagation){
2853 this._event.stopPropagation();
2854 }else{
2855 this._event.cancelBubble=true;
2856 }
2857 },preventDefault:function(){
2858 if(this._event.preventDefault){
2859 this._event.preventDefault();
2860 }else{
2861 if(this._confirmUnload===null){
2862 this._event.returnValue=false;
2863 }
2864 }
2865 },_confirmUnload:null,confirmUnload:function(msg){
2866 if(this.type()=="beforeunload"){
2867 this._confirmUnload=msg;
2868 this._event.returnValue=msg;
2869 }
2870 }});
2871 MochiKit.Signal._specialMacKeys={3:"KEY_ENTER",63289:"KEY_NUM_PAD_CLEAR",63276:"KEY_PAGE_UP",63277:"KEY_PAGE_DOWN",63275:"KEY_END",63273:"KEY_HOME",63234:"KEY_ARROW_LEFT",63232:"KEY_ARROW_UP",63235:"KEY_ARROW_RIGHT",63233:"KEY_ARROW_DOWN",63302:"KEY_INSERT",63272:"KEY_DELETE"};
2872 (function(){
2873 var _329=MochiKit.Signal._specialMacKeys;
2874 for(i=63236;i<=63242;i++){
2875 _329[i]="KEY_F"+(i-63236+1);
2876 }
2877 })();
2878 MochiKit.Signal._specialKeys={8:"KEY_BACKSPACE",9:"KEY_TAB",12:"KEY_NUM_PAD_CLEAR",13:"KEY_ENTER",16:"KEY_SHIFT",17:"KEY_CTRL",18:"KEY_ALT",19:"KEY_PAUSE",20:"KEY_CAPS_LOCK",27:"KEY_ESCAPE",32:"KEY_SPACEBAR",33:"KEY_PAGE_UP",34:"KEY_PAGE_DOWN",35:"KEY_END",36:"KEY_HOME",37:"KEY_ARROW_LEFT",38:"KEY_ARROW_UP",39:"KEY_ARROW_RIGHT",40:"KEY_ARROW_DOWN",44:"KEY_PRINT_SCREEN",45:"KEY_INSERT",46:"KEY_DELETE",59:"KEY_SEMICOLON",91:"KEY_WINDOWS_LEFT",92:"KEY_WINDOWS_RIGHT",93:"KEY_SELECT",106:"KEY_NUM_PAD_ASTERISK",107:"KEY_NUM_PAD_PLUS_SIGN",109:"KEY_NUM_PAD_HYPHEN-MINUS",110:"KEY_NUM_PAD_FULL_STOP",111:"KEY_NUM_PAD_SOLIDUS",144:"KEY_NUM_LOCK",145:"KEY_SCROLL_LOCK",186:"KEY_SEMICOLON",187:"KEY_EQUALS_SIGN",188:"KEY_COMMA",189:"KEY_HYPHEN-MINUS",190:"KEY_FULL_STOP",191:"KEY_SOLIDUS",192:"KEY_GRAVE_ACCENT",219:"KEY_LEFT_SQUARE_BRACKET",220:"KEY_REVERSE_SOLIDUS",221:"KEY_RIGHT_SQUARE_BRACKET",222:"KEY_APOSTROPHE"};
2879 (function(){
2880 var _32a=MochiKit.Signal._specialKeys;
2881 for(var i=48;i<=57;i++){
2882 _32a[i]="KEY_"+(i-48);
2883 }
2884 for(i=65;i<=90;i++){
2885 _32a[i]="KEY_"+String.fromCharCode(i);
2886 }
2887 for(i=96;i<=105;i++){
2888 _32a[i]="KEY_NUM_PAD_"+(i-96);
2889 }
2890 for(i=112;i<=123;i++){
2891 _32a[i]="KEY_F"+(i-112+1);
2892 }
2893 })();
2894 MochiKit.Signal.Ident=function(_32c){
2895 this.source=_32c.source;
2896 this.signal=_32c.signal;
2897 this.listener=_32c.listener;
2898 this.isDOM=_32c.isDOM;
2899 this.objOrFunc=_32c.objOrFunc;
2900 this.funcOrStr=_32c.funcOrStr;
2901 this.connected=_32c.connected;
2902 };
2903 MochiKit.Signal.Ident.prototype={};
2904 MochiKit.Base.update(MochiKit.Signal,{__repr__:function(){
2905 return "["+this.NAME+" "+this.VERSION+"]";
2906 },toString:function(){
2907 return this.__repr__();
2908 },_unloadCache:function(){
2909 var self=MochiKit.Signal;
2910 var _32e=self._observers;
2911 for(var i=0;i<_32e.length;i++){
2912 if(_32e[i].signal!=="onload"&&_32e[i].signal!=="onunload"){
2913 self._disconnect(_32e[i]);
2914 }
2915 }
2916 },_listener:function(src,sig,func,obj,_334){
2917 var self=MochiKit.Signal;
2918 var E=self.Event;
2919 if(!_334){
2920 return MochiKit.Base.bind(func,obj);
2921 }
2922 obj=obj||src;
2923 if(typeof (func)=="string"){
2924 if(sig==="onload"||sig==="onunload"){
2925 return function(_337){
2926 obj[func].apply(obj,[new E(src,_337)]);
2927 var _338=new MochiKit.Signal.Ident({source:src,signal:sig,objOrFunc:obj,funcOrStr:func});
2928 MochiKit.Signal._disconnect(_338);
2929 };
2930 }else{
2931 return function(_339){
2932 obj[func].apply(obj,[new E(src,_339)]);
2933 };
2934 }
2935 }else{
2936 if(sig==="onload"||sig==="onunload"){
2937 return function(_33a){
2938 func.apply(obj,[new E(src,_33a)]);
2939 MochiKit.Signal.disconnect(src,sig,func);
2940 var _33b=new MochiKit.Signal.Ident({source:src,signal:sig,objOrFunc:func});
2941 MochiKit.Signal._disconnect(_33b);
2942 };
2943 }else{
2944 return function(_33c){
2945 func.apply(obj,[new E(src,_33c)]);
2946 };
2947 }
2948 }
2949 },_browserAlreadyHasMouseEnterAndLeave:function(){
2950 return /MSIE/.test(navigator.userAgent);
2951 },_mouseEnterListener:function(src,sig,func,obj){
2952 var E=MochiKit.Signal.Event;
2953 return function(_342){
2954 var e=new E(src,_342);
2955 try{
2956 e.relatedTarget().nodeName;
2957 }
2958 catch(err){
2959 return;
2960 }
2961 e.stop();
2962 if(MochiKit.DOM.isChildNode(e.relatedTarget(),src)){
2963 return;
2964 }
2965 e.type=function(){
2966 return sig;
2967 };
2968 if(typeof (func)=="string"){
2969 return obj[func].apply(obj,[e]);
2970 }else{
2971 return func.apply(obj,[e]);
2972 }
2973 };
2974 },_getDestPair:function(_344,_345){
2975 var obj=null;
2976 var func=null;
2977 if(typeof (_345)!="undefined"){
2978 obj=_344;
2979 func=_345;
2980 if(typeof (_345)=="string"){
2981 if(typeof (_344[_345])!="function"){
2982 throw new Error("'funcOrStr' must be a function on 'objOrFunc'");
2983 }
2984 }else{
2985 if(typeof (_345)!="function"){
2986 throw new Error("'funcOrStr' must be a function or string");
2987 }
2988 }
2989 }else{
2990 if(typeof (_344)!="function"){
2991 throw new Error("'objOrFunc' must be a function if 'funcOrStr' is not given");
2992 }else{
2993 func=_344;
2994 }
2995 }
2996 return [obj,func];
2997 },connect:function(src,sig,_34a,_34b){
2998 var self=MochiKit.Signal;
2999 if(typeof (sig)!="string"){
3000 throw new Error("'sig' must be a string");
3001 }
3002 var _34d=self._getDestPair(_34a,_34b);
3003 var obj=_34d[0];
3004 var func=_34d[1];
3005 if(typeof (obj)=="undefined"||obj===null){
3006 obj=src;
3007 }
3008 var _350=!!(src.addEventListener||src.attachEvent);
3009 if(_350&&(sig==="onmouseenter"||sig==="onmouseleave")&&!self._browserAlreadyHasMouseEnterAndLeave()){
3010 var _351=self._mouseEnterListener(src,sig.substr(2),func,obj);
3011 if(sig==="onmouseenter"){
3012 sig="onmouseover";
3013 }else{
3014 sig="onmouseout";
3015 }
3016 }else{
3017 var _351=self._listener(src,sig,func,obj,_350);
3018 }
3019 if(src.addEventListener){
3020 src.addEventListener(sig.substr(2),_351,false);
3021 }else{
3022 if(src.attachEvent){
3023 src.attachEvent(sig,_351);
3024 }
3025 }
3026 var _352=new MochiKit.Signal.Ident({source:src,signal:sig,listener:_351,isDOM:_350,objOrFunc:_34a,funcOrStr:_34b,connected:true});
3027 self._observers.push(_352);
3028 if(!_350&&typeof (src.__connect__)=="function"){
3029 var args=MochiKit.Base.extend([_352],arguments,1);
3030 src.__connect__.apply(src,args);
3031 }
3032 return _352;
3033 },_disconnect:function(_354){
3034 if(!_354.connected){
3035 return;
3036 }
3037 _354.connected=false;
3038 if(!_354.isDOM){
3039 return;
3040 }
3041 var src=_354.source;
3042 var sig=_354.signal;
3043 var _357=_354.listener;
3044 if(src.removeEventListener){
3045 src.removeEventListener(sig.substr(2),_357,false);
3046 }else{
3047 if(src.detachEvent){
3048 src.detachEvent(sig,_357);
3049 }else{
3050 throw new Error("'src' must be a DOM element");
3051 }
3052 }
3053 },disconnect:function(_358){
3054 var self=MochiKit.Signal;
3055 var _35a=self._observers;
3056 var m=MochiKit.Base;
3057 if(arguments.length>1){
3058 var src=MochiKit.DOM.getElement(arguments[0]);
3059 var sig=arguments[1];
3060 var obj=arguments[2];
3061 var func=arguments[3];
3062 for(var i=_35a.length-1;i>=0;i--){
3063 var o=_35a[i];
3064 if(o.source===src&&o.signal===sig&&o.objOrFunc===obj&&o.funcOrStr===func){
3065 self._disconnect(o);
3066 if(!self._lock){
3067 _35a.splice(i,1);
3068 }else{
3069 self._dirty=true;
3070 }
3071 return true;
3072 }
3073 }
3074 }else{
3075 var idx=m.findIdentical(_35a,_358);
3076 if(idx>=0){
3077 self._disconnect(_358);
3078 if(!self._lock){
3079 _35a.splice(idx,1);
3080 }else{
3081 self._dirty=true;
3082 }
3083 return true;
3084 }
3085 }
3086 return false;
3087 },disconnectAllTo:function(_363,_364){
3088 var self=MochiKit.Signal;
3089 var _366=self._observers;
3090 var _367=self._disconnect;
3091 var _368=self._lock;
3092 var _369=self._dirty;
3093 if(typeof (_364)==="undefined"){
3094 _364=null;
3095 }
3096 for(var i=_366.length-1;i>=0;i--){
3097 var _36b=_366[i];
3098 if(_36b.objOrFunc===_363&&(_364===null||_36b.funcOrStr===_364)){
3099 _367(_36b);
3100 if(_368){
3101 _369=true;
3102 }else{
3103 _366.splice(i,1);
3104 }
3105 }
3106 }
3107 self._dirty=_369;
3108 },disconnectAll:function(src,sig){
3109 src=MochiKit.DOM.getElement(src);
3110 var m=MochiKit.Base;
3111 var _36f=m.flattenArguments(m.extend(null,arguments,1));
3112 var self=MochiKit.Signal;
3113 var _371=self._disconnect;
3114 var _372=self._observers;
3115 var i,_374;
3116 var _375=self._lock;
3117 var _376=self._dirty;
3118 if(_36f.length===0){
3119 for(i=_372.length-1;i>=0;i--){
3120 _374=_372[i];
3121 if(_374.source===src){
3122 _371(_374);
3123 if(!_375){
3124 _372.splice(i,1);
3125 }else{
3126 _376=true;
3127 }
3128 }
3129 }
3130 }else{
3131 var sigs={};
3132 for(i=0;i<_36f.length;i++){
3133 sigs[_36f[i]]=true;
3134 }
3135 for(i=_372.length-1;i>=0;i--){
3136 _374=_372[i];
3137 if(_374.source===src&&_374.signal in sigs){
3138 _371(_374);
3139 if(!_375){
3140 _372.splice(i,1);
3141 }else{
3142 _376=true;
3143 }
3144 }
3145 }
3146 }
3147 self._dirty=_376;
3148 },signal:function(src,sig){
3149 var self=MochiKit.Signal;
3150 var _37b=self._observers;
3151 src=MochiKit.DOM.getElement(src);
3152 var args=MochiKit.Base.extend(null,arguments,2);
3153 var _37d=[];
3154 self._lock=true;
3155 for(var i=0;i<_37b.length;i++){
3156 var _37f=_37b[i];
3157 if(_37f.source===src&&_37f.signal===sig){
3158 try{
3159 _37f.listener.apply(src,args);
3160 }
3161 catch(e){
3162 _37d.push(e);
3163 }
3164 }
3165 }
3166 self._lock=false;
3167 if(self._dirty){
3168 self._dirty=false;
3169 for(var i=_37b.length-1;i>=0;i--){
3170 if(!_37b[i].connected){
3171 _37b.splice(i,1);
3172 }
3173 }
3174 }
3175 if(_37d.length==1){
3176 throw _37d[0];
3177 }else{
3178 if(_37d.length>1){
3179 var e=new Error("Multiple errors thrown in handling 'sig', see errors property");
3180 e.errors=_37d;
3181 throw e;
3182 }
3183 }
3184 }});
3185 MochiKit.Signal.EXPORT_OK=[];
3186 MochiKit.Signal.EXPORT=["connect","disconnect","signal","disconnectAll","disconnectAllTo"];
3187 MochiKit.Signal.__new__=function(win){
3188 var m=MochiKit.Base;
3189 this._document=document;
3190 this._window=win;
3191 this._lock=false;
3192 this._dirty=false;
3193 try{
3194 this.connect(window,"onunload",this._unloadCache);
3195 }
3196 catch(e){
3197 }
3198 this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)};
3199 m.nameFunctions(this);
3200 };
3201 MochiKit.Signal.__new__(this);
3202 if(MochiKit.__export__){
3203 connect=MochiKit.Signal.connect;
3204 disconnect=MochiKit.Signal.disconnect;
3205 disconnectAll=MochiKit.Signal.disconnectAll;
3206 signal=MochiKit.Signal.signal;
3207 }
3208 MochiKit.Base._exportSymbols(this,MochiKit.Signal);
3209
3210
3211 Date.ext={};Date.ext.util={};Date.ext.util.xPad=function(x,pad,r){if(typeof (r)=="undefined"){r=10}for(;parseInt(x,10)<r&&r>1;r/=10){x=pad.toString()+x}return x.toString()};Date.prototype.locale="en-GB";if(document.getElementsByTagName("html")&&document.getElementsByTagName("html")[0].lang){Date.prototype.locale=document.getElementsByTagName("html")[0].lang}Date.ext.locales={};Date.ext.locales.en={a:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],A:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],b:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],B:["January","February","March","April","May","June","July","August","September","October","November","December"],c:"%a %d %b %Y %T %Z",p:["AM","PM"],P:["am","pm"],x:"%d/%m/%y",X:"%T"};Date.ext.locales["en-US"]=Date.ext.locales.en;Date.ext.locales["en-US"].c="%a %d %b %Y %r %Z";Date.ext.locales["en-US"].x="%D";Date.ext.locales["en-US"].X="%r";Date.ext.locales["en-GB"]=Date.ext.locales.en;Date.ext.locales["en-AU"]=Date.ext.locales["en-GB"];Date.ext.formats={a:function(d){return Date.ext.locales[d.locale].a[d.getDay()]},A:function(d){return Date.ext.locales[d.locale].A[d.getDay()]},b:function(d){return Date.ext.locales[d.locale].b[d.getMonth()]},B:function(d){return Date.ext.locales[d.locale].B[d.getMonth()]},c:"toLocaleString",C:function(d){return Date.ext.util.xPad(parseInt(d.getFullYear()/100,10),0)},d:["getDate","0"],e:["getDate"," "],g:function(d){return Date.ext.util.xPad(parseInt(Date.ext.util.G(d)/100,10),0)},G:function(d){var y=d.getFullYear();var V=parseInt(Date.ext.formats.V(d),10);var W=parseInt(Date.ext.formats.W(d),10);if(W>V){y++}else{if(W===0&&V>=52){y--}}return y},H:["getHours","0"],I:function(d){var I=d.getHours()%12;return Date.ext.util.xPad(I===0?12:I,0)},j:function(d){var ms=d-new Date(""+d.getFullYear()+"/1/1 GMT");ms+=d.getTimezoneOffset()*60000;var doy=parseInt(ms/60000/60/24,10)+1;return Date.ext.util.xPad(doy,0,100)},m:function(d){return Date.ext.util.xPad(d.getMonth()+1,0)},M:["getMinutes","0"],p:function(d){return Date.ext.locales[d.locale].p[d.getHours()>=12?1:0]},P:function(d){return Date.ext.locales[d.locale].P[d.getHours()>=12?1:0]},S:["getSeconds","0"],u:function(d){var dow=d.getDay();return dow===0?7:dow},U:function(d){var doy=parseInt(Date.ext.formats.j(d),10);var rdow=6-d.getDay();var woy=parseInt((doy+rdow)/7,10);return Date.ext.util.xPad(woy,0)},V:function(d){var woy=parseInt(Date.ext.formats.W(d),10);var dow1_1=(new Date(""+d.getFullYear()+"/1/1")).getDay();var idow=woy+(dow1_1>4||dow1_1<=1?0:1);if(idow==53&&(new Date(""+d.getFullYear()+"/12/31")).getDay()<4){idow=1}else{if(idow===0){idow=Date.ext.formats.V(new Date(""+(d.getFullYear()-1)+"/12/31"))}}return Date.ext.util.xPad(idow,0)},w:"getDay",W:function(d){var doy=parseInt(Date.ext.formats.j(d),10);var rdow=7-Date.ext.formats.u(d);var woy=parseInt((doy+rdow)/7,10);return Date.ext.util.xPad(woy,0,10)},y:function(d){return Date.ext.util.xPad(d.getFullYear()%100,0)},Y:"getFullYear",z:function(d){var o=d.getTimezoneOffset();var H=Date.ext.util.xPad(parseInt(Math.abs(o/60),10),0);var M=Date.ext.util.xPad(o%60,0);return(o>0?"-":"+")+H+M},Z:function(d){return d.toString().replace(/^.*\(([^)]+)\)$/,"$1")},"%":function(d){return"%"}};Date.ext.aggregates={c:"locale",D:"%m/%d/%y",h:"%b",n:"\n",r:"%I:%M:%S %p",R:"%H:%M",t:"\t",T:"%H:%M:%S",x:"locale",X:"locale"};Date.ext.aggregates.z=Date.ext.formats.z(new Date());Date.ext.aggregates.Z=Date.ext.formats.Z(new Date());Date.ext.unsupported={};Date.prototype.strftime=function(fmt){if(!(this.locale in Date.ext.locales)){if(this.locale.replace(/-[a-zA-Z]+$/,"") in Date.ext.locales){this.locale=this.locale.replace(/-[a-zA-Z]+$/,"")}else{this.locale="en-GB"}}var d=this;while(fmt.match(/%[cDhnrRtTxXzZ]/)){fmt=fmt.replace(/%([cDhnrRtTxXzZ])/g,function(m0,m1){var f=Date.ext.aggregates[m1];return(f=="locale"?Date.ext.locales[d.locale][m1]:f)})}var str=fmt.replace(/%([aAbBCdegGHIjmMpPSuUVwWyY%])/g,function(m0,m1){var f=Date.ext.formats[m1];if(typeof (f)=="string"){return d[f]()}else{if(typeof (f)=="function"){return f.call(d,d)}else{if(typeof (f)=="object"&&typeof (f[0])=="string"){return Date.ext.util.xPad(d[f[0]](),f[1])}else{return m1}}}});d=null;return str};
3212 DygraphLayout=function(_1,_2){
3213 this.dygraph_=_1;
3214 this.options={};
3215 MochiKit.Base.update(this.options,_2?_2:{});
3216 this.datasets=new Array();
3217 };
3218 DygraphLayout.prototype.attr_=function(_3){
3219 return this.dygraph_.attr_(_3);
3220 };
3221 DygraphLayout.prototype.addDataset=function(_4,_5){
3222 this.datasets[_4]=_5;
3223 };
3224 DygraphLayout.prototype.evaluate=function(){
3225 this._evaluateLimits();
3226 this._evaluateLineCharts();
3227 this._evaluateLineTicks();
3228 };
3229 DygraphLayout.prototype._evaluateLimits=function(){
3230 this.minxval=this.maxxval=null;
3231 for(var _6 in this.datasets){
3232 var _7=this.datasets[_6];
3233 var x1=_7[0][0];
3234 if(!this.minxval||x1<this.minxval){
3235 this.minxval=x1;
3236 }
3237 var x2=_7[_7.length-1][0];
3238 if(!this.maxxval||x2>this.maxxval){
3239 this.maxxval=x2;
3240 }
3241 }
3242 this.xrange=this.maxxval-this.minxval;
3243 this.xscale=(this.xrange!=0?1/this.xrange:1);
3244 this.minyval=this.options.yAxis[0];
3245 this.maxyval=this.options.yAxis[1];
3246 this.yrange=this.maxyval-this.minyval;
3247 this.yscale=(this.yrange!=0?1/this.yrange:1);
3248 };
3249 DygraphLayout.prototype._evaluateLineCharts=function(){
3250 this.points=new Array();
3251 for(var _10 in this.datasets){
3252 var _11=this.datasets[_10];
3253 for(var j=0;j<_11.length;j++){
3254 var _13=_11[j];
3255 var _14={x:((parseFloat(_13[0])-this.minxval)*this.xscale),y:1-((parseFloat(_13[1])-this.minyval)*this.yscale),xval:parseFloat(_13[0]),yval:parseFloat(_13[1]),name:_10};
3256 if(_14.y<=0){
3257 _14.y=0;
3258 }
3259 if(_14.y>=1){
3260 _14.y=1;
3261 }
3262 if((_14.x>=0)&&(_14.x<=1)){
3263 this.points.push(_14);
3264 }
3265 }
3266 }
3267 };
3268 DygraphLayout.prototype._evaluateLineTicks=function(){
3269 this.xticks=new Array();
3270 for(var i=0;i<this.options.xTicks.length;i++){
3271 var _16=this.options.xTicks[i];
3272 var _17=_16.label;
3273 var pos=this.xscale*(_16.v-this.minxval);
3274 if((pos>=0)&&(pos<=1)){
3275 this.xticks.push([pos,_17]);
3276 }
3277 }
3278 this.yticks=new Array();
3279 for(var i=0;i<this.options.yTicks.length;i++){
3280 var _16=this.options.yTicks[i];
3281 var _17=_16.label;
3282 var pos=1-(this.yscale*(_16.v-this.minyval));
3283 if((pos>=0)&&(pos<=1)){
3284 this.yticks.push([pos,_17]);
3285 }
3286 }
3287 };
3288 DygraphLayout.prototype.evaluateWithError=function(){
3289 this.evaluate();
3290 if(!this.options.errorBars){
3291 return;
3292 }
3293 var i=0;
3294 for(var _19 in this.datasets){
3295 var j=0;
3296 var _20=this.datasets[_19];
3297 for(var j=0;j<_20.length;j++,i++){
3298 var _21=_20[j];
3299 var xv=parseFloat(_21[0]);
3300 var yv=parseFloat(_21[1]);
3301 if(xv==this.points[i].xval&&yv==this.points[i].yval){
3302 this.points[i].errorMinus=parseFloat(_21[2]);
3303 this.points[i].errorPlus=parseFloat(_21[3]);
3304 }
3305 }
3306 }
3307 };
3308 DygraphLayout.prototype.removeAllDatasets=function(){
3309 delete this.datasets;
3310 this.datasets=new Array();
3311 };
3312 DygraphLayout.prototype.updateOptions=function(_24){
3313 MochiKit.Base.update(this.options,_24?_24:{});
3314 };
3315 DygraphCanvasRenderer=function(_25,_26,_27,_28){
3316 this.dygraph_=_25;
3317 this.options={"strokeWidth":0.5,"drawXAxis":true,"drawYAxis":true,"axisLineColor":Color.blackColor(),"axisLineWidth":0.5,"axisTickSize":3,"axisLabelColor":Color.blackColor(),"axisLabelFont":"Arial","axisLabelFontSize":9,"axisLabelWidth":50,"drawYGrid":true,"drawXGrid":true,"gridLineColor":MochiKit.Color.Color.grayColor()};
3318 MochiKit.Base.update(this.options,_28);
3319 this.layout=_27;
3320 this.element=_26;
3321 this.container=this.element.parentNode;
3322 this.isIE=(/MSIE/.test(navigator.userAgent)&&!window.opera);
3323 if(this.isIE&&!isNil(G_vmlCanvasManager)){
3324 this.IEDelay=0.5;
3325 this.maxTries=5;
3326 this.renderDelay=null;
3327 this.clearDelay=null;
3328 this.element=G_vmlCanvasManager.initElement(this.element);
3329 }
3330 this.height=this.element.height;
3331 this.width=this.element.width;
3332 if(!this.isIE&&!(DygraphCanvasRenderer.isSupported(this.element))){
3333 throw "Canvas is not supported.";
3334 }
3335 this.xlabels=new Array();
3336 this.ylabels=new Array();
3337 this.area={x:this.options.yAxisLabelWidth+2*this.options.axisTickSize,y:0};
3338 this.area.w=this.width-this.area.x-this.options.rightGap;
3339 this.area.h=this.height-this.options.axisLabelFontSize-2*this.options.axisTickSize;
3340 this.container.style.position="relative";
3341 this.container.style.width=this.width+"px";
3342 };
3343 DygraphCanvasRenderer.prototype.clear=function(){
3344 if(this.isIE){
3345 try{
3346 if(this.clearDelay){
3347 this.clearDelay.cancel();
3348 this.clearDelay=null;
3349 }
3350 var _29=this.element.getContext("2d");
3351 }
3352 catch(e){
3353 this.clearDelay=MochiKit.Async.wait(this.IEDelay);
3354 this.clearDelay.addCallback(bind(this.clear,this));
3355 return;
3356 }
3357 }
3358 var _29=this.element.getContext("2d");
3359 _29.clearRect(0,0,this.width,this.height);
3360 for(var i=0;i<this.xlabels.length;i++){
3361 var el=this.xlabels[i];
3362 el.parentNode.removeChild(el);
3363 }
3364 for(var i=0;i<this.ylabels.length;i++){
3365 var el=this.ylabels[i];
3366 el.parentNode.removeChild(el);
3367 }
3368 this.xlabels=new Array();
3369 this.ylabels=new Array();
3370 };
3371 DygraphCanvasRenderer.isSupported=function(_31){
3372 var _32=null;
3373 try{
3374 if(MochiKit.Base.isUndefinedOrNull(_31)){
3375 _32=document.createElement("canvas");
3376 }else{
3377 _32=_31;
3378 }
3379 var _33=_32.getContext("2d");
3380 }
3381 catch(e){
3382 var ie=navigator.appVersion.match(/MSIE (\d\.\d)/);
3383 var _35=(navigator.userAgent.toLowerCase().indexOf("opera")!=-1);
3384 if((!ie)||(ie[1]<6)||(_35)){
3385 return false;
3386 }
3387 return true;
3388 }
3389 return true;
3390 };
3391 DygraphCanvasRenderer.prototype.render=function(){
3392 var ctx=this.element.getContext("2d");
3393 if(this.options.drawYGrid){
3394 var _37=this.layout.yticks;
3395 ctx.save();
3396 ctx.strokeStyle=this.options.gridLineColor.toRGBString();
3397 ctx.lineWidth=this.options.axisLineWidth;
3398 for(var i=0;i<_37.length;i++){
3399 var x=this.area.x;
3400 var y=this.area.y+_37[i][0]*this.area.h;
3401 ctx.beginPath();
3402 ctx.moveTo(x,y);
3403 ctx.lineTo(x+this.area.w,y);
3404 ctx.closePath();
3405 ctx.stroke();
3406 }
3407 }
3408 if(this.options.drawXGrid){
3409 var _37=this.layout.xticks;
3410 ctx.save();
3411 ctx.strokeStyle=this.options.gridLineColor.toRGBString();
3412 ctx.lineWidth=this.options.axisLineWidth;
3413 for(var i=0;i<_37.length;i++){
3414 var x=this.area.x+_37[i][0]*this.area.w;
3415 var y=this.area.y+this.area.h;
3416 ctx.beginPath();
3417 ctx.moveTo(x,y);
3418 ctx.lineTo(x,this.area.y);
3419 ctx.closePath();
3420 ctx.stroke();
3421 }
3422 }
3423 this._renderLineChart();
3424 this._renderAxis();
3425 };
3426 DygraphCanvasRenderer.prototype._renderAxis=function(){
3427 if(!this.options.drawXAxis&&!this.options.drawYAxis){
3428 return;
3429 }
3430 var _40=this.element.getContext("2d");
3431 var _41={"style":{"position":"absolute","fontSize":this.options.axisLabelFontSize+"px","zIndex":10,"color":this.options.axisLabelColor.toRGBString(),"width":this.options.axisLabelWidth+"px","overflow":"hidden"}};
3432 _40.save();
3433 _40.strokeStyle=this.options.axisLineColor.toRGBString();
3434 _40.lineWidth=this.options.axisLineWidth;
3435 if(this.options.drawYAxis){
3436 if(this.layout.yticks){
3437 for(var i=0;i<this.layout.yticks.length;i++){
3438 var _42=this.layout.yticks[i];
3439 if(typeof (_42)=="function"){
3440 return;
3441 }
3442 var x=this.area.x;
3443 var y=this.area.y+_42[0]*this.area.h;
3444 _40.beginPath();
3445 _40.moveTo(x,y);
3446 _40.lineTo(x-this.options.axisTickSize,y);
3447 _40.closePath();
3448 _40.stroke();
3449 var _43=DIV(_41,_42[1]);
3450 var top=(y-this.options.axisLabelFontSize/2);
3451 if(top<0){
3452 top=0;
3453 }
3454 if(top+this.options.axisLabelFontSize+3>this.height){
3455 _43.style.bottom="0px";
3456 }else{
3457 _43.style.top=top+"px";
3458 }
3459 _43.style.left="0px";
3460 _43.style.textAlign="right";
3461 _43.style.width=this.options.yAxisLabelWidth+"px";
3462 this.container.appendChild(_43);
3463 this.ylabels.push(_43);
3464 }
3465 var _45=this.ylabels[0];
3466 var _46=this.options.axisLabelFontSize;
3467 var _47=parseInt(_45.style.top)+_46;
3468 if(_47>this.height-_46){
3469 _45.style.top=(parseInt(_45.style.top)-_46/2)+"px";
3470 }
3471 }
3472 _40.beginPath();
3473 _40.moveTo(this.area.x,this.area.y);
3474 _40.lineTo(this.area.x,this.area.y+this.area.h);
3475 _40.closePath();
3476 _40.stroke();
3477 }
3478 if(this.options.drawXAxis){
3479 if(this.layout.xticks){
3480 for(var i=0;i<this.layout.xticks.length;i++){
3481 var _42=this.layout.xticks[i];
3482 if(typeof (dataset)=="function"){
3483 return;
3484 }
3485 var x=this.area.x+_42[0]*this.area.w;
3486 var y=this.area.y+this.area.h;
3487 _40.beginPath();
3488 _40.moveTo(x,y);
3489 _40.lineTo(x,y+this.options.axisTickSize);
3490 _40.closePath();
3491 _40.stroke();
3492 var _43=DIV(_41,_42[1]);
3493 _43.style.textAlign="center";
3494 _43.style.bottom="0px";
3495 var _48=(x-this.options.axisLabelWidth/2);
3496 if(_48+this.options.axisLabelWidth>this.width){
3497 _48=this.width-this.options.xAxisLabelWidth;
3498 _43.style.textAlign="right";
3499 }
3500 if(_48<0){
3501 _48=0;
3502 _43.style.textAlign="left";
3503 }
3504 _43.style.left=_48+"px";
3505 _43.style.width=this.options.xAxisLabelWidth+"px";
3506 this.container.appendChild(_43);
3507 this.xlabels.push(_43);
3508 }
3509 }
3510 _40.beginPath();
3511 _40.moveTo(this.area.x,this.area.y+this.area.h);
3512 _40.lineTo(this.area.x+this.area.w,this.area.y+this.area.h);
3513 _40.closePath();
3514 _40.stroke();
3515 }
3516 _40.restore();
3517 };
3518 DygraphCanvasRenderer.prototype._renderLineChart=function(){
3519 var _49=this.element.getContext("2d");
3520 var _50=this.options.colorScheme.length;
3521 var _51=this.options.colorScheme;
3522 var _52=MochiKit.Base.keys(this.layout.datasets);
3523 var _53=this.layout.options.errorBars;
3524 var _54=_52.length;
3525 var _55=MochiKit.Base.bind;
3526 var _56=MochiKit.Base.partial;
3527 for(var i=0;i<this.layout.points.length;i++){
3528 var _57=this.layout.points[i];
3529 _57.canvasx=this.area.w*_57.x+this.area.x;
3530 _57.canvasy=this.area.h*_57.y+this.area.y;
3531 }
3532 var _58=function(x){
3533 return x&&!isNaN(x);
3534 };
3535 var _59=function(ctx){
3536 for(var i=0;i<_54;i++){
3537 var _60=_52[i];
3538 var _61=_51[i%_50];
3539 var _62=this.options.strokeColorTransform;
3540 _49.save();
3541 _49.strokeStyle=_61.toRGBString();
3542 _49.lineWidth=this.options.strokeWidth;
3543 var _57=this.layout.points[0];
3544 var _63=this.dygraph_.attr_("pointSize");
3545 var _64=null,prevY=null;
3546 var _65=this.dygraph_.attr_("drawPoints");
3547 var _66=this.layout.points;
3548 for(var j=0;j<_66.length;j++){
3549 var _57=_66[j];
3550 if(_57.name==_60){
3551 if(!_58(_57.canvasy)){
3552 _64=prevY=null;
3553 }else{
3554 var _67=(!_64&&(j==_66.length-1||!_58(_66[j+1].canvasy)));
3555 if(!_64){
3556 _64=_57.canvasx;
3557 prevY=_57.canvasy;
3558 }else{
3559 ctx.beginPath();
3560 ctx.moveTo(_64,prevY);
3561 _64=_57.canvasx;
3562 prevY=_57.canvasy;
3563 ctx.lineTo(_64,prevY);
3564 ctx.stroke();
3565 }
3566 if(_65||_67){
3567 ctx.beginPath();
3568 ctx.fillStyle=_61.toRGBString();
3569 ctx.arc(_57.canvasx,_57.canvasy,_63,0,360,false);
3570 ctx.fill();
3571 }
3572 }
3573 }
3574 }
3575 }
3576 };
3577 var _68=function(ctx){
3578 for(var i=0;i<_54;i++){
3579 var _69=_52[i];
3580 var _70=_51[i%_50];
3581 var _71=this.options.strokeColorTransform;
3582 _49.save();
3583 _49.strokeStyle=_70.toRGBString();
3584 _49.lineWidth=this.options.strokeWidth;
3585 var _72=-1;
3586 var _73=[-1,-1];
3587 var _74=0;
3588 var _75=this.layout.yscale;
3589 var _76=_70.colorWithAlpha(0.15);
3590 ctx.fillStyle=_76.toRGBString();
3591 ctx.beginPath();
3592 for(var j=0;j<this.layout.points.length;j++){
3593 var _77=this.layout.points[j];
3594 _74++;
3595 if(_77.name==_69){
3596 if(!_77.y||isNaN(_77.y)){
3597 _72=-1;
3598 return;
3599 }
3600 var _78=[_77.y-_77.errorPlus*_75,_77.y+_77.errorMinus*_75];
3601 _78[0]=this.area.h*_78[0]+this.area.y;
3602 _78[1]=this.area.h*_78[1]+this.area.y;
3603 if(_72>=0){
3604 ctx.moveTo(_72,_73[0]);
3605 ctx.lineTo(_77.canvasx,_78[0]);
3606 ctx.lineTo(_77.canvasx,_78[1]);
3607 ctx.lineTo(_72,_73[1]);
3608 ctx.closePath();
3609 }
3610 _73[0]=_78[0];
3611 _73[1]=_78[1];
3612 _72=_77.canvasx;
3613 }
3614 }
3615 ctx.fill();
3616 }
3617 };
3618 if(_53){
3619 _55(_68,this)(_49);
3620 }
3621 _55(_59,this)(_49);
3622 _49.restore();
3623 };
3624 Dygraph=function(div,_80,_81){
3625 if(arguments.length>0){
3626 if(arguments.length==4){
3627 this.warn("Using deprecated four-argument dygraph constructor");
3628 this.__old_init__(div,_80,arguments[2],arguments[3]);
3629 }else{
3630 this.__init__(div,_80,_81);
3631 }
3632 }
3633 };
3634 Dygraph.NAME="Dygraph";
3635 Dygraph.VERSION="1.2";
3636 Dygraph.__repr__=function(){
3637 return "["+this.NAME+" "+this.VERSION+"]";
3638 };
3639 Dygraph.toString=function(){
3640 return this.__repr__();
3641 };
3642 Dygraph.DEFAULT_ROLL_PERIOD=1;
3643 Dygraph.DEFAULT_WIDTH=480;
3644 Dygraph.DEFAULT_HEIGHT=320;
3645 Dygraph.AXIS_LINE_WIDTH=0.3;
3646 Dygraph.DEFAULT_ATTRS={highlightCircleSize:3,pixelsPerXLabel:60,pixelsPerYLabel:30,labelsDivWidth:250,labelsDivStyles:{},labelsSeparateLines:false,labelsKMB:false,strokeWidth:1,axisTickSize:3,axisLabelFontSize:14,xAxisLabelWidth:50,yAxisLabelWidth:50,rightGap:5,showRoller:false,xValueFormatter:Dygraph.dateString_,xValueParser:Dygraph.dateParser,xTicker:Dygraph.dateTicker,sigma:2,errorBars:false,fractions:false,wilsonInterval:true,customBars:false};
3647 Dygraph.DEBUG=1;
3648 Dygraph.INFO=2;
3649 Dygraph.WARNING=3;
3650 Dygraph.ERROR=3;
3651 Dygraph.prototype.__old_init__=function(div,_82,_83,_84){
3652 if(_83!=null){
3653 var _85=["Date"];
3654 for(var i=0;i<_83.length;i++){
3655 _85.push(_83[i]);
3656 }
3657 MochiKit.Base.update(_84,{"labels":_85});
3658 }
3659 this.__init__(div,_82,_84);
3660 };
3661 Dygraph.prototype.__init__=function(div,_86,_87){
3662 if(_87==null){
3663 _87={};
3664 }
3665 this.maindiv_=div;
3666 this.file_=_86;
3667 this.rollPeriod_=_87.rollPeriod||Dygraph.DEFAULT_ROLL_PERIOD;
3668 this.previousVerticalX_=-1;
3669 this.fractions_=_87.fractions||false;
3670 this.dateWindow_=_87.dateWindow||null;
3671 this.valueRange_=_87.valueRange||null;
3672 this.wilsonInterval_=_87.wilsonInterval||true;
3673 div.innerHTML="";
3674 if(div.style.width==""){
3675 div.style.width=Dygraph.DEFAULT_WIDTH+"px";
3676 }
3677 if(div.style.height==""){
3678 div.style.height=Dygraph.DEFAULT_HEIGHT+"px";
3679 }
3680 this.width_=parseInt(div.style.width,10);
3681 this.height_=parseInt(div.style.height,10);
3682 this.user_attrs_={};
3683 MochiKit.Base.update(this.user_attrs_,_87);
3684 this.attrs_={};
3685 MochiKit.Base.update(this.attrs_,Dygraph.DEFAULT_ATTRS);
3686 this.labelsFromCSV_=(this.attr_("labels")==null);
3687 this.createInterface_();
3688 this.layoutOptions_={"errorBars":(this.attr_("errorBars")||this.attr_("customBars")),"xOriginIsZero":false};
3689 MochiKit.Base.update(this.layoutOptions_,this.attrs_);
3690 MochiKit.Base.update(this.layoutOptions_,this.user_attrs_);
3691 this.layout_=new DygraphLayout(this,this.layoutOptions_);
3692 this.renderOptions_={colorScheme:this.colors_,strokeColor:null,axisLineWidth:Dygraph.AXIS_LINE_WIDTH};
3693 MochiKit.Base.update(this.renderOptions_,this.attrs_);
3694 MochiKit.Base.update(this.renderOptions_,this.user_attrs_);
3695 this.plotter_=new DygraphCanvasRenderer(this,this.hidden_,this.layout_,this.renderOptions_);
3696 this.createStatusMessage_();
3697 this.createRollInterface_();
3698 this.createDragInterface_();
3699 this.start_();
3700 };
3701 Dygraph.prototype.attr_=function(_88){
3702 if(typeof (this.user_attrs_[_88])!="undefined"){
3703 return this.user_attrs_[_88];
3704 }else{
3705 if(typeof (this.attrs_[_88])!="undefined"){
3706 return this.attrs_[_88];
3707 }else{
3708 return null;
3709 }
3710 }
3711 };
3712 Dygraph.prototype.log=function(_89,_90){
3713 if(typeof (console)!="undefined"){
3714 switch(_89){
3715 case Dygraph.DEBUG:
3716 console.debug("dygraphs: "+_90);
3717 break;
3718 case Dygraph.INFO:
3719 console.info("dygraphs: "+_90);
3720 break;
3721 case Dygraph.WARNING:
3722 console.warn("dygraphs: "+_90);
3723 break;
3724 case Dygraph.ERROR:
3725 console.error("dygraphs: "+_90);
3726 break;
3727 }
3728 }
3729 };
3730 Dygraph.prototype.info=function(_91){
3731 this.log(Dygraph.INFO,_91);
3732 };
3733 Dygraph.prototype.warn=function(_92){
3734 this.log(Dygraph.WARNING,_92);
3735 };
3736 Dygraph.prototype.error=function(_93){
3737 this.log(Dygraph.ERROR,_93);
3738 };
3739 Dygraph.prototype.rollPeriod=function(){
3740 return this.rollPeriod_;
3741 };
3742 Dygraph.prototype.createInterface_=function(){
3743 var _94=this.maindiv_;
3744 this.graphDiv=document.createElement("div");
3745 this.graphDiv.style.width=this.width_+"px";
3746 this.graphDiv.style.height=this.height_+"px";
3747 _94.appendChild(this.graphDiv);
3748 this.canvas_=document.createElement("canvas");
3749 this.canvas_.style.position="absolute";
3750 this.canvas_.width=this.width_;
3751 this.canvas_.height=this.height_;
3752 this.graphDiv.appendChild(this.canvas_);
3753 this.hidden_=this.createPlotKitCanvas_(this.canvas_);
3754 connect(this.hidden_,"onmousemove",this,function(e){
3755 this.mouseMove_(e);
3756 });
3757 connect(this.hidden_,"onmouseout",this,function(e){
3758 this.mouseOut_(e);
3759 });
3760 };
3761 Dygraph.prototype.createPlotKitCanvas_=function(_96){
3762 var h=document.createElement("canvas");
3763 h.style.position="absolute";
3764 h.style.top=_96.style.top;
3765 h.style.left=_96.style.left;
3766 h.width=this.width_;
3767 h.height=this.height_;
3768 this.graphDiv.appendChild(h);
3769 return h;
3770 };
3771 Dygraph.prototype.setColors_=function(){
3772 var num=this.attr_("labels").length-1;
3773 this.colors_=[];
3774 var _99=this.attr_("colors");
3775 if(!_99){
3776 var sat=this.attr_("colorSaturation")||1;
3777 var val=this.attr_("colorValue")||0.5;
3778 for(var i=1;i<=num;i++){
3779 var hue=(1*i/(1+num));
3780 this.colors_.push(MochiKit.Color.Color.fromHSV(hue,sat,val));
3781 }
3782 }else{
3783 for(var i=0;i<num;i++){
3784 var _103=_99[i%_99.length];
3785 this.colors_.push(MochiKit.Color.Color.fromString(_103));
3786 }
3787 }
3788 this.renderOptions_.colorScheme=this.colors_;
3789 MochiKit.Base.update(this.plotter_.options,this.renderOptions_);
3790 MochiKit.Base.update(this.layoutOptions_,this.user_attrs_);
3791 MochiKit.Base.update(this.layoutOptions_,this.attrs_);
3792 };
3793 Dygraph.findPosX=function(obj){
3794 var _105=0;
3795 if(obj.offsetParent){
3796 while(obj.offsetParent){
3797 _105+=obj.offsetLeft;
3798 obj=obj.offsetParent;
3799 }
3800 }else{
3801 if(obj.x){
3802 _105+=obj.x;
3803 }
3804 }
3805 return _105;
3806 };
3807 Dygraph.findPosY=function(obj){
3808 var _106=0;
3809 if(obj.offsetParent){
3810 while(obj.offsetParent){
3811 _106+=obj.offsetTop;
3812 obj=obj.offsetParent;
3813 }
3814 }else{
3815 if(obj.y){
3816 _106+=obj.y;
3817 }
3818 }
3819 return _106;
3820 };
3821 Dygraph.prototype.createStatusMessage_=function(){
3822 if(!this.attr_("labelsDiv")){
3823 var _107=this.attr_("labelsDivWidth");
3824 var _108={"position":"absolute","fontSize":"14px","zIndex":10,"width":_107+"px","top":"0px","left":(this.width_-_107-2)+"px","background":"white","textAlign":"left","overflow":"hidden"};
3825 MochiKit.Base.update(_108,this.attr_("labelsDivStyles"));
3826 var div=document.createElement("div");
3827 for(var name in _108){
3828 div.style[name]=_108[name];
3829 }
3830 this.graphDiv.appendChild(div);
3831 this.attrs_.labelsDiv=div;
3832 }
3833 };
3834 Dygraph.prototype.createRollInterface_=function(){
3835 var _110=this.attr_("showRoller")?"block":"none";
3836 var _111={"position":"absolute","zIndex":10,"top":(this.plotter_.area.h-25)+"px","left":(this.plotter_.area.x+1)+"px","display":_110};
3837 var _112=document.createElement("input");
3838 _112.type="text";
3839 _112.size="2";
3840 _112.value=this.rollPeriod_;
3841 for(var name in _111){
3842 _112.style[name]=_111[name];
3843 }
3844 var pa=this.graphDiv;
3845 pa.appendChild(_112);
3846 connect(_112,"onchange",this,function(){
3847 this.adjustRoll(_112.value);
3848 });
3849 return _112;
3850 };
3851 Dygraph.prototype.createDragInterface_=function(){
3852 var self=this;
3853 var _115=false;
3854 var _116=null;
3855 var _117=null;
3856 var _118=null;
3857 var _119=null;
3858 var _120=null;
3859 var px=0;
3860 var py=0;
3861 var getX=function(e){
3862 return e.mouse().page.x-px;
3863 };
3864 var getY=function(e){
3865 return e.mouse().page.y-py;
3866 };
3867 connect(this.hidden_,"onmousemove",function(_125){
3868 if(_115){
3869 _118=getX(_125);
3870 _119=getY(_125);
3871 self.drawZoomRect_(_116,_118,_120);
3872 _120=_118;
3873 }
3874 });
3875 connect(this.hidden_,"onmousedown",function(_126){
3876 _115=true;
3877 px=Dygraph.findPosX(self.canvas_);
3878 py=Dygraph.findPosY(self.canvas_);
3879 _116=getX(_126);
3880 _117=getY(_126);
3881 });
3882 connect(document,"onmouseup",this,function(_127){
3883 if(_115){
3884 _115=false;
3885 _116=null;
3886 _117=null;
3887 }
3888 });
3889 connect(this.hidden_,"onmouseout",this,function(_128){
3890 if(_115){
3891 _118=null;
3892 _119=null;
3893 }
3894 });
3895 connect(this.hidden_,"onmouseup",this,function(_129){
3896 if(_115){
3897 _115=false;
3898 _118=getX(_129);
3899 _119=getY(_129);
3900 var _130=Math.abs(_118-_116);
3901 var _131=Math.abs(_119-_117);
3902 if(_130<2&&_131<2&&self.attr_("clickCallback")!=null&&self.lastx_!=undefined){
3903 self.attr_("clickCallback")(_129,new Date(self.lastx_));
3904 }
3905 if(_130>=10){
3906 self.doZoom_(Math.min(_116,_118),Math.max(_116,_118));
3907 }else{
3908 self.canvas_.getContext("2d").clearRect(0,0,self.canvas_.width,self.canvas_.height);
3909 }
3910 _116=null;
3911 _117=null;
3912 }
3913 });
3914 connect(this.hidden_,"ondblclick",this,function(_132){
3915 self.dateWindow_=null;
3916 self.drawGraph_(self.rawData_);
3917 var _133=self.rawData_[0][0];
3918 var _134=self.rawData_[self.rawData_.length-1][0];
3919 if(self.attr_("zoomCallback")){
3920 self.attr_("zoomCallback")(_133,_134);
3921 }
3922 });
3923 };
3924 Dygraph.prototype.drawZoomRect_=function(_135,endX,_137){
3925 var ctx=this.canvas_.getContext("2d");
3926 if(_137){
3927 ctx.clearRect(Math.min(_135,_137),0,Math.abs(_135-_137),this.height_);
3928 }
3929 if(endX&&_135){
3930 ctx.fillStyle="rgba(128,128,128,0.33)";
3931 ctx.fillRect(Math.min(_135,endX),0,Math.abs(endX-_135),this.height_);
3932 }
3933 };
3934 Dygraph.prototype.doZoom_=function(lowX,_139){
3935 var _140=this.layout_.points;
3936 var _141=null;
3937 var _142=null;
3938 for(var i=0;i<_140.length;i++){
3939 var cx=_140[i].canvasx;
3940 var x=_140[i].xval;
3941 if(cx<lowX&&(_141==null||x>_141)){
3942 _141=x;
3943 }
3944 if(cx>_139&&(_142==null||x<_142)){
3945 _142=x;
3946 }
3947 }
3948 if(_141==null){
3949 _141=_140[0].xval;
3950 }
3951 if(_142==null){
3952 _142=_140[_140.length-1].xval;
3953 }
3954 this.dateWindow_=[_141,_142];
3955 this.drawGraph_(this.rawData_);
3956 if(this.attr_("zoomCallback")){
3957 this.attr_("zoomCallback")(_141,_142);
3958 }
3959 };
3960 Dygraph.prototype.mouseMove_=function(_144){
3961 var _145=_144.mouse().page.x-Dygraph.findPosX(this.hidden_);
3962 var _146=this.layout_.points;
3963 var _147=-1;
3964 var _148=-1;
3965 var _149=1e+100;
3966 var idx=-1;
3967 for(var i=0;i<_146.length;i++){
3968 var dist=Math.abs(_146[i].canvasx-_145);
3969 if(dist>_149){
3970 break;
3971 }
3972 _149=dist;
3973 idx=i;
3974 }
3975 if(idx>=0){
3976 _147=_146[idx].xval;
3977 }
3978 if(_145>_146[_146.length-1].canvasx){
3979 _147=_146[_146.length-1].xval;
3980 }
3981 var _152=[];
3982 for(var i=0;i<_146.length;i++){
3983 if(_146[i].xval==_147){
3984 _152.push(_146[i]);
3985 }
3986 }
3987 var _153=this.attr_("highlightCircleSize");
3988 var ctx=this.canvas_.getContext("2d");
3989 if(this.previousVerticalX_>=0){
3990 var px=this.previousVerticalX_;
3991 ctx.clearRect(px-_153-1,0,2*_153+2,this.height_);
3992 }
3993 var isOK=function(x){
3994 return x&&!isNaN(x);
3995 };
3996 if(_152.length>0){
3997 var _145=_152[0].canvasx;
3998 var _155=this.attr_("xValueFormatter")(_147,this)+":";
3999 var clen=this.colors_.length;
4000 for(var i=0;i<_152.length;i++){
4001 if(!isOK(_152[i].canvasy)){
4002 continue;
4003 }
4004 if(this.attr_("labelsSeparateLines")){
4005 _155+="<br/>";
4006 }
4007 var _157=_152[i];
4008 _155+=" <b><font color='"+this.colors_[i%clen].toHexString()+"'>"+_157.name+"</font></b>:"+this.round_(_157.yval,2);
4009 }
4010 this.attr_("labelsDiv").innerHTML=_155;
4011 this.lastx_=_147;
4012 ctx.save();
4013 for(var i=0;i<_152.length;i++){
4014 if(!isOK(_152[i%clen].canvasy)){
4015 continue;
4016 }
4017 ctx.beginPath();
4018 ctx.fillStyle=this.colors_[i%clen].toRGBString();
4019 ctx.arc(_145,_152[i%clen].canvasy,_153,0,360,false);
4020 ctx.fill();
4021 }
4022 ctx.restore();
4023 this.previousVerticalX_=_145;
4024 }
4025 };
4026 Dygraph.prototype.mouseOut_=function(_158){
4027 var ctx=this.canvas_.getContext("2d");
4028 ctx.clearRect(0,0,this.width_,this.height_);
4029 this.attr_("labelsDiv").innerHTML="";
4030 };
4031 Dygraph.zeropad=function(x){
4032 if(x<10){
4033 return "0"+x;
4034 }else{
4035 return ""+x;
4036 }
4037 };
4038 Dygraph.prototype.hmsString_=function(date){
4039 var _160=Dygraph.zeropad;
4040 var d=new Date(date);
4041 if(d.getSeconds()){
4042 return _160(d.getHours())+":"+_160(d.getMinutes())+":"+_160(d.getSeconds());
4043 }else{
4044 if(d.getMinutes()){
4045 return _160(d.getHours())+":"+_160(d.getMinutes());
4046 }else{
4047 return _160(d.getHours());
4048 }
4049 }
4050 };
4051 Dygraph.dateString_=function(date,self){
4052 var _162=Dygraph.zeropad;
4053 var d=new Date(date);
4054 var year=""+d.getFullYear();
4055 var _164=_162(d.getMonth()+1);
4056 var day=_162(d.getDate());
4057 var ret="";
4058 var frac=d.getHours()*3600+d.getMinutes()*60+d.getSeconds();
4059 if(frac){
4060 ret=" "+self.hmsString_(date);
4061 }
4062 return year+"/"+_164+"/"+day+ret;
4063 };
4064 Dygraph.prototype.round_=function(num,_168){
4065 var _169=Math.pow(10,_168);
4066 return Math.round(num*_169)/_169;
4067 };
4068 Dygraph.prototype.loadedEvent_=function(data){
4069 this.rawData_=this.parseCSV_(data);
4070 this.drawGraph_(this.rawData_);
4071 };
4072 Dygraph.prototype.months=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
4073 Dygraph.prototype.quarters=["Jan","Apr","Jul","Oct"];
4074 Dygraph.prototype.addXTicks_=function(){
4075 var _171,endDate;
4076 if(this.dateWindow_){
4077 _171=this.dateWindow_[0];
4078 endDate=this.dateWindow_[1];
4079 }else{
4080 _171=this.rawData_[0][0];
4081 endDate=this.rawData_[this.rawData_.length-1][0];
4082 }
4083 var _172=this.attr_("xTicker")(_171,endDate,this);
4084 this.layout_.updateOptions({xTicks:_172});
4085 };
4086 Dygraph.SECONDLY=0;
4087 Dygraph.TEN_SECONDLY=1;
4088 Dygraph.THIRTY_SECONDLY=2;
4089 Dygraph.MINUTELY=3;
4090 Dygraph.TEN_MINUTELY=4;
4091 Dygraph.THIRTY_MINUTELY=5;
4092 Dygraph.HOURLY=6;
4093 Dygraph.SIX_HOURLY=7;
4094 Dygraph.DAILY=8;
4095 Dygraph.WEEKLY=9;
4096 Dygraph.MONTHLY=10;
4097 Dygraph.QUARTERLY=11;
4098 Dygraph.BIANNUAL=12;
4099 Dygraph.ANNUAL=13;
4100 Dygraph.DECADAL=14;
4101 Dygraph.NUM_GRANULARITIES=15;
4102 Dygraph.SHORT_SPACINGS=[];
4103 Dygraph.SHORT_SPACINGS[Dygraph.SECONDLY]=1000*1;
4104 Dygraph.SHORT_SPACINGS[Dygraph.TEN_SECONDLY]=1000*10;
4105 Dygraph.SHORT_SPACINGS[Dygraph.THIRTY_SECONDLY]=1000*30;
4106 Dygraph.SHORT_SPACINGS[Dygraph.MINUTELY]=1000*60;
4107 Dygraph.SHORT_SPACINGS[Dygraph.TEN_MINUTELY]=1000*60*10;
4108 Dygraph.SHORT_SPACINGS[Dygraph.THIRTY_MINUTELY]=1000*60*30;
4109 Dygraph.SHORT_SPACINGS[Dygraph.HOURLY]=1000*3600;
4110 Dygraph.SHORT_SPACINGS[Dygraph.HOURLY]=1000*3600*6;
4111 Dygraph.SHORT_SPACINGS[Dygraph.DAILY]=1000*86400;
4112 Dygraph.SHORT_SPACINGS[Dygraph.WEEKLY]=1000*604800;
4113 Dygraph.prototype.NumXTicks=function(_173,_174,_175){
4114 if(_175<Dygraph.MONTHLY){
4115 var _176=Dygraph.SHORT_SPACINGS[_175];
4116 return Math.floor(0.5+1*(_174-_173)/_176);
4117 }else{
4118 var _177=1;
4119 var _178=12;
4120 if(_175==Dygraph.QUARTERLY){
4121 _178=3;
4122 }
4123 if(_175==Dygraph.BIANNUAL){
4124 _178=2;
4125 }
4126 if(_175==Dygraph.ANNUAL){
4127 _178=1;
4128 }
4129 if(_175==Dygraph.DECADAL){
4130 _178=1;
4131 _177=10;
4132 }
4133 var _179=365.2524*24*3600*1000;
4134 var _180=1*(_174-_173)/_179;
4135 return Math.floor(0.5+1*_180*_178/_177);
4136 }
4137 };
4138 Dygraph.prototype.GetXAxis=function(_181,_182,_183){
4139 var _184=[];
4140 if(_183<Dygraph.MONTHLY){
4141 var _185=Dygraph.SHORT_SPACINGS[_183];
4142 var _186="%d%b";
4143 if(_183<Dygraph.HOURLY){
4144 _181=_185*Math.floor(0.5+_181/_185);
4145 }
4146 for(var t=_181;t<=_182;t+=_185){
4147 var d=new Date(t);
4148 var frac=d.getHours()*3600+d.getMinutes()*60+d.getSeconds();
4149 if(frac==0||_183>=Dygraph.DAILY){
4150 _184.push({v:t,label:new Date(t+3600*1000).strftime(_186)});
4151 }else{
4152 _184.push({v:t,label:this.hmsString_(t)});
4153 }
4154 }
4155 }else{
4156 var _188;
4157 var _189=1;
4158 if(_183==Dygraph.MONTHLY){
4159 _188=[0,1,2,3,4,5,6,7,8,9,10,11,12];
4160 }else{
4161 if(_183==Dygraph.QUARTERLY){
4162 _188=[0,3,6,9];
4163 }else{
4164 if(_183==Dygraph.BIANNUAL){
4165 _188=[0,6];
4166 }else{
4167 if(_183==Dygraph.ANNUAL){
4168 _188=[0];
4169 }else{
4170 if(_183==Dygraph.DECADAL){
4171 _188=[0];
4172 _189=10;
4173 }
4174 }
4175 }
4176 }
4177 }
4178 var _190=new Date(_181).getFullYear();
4179 var _191=new Date(_182).getFullYear();
4180 var _192=Dygraph.zeropad;
4181 for(var i=_190;i<=_191;i++){
4182 if(i%_189!=0){
4183 continue;
4184 }
4185 for(var j=0;j<_188.length;j++){
4186 var _193=i+"/"+_192(1+_188[j])+"/01";
4187 var t=Date.parse(_193);
4188 if(t<_181||t>_182){
4189 continue;
4190 }
4191 _184.push({v:t,label:new Date(t).strftime("%b %y")});
4192 }
4193 }
4194 }
4195 return _184;
4196 };
4197 Dygraph.dateTicker=function(_194,_195,self){
4198 var _196=-1;
4199 for(var i=0;i<Dygraph.NUM_GRANULARITIES;i++){
4200 var _197=self.NumXTicks(_194,_195,i);
4201 if(self.width_/_197>=self.attr_("pixelsPerXLabel")){
4202 _196=i;
4203 break;
4204 }
4205 }
4206 if(_196>=0){
4207 return self.GetXAxis(_194,_195,_196);
4208 }else{
4209 }
4210 };
4211 Dygraph.numericTicks=function(minV,maxV,self){
4212 var _200=[1,2,5];
4213 var _201,low_val,high_val,nTicks;
4214 var _202=self.attr_("pixelsPerYLabel");
4215 for(var i=-10;i<50;i++){
4216 var _203=Math.pow(10,i);
4217 for(var j=0;j<_200.length;j++){
4218 _201=_203*_200[j];
4219 low_val=Math.floor(minV/_201)*_201;
4220 high_val=Math.ceil(maxV/_201)*_201;
4221 nTicks=(high_val-low_val)/_201;
4222 var _204=self.height_/nTicks;
4223 if(_204>_202){
4224 break;
4225 }
4226 }
4227 if(_204>_202){
4228 break;
4229 }
4230 }
4231 var _205=[];
4232 for(var i=0;i<nTicks;i++){
4233 var _206=low_val+i*_201;
4234 var _207=self.round_(_206,2);
4235 if(self.attr_("labelsKMB")){
4236 var k=1000;
4237 if(_206>=k*k*k){
4238 _207=self.round_(_206/(k*k*k),1)+"B";
4239 }else{
4240 if(_206>=k*k){
4241 _207=self.round_(_206/(k*k),1)+"M";
4242 }else{
4243 if(_206>=k){
4244 _207=self.round_(_206/k,1)+"K";
4245 }
4246 }
4247 }
4248 }
4249 _205.push({label:_207,v:_206});
4250 }
4251 return _205;
4252 };
4253 Dygraph.prototype.addYTicks_=function(minY,maxY){
4254 var _211=Dygraph.numericTicks(minY,maxY,this);
4255 this.layout_.updateOptions({yAxis:[minY,maxY],yTicks:_211});
4256 };
4257 Dygraph.prototype.extremeValues_=function(_212){
4258 var minY=null,maxY=null;
4259 var bars=this.attr_("errorBars")||this.attr_("customBars");
4260 if(bars){
4261 for(var j=0;j<_212.length;j++){
4262 var y=_212[j][1][0];
4263 if(!y){
4264 continue;
4265 }
4266 var low=y-_212[j][1][1];
4267 var high=y+_212[j][1][2];
4268 if(low>y){
4269 low=y;
4270 }
4271 if(high<y){
4272 high=y;
4273 }
4274 if(maxY==null||high>maxY){
4275 maxY=high;
4276 }
4277 if(minY==null||low<minY){
4278 minY=low;
4279 }
4280 }
4281 }else{
4282 for(var j=0;j<_212.length;j++){
4283 var y=_212[j][1];
4284 if(!y){
4285 continue;
4286 }
4287 if(maxY==null||y>maxY){
4288 maxY=y;
4289 }
4290 if(minY==null||y<minY){
4291 minY=y;
4292 }
4293 }
4294 }
4295 return [minY,maxY];
4296 };
4297 Dygraph.prototype.drawGraph_=function(data){
4298 var minY=null,maxY=null;
4299 this.layout_.removeAllDatasets();
4300 this.setColors_();
4301 this.attrs_["pointSize"]=0.5*this.attr_("highlightCircleSize");
4302 for(var i=1;i<data[0].length;i++){
4303 var _216=[];
4304 for(var j=0;j<data.length;j++){
4305 var date=data[j][0];
4306 _216[j]=[date,data[j][i]];
4307 }
4308 _216=this.rollingAverage(_216,this.rollPeriod_);
4309 var bars=this.attr_("errorBars")||this.attr_("customBars");
4310 if(this.dateWindow_){
4311 var low=this.dateWindow_[0];
4312 var high=this.dateWindow_[1];
4313 var _217=[];
4314 for(var k=0;k<_216.length;k++){
4315 if(_216[k][0]>=low&&_216[k][0]<=high){
4316 _217.push(_216[k]);
4317 }
4318 }
4319 _216=_217;
4320 }
4321 var _218=this.extremeValues_(_216);
4322 var _219=_218[0];
4323 var _220=_218[1];
4324 if(!minY||_219<minY){
4325 minY=_219;
4326 }
4327 if(!maxY||_220>maxY){
4328 maxY=_220;
4329 }
4330 if(bars){
4331 var vals=[];
4332 for(var j=0;j<_216.length;j++){
4333 vals[j]=[_216[j][0],_216[j][1][0],_216[j][1][1],_216[j][1][2]];
4334 }
4335 this.layout_.addDataset(this.attr_("labels")[i],vals);
4336 }else{
4337 this.layout_.addDataset(this.attr_("labels")[i],_216);
4338 }
4339 }
4340 if(this.valueRange_!=null){
4341 this.addYTicks_(this.valueRange_[0],this.valueRange_[1]);
4342 }else{
4343 var span=maxY-minY;
4344 var _223=maxY+0.1*span;
4345 var _224=minY-0.1*span;
4346 if(_224<0&&minY>=0){
4347 _224=0;
4348 }
4349 if(_223>0&&maxY<=0){
4350 _223=0;
4351 }
4352 if(this.attr_("includeZero")){
4353 if(maxY<0){
4354 _223=0;
4355 }
4356 if(minY>0){
4357 _224=0;
4358 }
4359 }
4360 this.addYTicks_(_224,_223);
4361 }
4362 this.addXTicks_();
4363 this.layout_.evaluateWithError();
4364 this.plotter_.clear();
4365 this.plotter_.render();
4366 this.canvas_.getContext("2d").clearRect(0,0,this.canvas_.width,this.canvas_.height);
4367 };
4368 Dygraph.prototype.rollingAverage=function(_225,_226){
4369 if(_225.length<2){
4370 return _225;
4371 }
4372 var _226=Math.min(_226,_225.length-1);
4373 var _227=[];
4374 var _228=this.attr_("sigma");
4375 if(this.fractions_){
4376 var num=0;
4377 var den=0;
4378 var mult=100;
4379 for(var i=0;i<_225.length;i++){
4380 num+=_225[i][1][0];
4381 den+=_225[i][1][1];
4382 if(i-_226>=0){
4383 num-=_225[i-_226][1][0];
4384 den-=_225[i-_226][1][1];
4385 }
4386 var date=_225[i][0];
4387 var _231=den?num/den:0;
4388 if(this.attr_("errorBars")){
4389 if(this.wilsonInterval_){
4390 if(den){
4391 var p=_231<0?0:_231,n=den;
4392 var pm=_228*Math.sqrt(p*(1-p)/n+_228*_228/(4*n*n));
4393 var _234=1+_228*_228/den;
4394 var low=(p+_228*_228/(2*den)-pm)/_234;
4395 var high=(p+_228*_228/(2*den)+pm)/_234;
4396 _227[i]=[date,[p*mult,(p-low)*mult,(high-p)*mult]];
4397 }else{
4398 _227[i]=[date,[0,0,0]];
4399 }
4400 }else{
4401 var _235=den?_228*Math.sqrt(_231*(1-_231)/den):1;
4402 _227[i]=[date,[mult*_231,mult*_235,mult*_235]];
4403 }
4404 }else{
4405 _227[i]=[date,mult*_231];
4406 }
4407 }
4408 }else{
4409 if(this.attr_("customBars")){
4410 var low=0;
4411 var mid=0;
4412 var high=0;
4413 var _237=0;
4414 for(var i=0;i<_225.length;i++){
4415 var data=_225[i][1];
4416 var y=data[1];
4417 _227[i]=[_225[i][0],[y,y-data[0],data[2]-y]];
4418 low+=data[0];
4419 mid+=y;
4420 high+=data[2];
4421 _237+=1;
4422 if(i-_226>=0){
4423 var prev=_225[i-_226];
4424 low-=prev[1][0];
4425 mid-=prev[1][1];
4426 high-=prev[1][2];
4427 _237-=1;
4428 }
4429 _227[i]=[_225[i][0],[1*mid/_237,1*(mid-low)/_237,1*(high-mid)/_237]];
4430 }
4431 }else{
4432 var _239=Math.min(_226-1,_225.length-2);
4433 if(!this.attr_("errorBars")){
4434 if(_226==1){
4435 return _225;
4436 }
4437 for(var i=0;i<_225.length;i++){
4438 var sum=0;
4439 var _241=0;
4440 for(var j=Math.max(0,i-_226+1);j<i+1;j++){
4441 var y=_225[j][1];
4442 if(!y||isNaN(y)){
4443 continue;
4444 }
4445 _241++;
4446 sum+=_225[j][1];
4447 }
4448 if(_241){
4449 _227[i]=[_225[i][0],sum/_241];
4450 }else{
4451 _227[i]=[_225[i][0],null];
4452 }
4453 }
4454 }else{
4455 for(var i=0;i<_225.length;i++){
4456 var sum=0;
4457 var _242=0;
4458 var _241=0;
4459 for(var j=Math.max(0,i-_226+1);j<i+1;j++){
4460 var y=_225[j][1][0];
4461 if(!y||isNaN(y)){
4462 continue;
4463 }
4464 _241++;
4465 sum+=_225[j][1][0];
4466 _242+=Math.pow(_225[j][1][1],2);
4467 }
4468 if(_241){
4469 var _235=Math.sqrt(_242)/_241;
4470 _227[i]=[_225[i][0],[sum/_241,_228*_235,_228*_235]];
4471 }else{
4472 _227[i]=[_225[i][0],[null,null,null]];
4473 }
4474 }
4475 }
4476 }
4477 }
4478 return _227;
4479 };
4480 Dygraph.dateParser=function(_243,self){
4481 var _244;
4482 var d;
4483 if(_243.length==10&&_243.search("-")!=-1){
4484 _244=_243.replace("-","/","g");
4485 while(_244.search("-")!=-1){
4486 _244=_244.replace("-","/");
4487 }
4488 d=Date.parse(_244);
4489 }else{
4490 if(_243.length==8){
4491 _244=_243.substr(0,4)+"/"+_243.substr(4,2)+"/"+_243.substr(6,2);
4492 d=Date.parse(_244);
4493 }else{
4494 d=Date.parse(_243);
4495 }
4496 }
4497 if(!d||isNaN(d)){
4498 self.error("Couldn't parse "+_243+" as a date");
4499 }
4500 return d;
4501 };
4502 Dygraph.prototype.detectTypeFromString_=function(str){
4503 var _246=false;
4504 if(str.indexOf("-")>=0||str.indexOf("/")>=0||isNaN(parseFloat(str))){
4505 _246=true;
4506 }else{
4507 if(str.length==8&&str>"19700101"&&str<"20371231"){
4508 _246=true;
4509 }
4510 }
4511 if(_246){
4512 this.attrs_.xValueFormatter=Dygraph.dateString_;
4513 this.attrs_.xValueParser=Dygraph.dateParser;
4514 this.attrs_.xTicker=Dygraph.dateTicker;
4515 }else{
4516 this.attrs_.xValueFormatter=function(x){
4517 return x;
4518 };
4519 this.attrs_.xValueParser=function(x){
4520 return parseFloat(x);
4521 };
4522 this.attrs_.xTicker=Dygraph.numericTicks;
4523 }
4524 };
4525 Dygraph.prototype.parseCSV_=function(data){
4526 var ret=[];
4527 var _247=data.split("\n");
4528 var _248=0;
4529 if(this.labelsFromCSV_){
4530 _248=1;
4531 this.attrs_.labels=_247[0].split(",");
4532 }
4533 var _249;
4534 var _250=false;
4535 var _251=this.attr_("labels").length;
4536 for(var i=_248;i<_247.length;i++){
4537 var line=_247[i];
4538 if(line.length==0){
4539 continue;
4540 }
4541 var _253=line.split(",");
4542 if(_253.length<2){
4543 continue;
4544 }
4545 var _254=[];
4546 if(!_250){
4547 this.detectTypeFromString_(_253[0]);
4548 _249=this.attr_("xValueParser");
4549 _250=true;
4550 }
4551 _254[0]=_249(_253[0],this);
4552 if(this.fractions_){
4553 for(var j=1;j<_253.length;j++){
4554 var vals=_253[j].split("/");
4555 _254[j]=[parseFloat(vals[0]),parseFloat(vals[1])];
4556 }
4557 }else{
4558 if(this.attr_("errorBars")){
4559 for(var j=1;j<_253.length;j+=2){
4560 _254[(j+1)/2]=[parseFloat(_253[j]),parseFloat(_253[j+1])];
4561 }
4562 }else{
4563 if(this.attr_("customBars")){
4564 for(var j=1;j<_253.length;j++){
4565 var vals=_253[j].split(";");
4566 _254[j]=[parseFloat(vals[0]),parseFloat(vals[1]),parseFloat(vals[2])];
4567 }
4568 }else{
4569 for(var j=1;j<_253.length;j++){
4570 _254[j]=parseFloat(_253[j]);
4571 }
4572 }
4573 }
4574 }
4575 ret.push(_254);
4576 if(_254.length!=_251){
4577 this.error("Number of columns in line "+i+" ("+_254.length+") does not agree with number of labels ("+_251+") "+line);
4578 }
4579 }
4580 return ret;
4581 };
4582 Dygraph.prototype.parseArray_=function(data){
4583 if(data.length==0){
4584 this.error("Can't plot empty data set");
4585 return null;
4586 }
4587 if(data[0].length==0){
4588 this.error("Data set cannot contain an empty row");
4589 return null;
4590 }
4591 if(this.attr_("labels")==null){
4592 this.warn("Using default labels. Set labels explicitly via 'labels' "+"in the options parameter");
4593 this.attrs_.labels=["X"];
4594 for(var i=1;i<data[0].length;i++){
4595 this.attrs_.labels.push("Y"+i);
4596 }
4597 }
4598 if(MochiKit.Base.isDateLike(data[0][0])){
4599 this.attrs_.xValueFormatter=Dygraph.dateString_;
4600 this.attrs_.xTicker=Dygraph.dateTicker;
4601 var _255=MochiKit.Base.clone(data);
4602 for(var i=0;i<data.length;i++){
4603 if(_255[i].length==0){
4604 this.error("Row "<<(1+i)<<" of data is empty");
4605 return null;
4606 }
4607 if(_255[i][0]==null||typeof (_255[i][0].getTime)!="function"){
4608 this.error("x value in row "<<(1+i)<<" is not a Date");
4609 return null;
4610 }
4611 _255[i][0]=_255[i][0].getTime();
4612 }
4613 return _255;
4614 }else{
4615 this.attrs_.xValueFormatter=function(x){
4616 return x;
4617 };
4618 this.attrs_.xTicker=Dygraph.numericTicks;
4619 return data;
4620 }
4621 };
4622 Dygraph.prototype.parseDataTable_=function(data){
4623 var cols=data.getNumberOfColumns();
4624 var rows=data.getNumberOfRows();
4625 var _258=[];
4626 for(var i=0;i<cols;i++){
4627 _258.push(data.getColumnLabel(i));
4628 }
4629 this.attrs_.labels=_258;
4630 var _259=data.getColumnType(0);
4631 if(_259=="date"){
4632 this.attrs_.xValueFormatter=Dygraph.dateString_;
4633 this.attrs_.xValueParser=Dygraph.dateParser;
4634 this.attrs_.xTicker=Dygraph.dateTicker;
4635 }else{
4636 if(_259=="number"){
4637 this.attrs_.xValueFormatter=function(x){
4638 return x;
4639 };
4640 this.attrs_.xValueParser=function(x){
4641 return parseFloat(x);
4642 };
4643 this.attrs_.xTicker=Dygraph.numericTicks;
4644 }else{
4645 this.error("only 'date' and 'number' types are supported for column 1 "+"of DataTable input (Got '"+_259+"')");
4646 return null;
4647 }
4648 }
4649 var ret=[];
4650 for(var i=0;i<rows;i++){
4651 var row=[];
4652 if(!data.getValue(i,0)){
4653 continue;
4654 }
4655 if(_259=="date"){
4656 row.push(data.getValue(i,0).getTime());
4657 }else{
4658 row.push(data.getValue(i,0));
4659 }
4660 for(var j=1;j<cols;j++){
4661 row.push(data.getValue(i,j));
4662 }
4663 ret.push(row);
4664 }
4665 return ret;
4666 };
4667 Dygraph.prototype.start_=function(){
4668 if(typeof this.file_=="function"){
4669 this.loadedEvent_(this.file_());
4670 }else{
4671 if(MochiKit.Base.isArrayLike(this.file_)){
4672 this.rawData_=this.parseArray_(this.file_);
4673 this.drawGraph_(this.rawData_);
4674 }else{
4675 if(typeof this.file_=="object"&&typeof this.file_.getColumnRange=="function"){
4676 this.rawData_=this.parseDataTable_(this.file_);
4677 this.drawGraph_(this.rawData_);
4678 }else{
4679 if(typeof this.file_=="string"){
4680 if(this.file_.indexOf("\n")>=0){
4681 this.loadedEvent_(this.file_);
4682 }else{
4683 var req=new XMLHttpRequest();
4684 var _262=this;
4685 req.onreadystatechange=function(){
4686 if(req.readyState==4){
4687 if(req.status==200){
4688 _262.loadedEvent_(req.responseText);
4689 }
4690 }
4691 };
4692 req.open("GET",this.file_,true);
4693 req.send(null);
4694 }
4695 }else{
4696 this.error("Unknown data format: "+(typeof this.file_));
4697 }
4698 }
4699 }
4700 }
4701 };
4702 Dygraph.prototype.updateOptions=function(_263){
4703 if(_263.rollPeriod){
4704 this.rollPeriod_=_263.rollPeriod;
4705 }
4706 if(_263.dateWindow){
4707 this.dateWindow_=_263.dateWindow;
4708 }
4709 if(_263.valueRange){
4710 this.valueRange_=_263.valueRange;
4711 }
4712 MochiKit.Base.update(this.user_attrs_,_263);
4713 this.labelsFromCSV_=(this.attr_("labels")==null);
4714 this.layout_.updateOptions({"errorBars":this.attr_("errorBars")});
4715 if(_263["file"]&&_263["file"]!=this.file_){
4716 this.file_=_263["file"];
4717 this.start_();
4718 }else{
4719 this.drawGraph_(this.rawData_);
4720 }
4721 };
4722 Dygraph.prototype.adjustRoll=function(_264){
4723 this.rollPeriod_=_264;
4724 this.drawGraph_(this.rawData_);
4725 };
4726 Dygraph.GVizChart=function(_265){
4727 this.container=_265;
4728 };
4729 Dygraph.GVizChart.prototype.draw=function(data,_266){
4730 this.container.innerHTML="";
4731 this.date_graph=new Dygraph(this.container,data,_266);
4732 };
4733 DateGraph=Dygraph;
4734