Fossil

Hex Artifact Content
Login

Artifact aaf43d1459ee6ea218da70ac02863b33f3740767:


0000: 2f 2a 2a 0a 20 20 20 20 54 68 69 73 20 66 69 6c  /**.    This fil
0010: 65 20 70 72 6f 76 69 64 65 73 20 61 20 4a 53 20  e provides a JS 
0020: 69 6e 74 65 72 66 61 63 65 20 69 6e 74 6f 20 74  interface into t
0030: 68 65 20 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e  he core function
0040: 61 6c 69 74 79 20 6f 66 0a 20 20 20 20 4a 53 4f  ality of.    JSO
0050: 4e 2d 63 65 6e 74 72 69 63 20 62 61 63 6b 2d 65  N-centric back-e
0060: 6e 64 73 2e 20 49 74 20 73 65 6e 64 73 20 47 45  nds. It sends GE
0070: 54 20 6f 72 20 4a 53 4f 4e 20 50 4f 53 54 20 72  T or JSON POST r
0080: 65 71 75 65 73 74 73 20 74 6f 0a 20 20 20 20 61  equests to.    a
0090: 20 62 61 63 6b 2d 65 6e 64 20 61 6e 64 20 65 78   back-end and ex
00a0: 70 65 63 74 73 20 4a 53 4f 4e 20 72 65 73 70 6f  pects JSON respo
00b0: 6e 73 65 73 2e 20 54 68 65 20 65 78 61 63 74 20  nses. The exact 
00c0: 73 65 6d 61 6e 74 69 63 73 20 6f 66 0a 20 20 20  semantics of.   
00d0: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
00e0: 62 61 63 6b 2d 65 6e 64 20 61 6e 64 20 6f 76 65  back-end and ove
00f0: 72 6c 79 69 6e 67 20 66 72 6f 6e 74 2d 65 6e 64  rlying front-end
0100: 20 61 72 65 20 6e 6f 74 20 69 74 73 20 63 6f 6e   are not its con
0110: 63 65 72 6e 2c 0a 20 20 20 20 61 6e 64 20 69 74  cern,.    and it
0120: 20 6c 65 61 76 65 73 20 74 68 65 20 69 6e 74 65   leaves the inte
0130: 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68  rpretation of th
0140: 65 20 64 61 74 61 20 75 70 20 74 6f 20 74 68 65  e data up to the
0150: 20 63 6c 69 65 6e 74 2f 73 65 72 76 65 72 0a 20   client/server. 
0160: 20 20 20 69 6e 73 6f 66 61 72 20 61 73 20 70 6f     insofar as po
0170: 73 73 69 62 6c 65 2e 0a 0a 20 20 20 20 41 6c 6c  ssible...    All
0180: 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69   functionality i
0190: 73 20 70 61 72 74 20 6f 66 20 61 20 63 6c 61 73  s part of a clas
01a0: 73 20 6e 61 6d 65 64 20 57 68 41 6a 61 6a 2c 20  s named WhAjaj, 
01b0: 61 6e 64 20 74 68 61 74 20 63 6c 61 73 73 0a 20  and that class. 
01c0: 20 20 20 61 63 74 73 20 61 73 20 6e 61 6d 65 73     acts as names
01d0: 70 61 63 65 20 66 6f 72 20 74 68 69 73 20 66 72  pace for this fr
01e0: 61 6d 65 77 6f 72 6b 2e 0a 0a 20 20 20 20 41 75  amework...    Au
01f0: 74 68 6f 72 3a 20 53 74 65 70 68 61 6e 20 42 65  thor: Stephan Be
0200: 61 6c 20 28 68 74 74 70 3a 2f 2f 77 61 6e 64 65  al (http://wande
0210: 72 69 6e 67 68 6f 72 73 65 2e 6e 65 74 2f 68 6f  ringhorse.net/ho
0220: 6d 65 2f 73 74 65 70 68 61 6e 2f 29 0a 0a 20 20  me/stephan/)..  
0230: 20 20 4c 69 63 65 6e 73 65 3a 20 50 75 62 6c 69    License: Publi
0240: 63 20 44 6f 6d 61 69 6e 0a 20 20 20 20 0a 20 20  c Domain.    .  
0250: 20 20 54 68 69 73 20 66 72 61 6d 65 77 6f 72 6b    This framework
0260: 20 69 73 20 64 69 72 65 63 74 6c 79 20 64 65 72   is directly der
0270: 69 76 65 64 20 66 72 6f 6d 20 63 6f 64 65 20 6f  ived from code o
0280: 72 69 67 69 6e 61 6c 6c 79 20 66 6f 75 6e 64 20  riginally found 
0290: 69 6e 20 0a 20 20 20 20 68 74 74 70 3a 2f 2f 63  in .    http://c
02a0: 6f 64 65 2e 67 6f 6f 67 6c 65 2e 63 6f 6d 2f 70  ode.google.com/p
02b0: 2f 6a 73 6f 6e 6d 65 73 73 61 67 65 2c 20 61 6e  /jsonmessage, an
02c0: 64 20 6c 61 74 65 72 20 69 6e 20 0a 20 20 20 20  d later in .    
02d0: 68 74 74 70 3a 2f 2f 77 68 69 6b 69 2e 77 61 6e  http://whiki.wan
02e0: 64 65 72 69 6e 67 68 6f 72 73 65 2e 6e 65 74 2c  deringhorse.net,
02f0: 20 77 68 65 72 65 20 69 74 20 63 6f 6e 74 61 69   where it contai
0300: 6e 65 64 20 71 75 69 74 65 20 61 20 62 69 74 20  ned quite a bit 
0310: 0a 20 20 20 20 6f 66 20 61 70 70 6c 69 63 61 74  .    of applicat
0320: 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 6c 6f 67  ion-specific log
0330: 69 63 2e 20 49 74 20 77 61 73 20 65 76 65 6e 74  ic. It was event
0340: 75 61 6c 6c 79 20 28 74 68 65 20 33 72 64 20 74  ually (the 3rd t
0350: 69 6d 65 20 69 20 0a 20 20 20 20 6e 65 65 64 65  ime i .    neede
0360: 64 20 69 74 29 20 73 70 6c 69 74 20 6f 66 66 20  d it) split off 
0370: 69 6e 74 6f 20 69 74 73 20 6f 77 6e 20 6c 69 62  into its own lib
0380: 72 61 72 79 20 74 6f 20 73 69 6d 70 6c 69 66 79  rary to simplify
0390: 20 69 6e 63 6c 75 73 69 6f 6e 20 0a 20 20 20 20   inclusion .    
03a0: 69 6e 74 6f 20 6d 79 20 6d 61 6e 79 20 6d 69 6e  into my many min
03b0: 69 2d 70 72 6f 6a 65 63 74 73 2e 0a 2a 2f 0a 0a  i-projects..*/..
03c0: 0a 2f 2a 2a 0a 20 20 20 20 54 68 65 20 57 68 41  ./**.    The WhA
03d0: 6a 61 6a 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  jaj function is 
03e0: 70 72 69 6d 61 72 69 6c 79 20 61 20 6e 61 6d 65  primarily a name
03f0: 73 70 61 63 65 2c 20 61 6e 64 20 6e 6f 74 20 69  space, and not i
0400: 6e 74 65 6e 64 65 64 20 0a 20 20 20 20 74 6f 20  ntended .    to 
0410: 63 61 6c 6c 65 64 20 6f 72 20 69 6e 73 74 61 6e  called or instan
0420: 74 69 61 74 65 64 20 76 69 61 20 74 68 65 20 27  tiated via the '
0430: 6e 65 77 27 20 6f 70 65 72 61 74 6f 72 2e 0a 2a  new' operator..*
0440: 2f 0a 66 75 6e 63 74 69 6f 6e 20 57 68 41 6a 61  /.function WhAja
0450: 6a 28 29 0a 7b 0a 7d 0a 0a 2f 2a 2a 20 52 65 74  j().{.}../** Ret
0460: 75 72 6e 73 20 61 20 6d 69 6c 6c 69 73 65 63 6f  urns a milliseco
0470: 6e 64 20 55 6e 69 78 20 45 70 6f 63 68 20 74 69  nd Unix Epoch ti
0480: 6d 65 73 74 61 6d 70 2e 20 2a 2f 0a 57 68 41 6a  mestamp. */.WhAj
0490: 61 6a 2e 6d 73 54 69 6d 65 73 74 61 6d 70 20 3d  aj.msTimestamp =
04a0: 20 66 75 6e 63 74 69 6f 6e 28 29 0a 7b 0a 20 20   function().{.  
04b0: 20 20 72 65 74 75 72 6e 20 28 6e 65 77 20 44 61    return (new Da
04c0: 74 65 28 29 29 2e 67 65 74 54 69 6d 65 28 29 3b  te()).getTime();
04d0: 0a 7d 3b 0a 0a 2f 2a 2a 20 52 65 74 75 72 6e 73  .};../** Returns
04e0: 20 61 20 55 6e 69 78 20 45 70 6f 63 68 20 74 69   a Unix Epoch ti
04f0: 6d 65 73 74 61 6d 70 20 28 69 6e 20 73 65 63 6f  mestamp (in seco
0500: 6e 64 73 29 20 69 6e 20 69 6e 74 65 67 65 72 20  nds) in integer 
0510: 66 6f 72 6d 61 74 2e 0a 0a 20 20 20 20 52 65 6d  format...    Rem
0520: 69 6e 64 65 72 20 74 6f 20 73 65 6c 66 3a 20 28  inder to self: (
0530: 31 2e 31 20 25 31 2e 32 29 20 65 76 61 6c 75 61  1.1 %1.2) evalua
0540: 74 65 73 20 74 6f 20 61 20 66 6c 6f 61 74 69 6e  tes to a floatin
0550: 67 2d 70 6f 69 6e 74 20 76 61 6c 75 65 20 0a 20  g-point value . 
0560: 20 20 20 69 6e 20 4a 53 2c 20 61 6e 64 20 74 68     in JS, and th
0570: 75 73 20 74 68 69 73 20 69 6d 70 6c 65 6d 65 6e  us this implemen
0580: 74 61 74 69 6f 6e 20 69 73 20 6c 65 73 73 20 74  tation is less t
0590: 68 61 6e 20 6f 70 74 69 6d 61 6c 2e 0a 2a 2f 0a  han optimal..*/.
05a0: 57 68 41 6a 61 6a 2e 75 6e 69 78 54 69 6d 65 73  WhAjaj.unixTimes
05b0: 74 61 6d 70 20 3d 20 66 75 6e 63 74 69 6f 6e 28  tamp = function(
05c0: 29 0a 7b 0a 20 20 20 20 76 61 72 20 74 73 20 3d  ).{.    var ts =
05d0: 20 28 6e 65 77 20 44 61 74 65 28 29 29 2e 67 65   (new Date()).ge
05e0: 74 54 69 6d 65 28 29 3b 0a 20 20 20 20 72 65 74  tTime();.    ret
05f0: 75 72 6e 20 70 61 72 73 65 49 6e 74 28 20 22 22  urn parseInt( ""
0600: 2b 28 28 74 73 20 2f 20 31 30 30 30 29 20 25 20  +((ts / 1000) % 
0610: 74 73 29 20 29 3b 0a 7d 3b 0a 0a 2f 2a 2a 0a 20  ts) );.};../**. 
0620: 20 20 20 52 65 74 75 72 6e 73 20 74 72 75 65 20     Returns true 
0630: 69 66 20 76 20 69 73 2d 61 20 41 72 72 61 79 20  if v is-a Array 
0640: 69 6e 73 74 61 6e 63 65 2e 0a 2a 2f 0a 57 68 41  instance..*/.WhA
0650: 6a 61 6a 2e 69 73 41 72 72 61 79 20 3d 20 66 75  jaj.isArray = fu
0660: 6e 63 74 69 6f 6e 28 20 76 20 29 0a 7b 0a 20 20  nction( v ).{.  
0670: 20 20 72 65 74 75 72 6e 20 28 76 20 26 26 0a 20    return (v &&. 
0680: 20 20 20 20 20 20 20 20 20 20 20 28 76 20 69 6e             (v in
0690: 73 74 61 6e 63 65 6f 66 20 41 72 72 61 79 29 20  stanceof Array) 
06a0: 7c 7c 0a 20 20 20 20 20 20 20 20 20 20 20 20 28  ||.            (
06b0: 4f 62 6a 65 63 74 2e 70 72 6f 74 6f 74 79 70 65  Object.prototype
06c0: 2e 74 6f 53 74 72 69 6e 67 2e 63 61 6c 6c 28 76  .toString.call(v
06d0: 29 20 3d 3d 3d 20 22 5b 6f 62 6a 65 63 74 20 41  ) === "[object A
06e0: 72 72 61 79 5d 22 29 0a 20 20 20 20 20 20 20 20  rray]").        
06f0: 20 20 20 20 29 3b 0a 20 20 20 20 2f 2a 20 52 65      );.    /* Re
0700: 6d 69 6e 64 65 72 73 20 74 6f 20 73 65 6c 66 3a  minders to self:
0710: 0a 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 20  .        typeof 
0720: 5b 5d 20 3d 3d 20 22 6f 62 6a 65 63 74 22 0a 20  [] == "object". 
0730: 20 20 20 20 20 20 20 74 6f 53 74 72 69 6e 67 2e         toString.
0740: 63 61 6c 6c 28 5b 5d 29 20 3d 3d 20 22 5b 6f 62  call([]) == "[ob
0750: 6a 65 63 74 20 41 72 72 61 79 5d 22 0a 20 20 20  ject Array]".   
0760: 20 20 20 20 20 28 5b 5d 29 2e 74 6f 53 74 72 69       ([]).toStri
0770: 6e 67 28 29 20 3d 3d 20 65 6d 70 74 79 0a 20 20  ng() == empty.  
0780: 20 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 2a 0a 20 20 20    */.};../**.   
0790: 20 52 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   Returns true if
07a0: 20 76 20 69 73 2d 61 20 4f 62 6a 65 63 74 20 69   v is-a Object i
07b0: 6e 73 74 61 6e 63 65 2e 0a 2a 2f 0a 57 68 41 6a  nstance..*/.WhAj
07c0: 61 6a 2e 69 73 4f 62 6a 65 63 74 20 3d 20 66 75  aj.isObject = fu
07d0: 6e 63 74 69 6f 6e 28 20 76 20 29 0a 7b 0a 20 20  nction( v ).{.  
07e0: 20 20 72 65 74 75 72 6e 20 76 20 26 26 0a 20 20    return v &&.  
07f0: 20 20 20 20 20 20 28 76 20 69 6e 73 74 61 6e 63        (v instanc
0800: 65 6f 66 20 4f 62 6a 65 63 74 29 20 26 26 0a 20  eof Object) &&. 
0810: 20 20 20 20 20 20 20 28 27 5b 6f 62 6a 65 63 74         ('[object
0820: 20 4f 62 6a 65 63 74 5d 27 20 3d 3d 3d 20 4f 62   Object]' === Ob
0830: 6a 65 63 74 2e 70 72 6f 74 6f 74 79 70 65 2e 74  ject.prototype.t
0840: 6f 53 74 72 69 6e 67 2e 61 70 70 6c 79 28 76 29  oString.apply(v)
0850: 20 29 3b 0a 7d 3b 0a 0a 2f 2a 2a 0a 20 20 20 20   );.};../**.    
0860: 52 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20  Returns true if 
0870: 76 20 69 73 2d 61 20 46 75 6e 63 74 69 6f 6e 20  v is-a Function 
0880: 69 6e 73 74 61 6e 63 65 2e 0a 2a 2f 0a 57 68 41  instance..*/.WhA
0890: 6a 61 6a 2e 69 73 46 75 6e 63 74 69 6f 6e 20 3d  jaj.isFunction =
08a0: 20 66 75 6e 63 74 69 6f 6e 28 6f 62 6a 29 0a 7b   function(obj).{
08b0: 0a 20 20 20 20 72 65 74 75 72 6e 20 6f 62 6a 0a  .    return obj.
08c0: 20 20 20 20 26 26 20 28 0a 20 20 20 20 28 6f 62      && (.    (ob
08d0: 6a 20 69 6e 73 74 61 6e 63 65 6f 66 20 46 75 6e  j instanceof Fun
08e0: 63 74 69 6f 6e 29 0a 20 20 20 20 7c 7c 20 28 27  ction).    || ('
08f0: 66 75 6e 63 74 69 6f 6e 27 20 3d 3d 3d 20 74 79  function' === ty
0900: 70 65 6f 66 20 6f 62 6a 29 0a 20 20 20 20 7c 7c  peof obj).    ||
0910: 20 28 22 5b 6f 62 6a 65 63 74 20 46 75 6e 63 74   ("[object Funct
0920: 69 6f 6e 5d 22 20 3d 3d 3d 20 4f 62 6a 65 63 74  ion]" === Object
0930: 2e 70 72 6f 74 6f 74 79 70 65 2e 74 6f 53 74 72  .prototype.toStr
0940: 69 6e 67 2e 63 61 6c 6c 28 6f 62 6a 29 29 0a 20  ing.call(obj)). 
0950: 20 20 20 29 0a 20 20 20 20 3b 0a 7d 3b 0a 0a 2f     ).    ;.};../
0960: 2a 2a 0a 20 20 20 20 50 61 72 73 65 73 20 77 69  **.    Parses wi
0970: 6e 64 6f 77 2e 6c 6f 63 61 74 69 6f 6e 2e 73 65  ndow.location.se
0980: 61 72 63 68 2d 73 74 79 6c 65 20 73 74 72 69 6e  arch-style strin
0990: 67 20 69 6e 74 6f 20 61 6e 20 6f 62 6a 65 63 74  g into an object
09a0: 0a 20 20 20 20 63 6f 6e 74 61 69 6e 69 6e 67 20  .    containing 
09b0: 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20  key/value pairs 
09c0: 6f 66 20 55 52 4c 20 61 72 67 75 6d 65 6e 74 73  of URL arguments
09d0: 20 28 61 6c 72 65 61 64 79 20 75 72 6c 64 65 63   (already urldec
09e0: 6f 64 65 64 29 2e 0a 20 20 20 20 0a 20 20 20 20  oded)..    .    
09f0: 49 66 20 74 68 65 20 73 74 72 20 61 72 67 75 6d  If the str argum
0a00: 65 6e 74 20 69 73 20 6e 6f 74 20 70 61 73 73 65  ent is not passe
0a10: 64 20 28 61 72 67 75 6d 65 6e 74 73 2e 6c 65 6e  d (arguments.len
0a20: 67 74 68 3d 3d 30 29 20 74 68 65 6e 20 0a 20 20  gth==0) then .  
0a30: 20 20 77 69 6e 64 6f 77 2e 6c 6f 63 61 74 69 6f    window.locatio
0a40: 6e 2e 73 65 61 72 63 68 2e 73 75 62 73 74 72 69  n.search.substri
0a50: 6e 67 28 31 29 20 69 73 20 75 73 65 64 20 62 79  ng(1) is used by
0a60: 20 64 65 66 61 75 6c 74 2e 20 49 66 20 0a 20 20   default. If .  
0a70: 20 20 6e 65 69 74 68 65 72 20 73 74 72 20 69 73    neither str is
0a80: 20 70 61 73 73 65 64 20 69 6e 20 6e 6f 72 20 77   passed in nor w
0a90: 69 6e 64 6f 77 20 65 78 69 73 74 73 20 74 68 65  indow exists the
0aa0: 6e 20 66 61 6c 73 65 20 69 73 20 72 65 74 75 72  n false is retur
0ab0: 6e 65 64 2e 0a 0a 20 20 20 20 4f 6e 20 73 75 63  ned...    On suc
0ac0: 63 65 73 73 20 69 74 20 72 65 74 75 72 6e 73 20  cess it returns 
0ad0: 61 6e 20 4f 62 6a 65 63 74 20 63 6f 6e 74 61 69  an Object contai
0ae0: 6e 69 6e 67 20 74 68 65 20 6b 65 79 2f 76 61 6c  ning the key/val
0af0: 75 65 20 70 61 69 72 73 0a 20 20 20 20 70 61 72  ue pairs.    par
0b00: 73 65 64 20 66 72 6f 6d 20 74 68 65 20 73 74 72  sed from the str
0b10: 69 6e 67 2e 20 4b 65 79 73 20 77 68 69 63 68 20  ing. Keys which 
0b20: 68 61 76 65 20 6e 6f 20 76 61 6c 75 65 20 61 72  have no value ar
0b30: 65 20 74 72 65 61 74 65 64 0a 20 20 20 20 68 61  e treated.    ha
0b40: 73 20 68 61 76 69 6e 67 20 74 68 65 20 62 6f 6f  s having the boo
0b50: 6c 65 61 6e 20 74 72 75 65 20 76 61 6c 75 65 2e  lean true value.
0b60: 0a 20 20 20 20 0a 20 20 20 20 46 49 58 4d 45 3a  .    .    FIXME:
0b70: 20 66 6f 72 20 6b 65 79 73 20 69 6e 20 74 68 65   for keys in the
0b80: 20 66 6f 72 6d 20 22 6e 61 6d 65 5b 5d 22 2c 20   form "name[]", 
0b90: 62 75 69 6c 64 20 61 6e 20 61 72 72 61 79 20 6f  build an array o
0ba0: 66 20 72 65 73 75 6c 74 73 2c 0a 20 20 20 20 6c  f results,.    l
0bb0: 69 6b 65 20 50 48 50 20 64 6f 65 73 2e 0a 20 0a  ike PHP does.. .
0bc0: 2a 2f 0a 57 68 41 6a 61 6a 2e 70 72 6f 63 65 73  */.WhAjaj.proces
0bd0: 73 55 72 6c 41 72 67 73 20 3d 20 66 75 6e 63 74  sUrlArgs = funct
0be0: 69 6f 6e 28 73 74 72 29 20 7b 0a 20 20 20 20 69  ion(str) {.    i
0bf0: 66 28 20 30 20 3d 3d 3d 20 61 72 67 75 6d 65 6e  f( 0 === argumen
0c00: 74 73 2e 6c 65 6e 67 74 68 20 29 20 7b 0a 20 20  ts.length ) {.  
0c10: 20 20 20 20 20 20 69 66 28 20 28 27 75 6e 64 65        if( ('unde
0c20: 66 69 6e 65 64 27 20 3d 3d 3d 20 74 79 70 65 6f  fined' === typeo
0c30: 66 20 77 69 6e 64 6f 77 29 20 7c 7c 0a 20 20 20  f window) ||.   
0c40: 20 20 20 20 20 20 20 20 20 21 77 69 6e 64 6f 77           !window
0c50: 2e 6c 6f 63 61 74 69 6f 6e 20 7c 7c 0a 20 20 20  .location ||.   
0c60: 20 20 20 20 20 20 20 20 20 21 77 69 6e 64 6f 77           !window
0c70: 2e 6c 6f 63 61 74 69 6f 6e 2e 73 65 61 72 63 68  .location.search
0c80: 20 29 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65   )  return false
0c90: 3b 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 73  ;.        else s
0ca0: 74 72 20 3d 20 28 27 27 2b 77 69 6e 64 6f 77 2e  tr = (''+window.
0cb0: 6c 6f 63 61 74 69 6f 6e 2e 73 65 61 72 63 68 29  location.search)
0cc0: 2e 73 75 62 73 74 72 69 6e 67 28 31 29 3b 0a 20  .substring(1);. 
0cd0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21 20 73     }.    if( ! s
0ce0: 74 72 20 29 20 72 65 74 75 72 6e 20 66 61 6c 73  tr ) return fals
0cf0: 65 3b 0a 20 20 20 20 73 74 72 20 3d 20 28 27 27  e;.    str = (''
0d00: 2b 73 74 72 29 2e 73 70 6c 69 74 28 2f 23 2f 2c  +str).split(/#/,
0d10: 32 29 5b 30 5d 3b 20 2f 2f 20 72 65 6d 6f 76 65  2)[0]; // remove
0d20: 20 23 2e 2e 2e 20 74 6f 20 61 76 6f 69 64 20 69   #... to avoid i
0d30: 74 20 62 65 69 6e 67 20 61 64 64 65 64 20 61 73  t being added as
0d40: 20 70 61 72 74 20 6f 66 20 74 68 65 20 6c 61 73   part of the las
0d50: 74 20 76 61 6c 75 65 2e 0a 20 20 20 20 76 61 72  t value..    var
0d60: 20 61 72 67 73 20 3d 20 7b 7d 3b 0a 20 20 20 20   args = {};.    
0d70: 76 61 72 20 73 70 20 3d 20 73 74 72 2e 73 70 6c  var sp = str.spl
0d80: 69 74 28 2f 26 2b 2f 29 3b 0a 20 20 20 20 76 61  it(/&+/);.    va
0d90: 72 20 72 78 20 3d 20 2f 5e 28 5b 5e 3d 5d 2b 29  r rx = /^([^=]+)
0da0: 28 3d 28 2e 2b 29 29 3f 2f 3b 0a 20 20 20 20 76  (=(.+))?/;.    v
0db0: 61 72 20 69 2c 20 6d 3b 0a 20 20 20 20 66 6f 72  ar i, m;.    for
0dc0: 28 20 69 20 69 6e 20 73 70 20 29 20 7b 0a 20 20  ( i in sp ) {.  
0dd0: 20 20 20 20 20 20 6d 20 3d 20 72 78 2e 65 78 65        m = rx.exe
0de0: 63 28 20 73 70 5b 69 5d 20 29 3b 0a 20 20 20 20  c( sp[i] );.    
0df0: 20 20 20 20 69 66 28 20 21 20 6d 20 29 20 63 6f      if( ! m ) co
0e00: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20  ntinue;.        
0e10: 61 72 67 73 5b 64 65 63 6f 64 65 55 52 49 43 6f  args[decodeURICo
0e20: 6d 70 6f 6e 65 6e 74 28 6d 5b 31 5d 29 5d 20 3d  mponent(m[1])] =
0e30: 20 28 6d 5b 33 5d 20 3f 20 64 65 63 6f 64 65 55   (m[3] ? decodeU
0e40: 52 49 43 6f 6d 70 6f 6e 65 6e 74 28 6d 5b 33 5d  RIComponent(m[3]
0e50: 29 20 3a 20 74 72 75 65 29 3b 0a 20 20 20 20 7d  ) : true);.    }
0e60: 0a 20 20 20 20 72 65 74 75 72 6e 20 61 72 67 73  .    return args
0e70: 3b 0a 7d 3b 0a 0a 2f 2a 2a 0a 20 20 20 20 41 20  ;.};../**.    A 
0e80: 73 69 6d 70 6c 65 20 77 72 61 70 70 65 72 20 61  simple wrapper a
0e90: 72 6f 75 6e 64 20 4a 53 4f 4e 2e 73 74 72 69 6e  round JSON.strin
0ea0: 67 69 66 79 28 29 2c 20 75 73 69 6e 67 20 6d 79  gify(), using my
0eb0: 20 6f 77 6e 20 70 65 72 73 6f 6e 61 6c 0a 20 20   own personal.  
0ec0: 20 20 70 72 65 66 65 72 72 65 64 20 76 61 6c 75    preferred valu
0ed0: 65 73 20 66 6f 72 20 74 68 65 20 32 6e 64 20 61  es for the 2nd a
0ee0: 6e 64 20 33 72 64 20 70 61 72 61 6d 65 74 65 72  nd 3rd parameter
0ef0: 73 2e 20 54 6f 20 67 6c 6f 62 61 6c 6c 79 0a 20  s. To globally. 
0f00: 20 20 20 73 65 74 20 69 74 73 20 69 6e 64 65 6e     set its inden
0f10: 74 61 74 69 6f 6e 20 6c 65 76 65 6c 2c 20 61 73  tation level, as
0f20: 73 69 67 6e 20 57 68 41 6a 61 6a 2e 73 74 72 69  sign WhAjaj.stri
0f30: 6e 67 69 66 79 2e 69 6e 64 65 6e 74 20 74 6f 0a  ngify.indent to.
0f40: 20 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20 76      an integer v
0f50: 61 6c 75 65 20 28 30 20 66 6f 72 20 6e 6f 20 69  alue (0 for no i
0f60: 6e 74 65 6e 64 61 74 69 6f 6e 29 2e 0a 20 20 20  ntendation)..   
0f70: 20 0a 20 20 20 20 54 68 69 73 20 66 75 6e 63 74   .    This funct
0f80: 69 6f 6e 20 69 73 20 69 6e 74 65 6e 64 65 64 20  ion is intended 
0f90: 6f 6e 6c 79 20 66 6f 72 20 68 75 6d 61 6e 2d 72  only for human-r
0fa0: 65 61 64 61 62 6c 65 20 6f 75 74 70 75 74 2c 20  eadable output, 
0fb0: 6e 6f 74 0a 20 20 20 20 67 65 6e 65 72 69 63 20  not.    generic 
0fc0: 6f 76 65 72 2d 74 68 65 2d 77 69 72 65 20 4a 53  over-the-wire JS
0fd0: 4f 4e 20 6f 75 74 70 75 74 20 28 77 68 65 72 65  ON output (where
0fe0: 20 4a 53 4f 4e 2e 73 74 72 69 6e 67 69 66 79 28   JSON.stringify(
0ff0: 76 61 6c 29 20 77 69 6c 6c 0a 20 20 20 20 70 72  val) will.    pr
1000: 6f 64 75 63 65 20 73 6d 61 6c 6c 65 72 20 72 65  oduce smaller re
1010: 73 75 6c 74 73 29 2e 0a 2a 2f 0a 57 68 41 6a 61  sults)..*/.WhAja
1020: 6a 2e 73 74 72 69 6e 67 69 66 79 20 3d 20 66 75  j.stringify = fu
1030: 6e 63 74 69 6f 6e 28 76 61 6c 29 20 7b 0a 20 20  nction(val) {.  
1040: 20 20 69 66 28 20 21 20 61 72 67 75 6d 65 6e 74    if( ! argument
1050: 73 2e 63 61 6c 6c 65 65 2e 69 6e 64 65 6e 74 20  s.callee.indent 
1060: 29 20 61 72 67 75 6d 65 6e 74 73 2e 63 61 6c 6c  ) arguments.call
1070: 65 65 2e 69 6e 64 65 6e 74 20 3d 20 34 3b 0a 20  ee.indent = 4;. 
1080: 20 20 20 72 65 74 75 72 6e 20 4a 53 4f 4e 2e 73     return JSON.s
1090: 74 72 69 6e 67 69 66 79 28 76 61 6c 2c 30 2c 61  tringify(val,0,a
10a0: 72 67 75 6d 65 6e 74 73 2e 63 61 6c 6c 65 65 2e  rguments.callee.
10b0: 69 6e 64 65 6e 74 29 3b 0a 7d 3b 0a 0a 2f 2a 2a  indent);.};../**
10c0: 0a 20 20 20 20 45 61 63 68 20 69 6e 73 74 61 6e  .    Each instan
10d0: 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73  ce of this class
10e0: 20 68 6f 6c 64 73 20 73 74 61 74 65 20 69 6e 66   holds state inf
10f0: 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 6d 61 6b  ormation for mak
1100: 69 6e 67 20 0a 20 20 20 20 41 4a 41 4a 20 72 65  ing .    AJAJ re
1110: 71 75 65 73 74 73 20 74 6f 20 61 20 62 61 63 6b  quests to a back
1120: 2d 65 6e 64 20 73 79 73 74 65 6d 2e 20 57 68 69  -end system. Whi
1130: 6c 65 20 63 6c 69 65 6e 74 73 20 6d 61 79 20 75  le clients may u
1140: 73 65 20 6f 6e 65 20 0a 20 20 20 20 22 72 65 71  se one .    "req
1150: 75 65 73 74 65 72 22 20 6f 62 6a 65 63 74 20 70  uester" object p
1160: 65 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 74  er connection at
1170: 74 65 6d 70 74 2c 20 66 6f 72 20 63 6f 6e 6e 65  tempt, for conne
1180: 63 74 69 6f 6e 73 20 74 6f 20 74 68 65 0a 20 20  ctions to the.  
1190: 20 20 73 61 6d 65 20 62 61 63 6b 2d 65 6e 64 2c    same back-end,
11a0: 20 75 73 69 6e 67 20 61 6e 20 69 6e 73 74 61 6e   using an instan
11b0: 63 65 20 63 6f 6e 66 69 67 75 72 65 64 20 66 6f  ce configured fo
11c0: 72 20 74 68 61 74 20 62 61 63 6b 2d 65 6e 64 20  r that back-end 
11d0: 0a 20 20 20 20 63 61 6e 20 73 69 6d 70 6c 69 66  .    can simplif
11e0: 79 20 75 73 61 67 65 2e 20 54 68 69 73 20 63 6c  y usage. This cl
11f0: 61 73 73 20 69 73 20 64 65 73 69 67 6e 65 64 20  ass is designed 
1200: 73 6f 20 74 68 61 74 20 74 68 65 20 61 63 74 75  so that the actu
1210: 61 6c 20 0a 20 20 20 20 63 6f 6e 6e 65 63 74 69  al .    connecti
1220: 6f 6e 2d 72 65 6c 61 74 65 64 20 64 65 74 61 69  on-related detai
1230: 6c 73 20 28 69 2e 65 2e 20 5f 68 6f 77 5f 20 69  ls (i.e. _how_ i
1240: 74 20 63 6f 6e 6e 65 63 74 73 20 74 6f 20 74 68  t connects to th
1250: 65 20 0a 20 20 20 20 62 61 63 6b 2d 65 6e 64 29  e .    back-end)
1260: 20 6d 61 79 20 62 65 20 72 65 2d 69 6d 70 6c 65   may be re-imple
1270: 6d 65 6e 74 65 64 20 74 6f 20 75 73 65 20 61 20  mented to use a 
1280: 63 6c 69 65 6e 74 27 73 20 70 72 65 66 65 72 72  client's preferr
1290: 65 64 20 0a 20 20 20 20 63 6f 6e 6e 65 63 74 69  ed .    connecti
12a0: 6f 6e 20 6d 65 63 68 61 6e 69 73 6d 20 28 65 2e  on mechanism (e.
12b0: 67 2e 20 6a 51 75 65 72 79 29 2e 0a 20 20 20 20  g. jQuery)..    
12c0: 0a 20 20 20 20 54 68 65 20 6f 70 74 69 6f 6e 61  .    The optiona
12d0: 6c 20 6f 70 74 20 70 61 72 61 6d 61 74 65 72 20  l opt paramater 
12e0: 6d 61 79 20 62 65 20 61 6e 20 6f 62 6a 65 63 74  may be an object
12f0: 20 77 69 74 68 20 61 6e 79 20 28 6f 72 20 61 6c   with any (or al
1300: 6c 29 20 6f 66 20 0a 20 20 20 20 74 68 65 20 70  l) of .    the p
1310: 72 6f 70 65 72 74 69 65 73 20 64 6f 63 75 6d 65  roperties docume
1320: 6e 74 65 64 20 66 6f 72 20 57 68 41 6a 61 6a 2e  nted for WhAjaj.
1330: 43 6f 6e 6e 65 63 74 6f 72 2e 6f 70 74 69 6f 6e  Connector.option
1340: 73 2e 61 6a 61 78 2e 20 0a 20 20 20 20 50 72 6f  s.ajax. .    Pro
1350: 70 65 72 74 69 65 73 20 73 65 74 20 68 65 72 65  perties set here
1360: 20 28 6f 72 20 6c 61 74 65 72 20 76 69 61 20 6d   (or later via m
1370: 6f 64 69 66 69 63 61 74 69 6f 6e 20 6f 66 20 74  odification of t
1380: 68 65 20 22 6f 70 74 69 6f 6e 73 22 20 0a 20 20  he "options" .  
1390: 20 20 70 72 6f 70 65 72 74 79 20 6f 66 20 74 68    property of th
13a0: 69 73 20 6f 62 6a 65 63 74 29 20 77 69 6c 6c 20  is object) will 
13b0: 62 65 20 75 73 65 64 20 69 6e 20 63 61 6c 6c 73  be used in calls
13c0: 20 74 6f 20 0a 20 20 20 20 57 68 41 6a 61 6a 2e   to .    WhAjaj.
13d0: 43 6f 6e 6e 65 63 74 6f 72 2e 73 65 6e 64 52 65  Connector.sendRe
13e0: 71 75 65 73 74 28 29 2c 20 61 6e 64 20 74 68 65  quest(), and the
13f0: 73 65 20 6f 76 65 72 72 69 64 65 20 28 6e 6f 72  se override (nor
1400: 6d 61 6c 6c 79 29 20 61 6e 79 0a 20 20 20 20 6f  mally) any.    o
1410: 70 74 69 6f 6e 73 20 73 65 74 20 69 6e 20 57 68  ptions set in Wh
1420: 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e 6f  Ajaj.Connector.o
1430: 70 74 69 6f 6e 73 2e 61 6a 61 78 2e 20 4e 6f 74  ptions.ajax. Not
1440: 65 20 74 68 61 74 20 0a 20 20 20 20 57 68 41 6a  e that .    WhAj
1450: 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e 73 65 6e  aj.Connector.sen
1460: 64 52 65 71 75 65 73 74 28 29 20 5f 61 6c 73 6f  dRequest() _also
1470: 5f 20 74 61 6b 65 73 20 61 6e 20 6f 70 74 69 6f  _ takes an optio
1480: 6e 73 20 6f 62 6a 65 63 74 2c 20 0a 20 20 20 20  ns object, .    
1490: 61 6e 64 20 6f 6e 65 73 20 70 61 73 73 65 64 20  and ones passed 
14a0: 74 68 65 72 65 20 77 69 6c 6c 20 6f 76 65 72 72  there will overr
14b0: 69 64 65 2c 20 66 6f 72 20 70 75 72 70 6f 73 65  ide, for purpose
14c0: 73 20 6f 66 20 74 68 61 74 20 6f 6e 65 20 0a 20  s of that one . 
14d0: 20 20 20 72 65 71 75 65 73 74 2c 20 61 6e 79 20     request, any 
14e0: 6f 70 74 69 6f 6e 73 20 70 61 73 73 65 64 20 69  options passed i
14f0: 6e 20 68 65 72 65 20 6f 72 20 64 65 66 69 6e 65  n here or define
1500: 64 20 69 6e 20 0a 20 20 20 20 57 68 41 6a 61 6a  d in .    WhAjaj
1510: 2e 43 6f 6e 6e 65 63 74 6f 72 2e 6f 70 74 69 6f  .Connector.optio
1520: 6e 73 2e 61 6a 61 78 2e 20 53 65 65 20 57 68 41  ns.ajax. See WhA
1530: 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e 6f 70  jaj.Connector.op
1540: 74 69 6f 6e 73 2e 61 6a 61 78 0a 20 20 20 20 61  tions.ajax.    a
1550: 6e 64 20 57 68 41 6a 61 6a 2e 43 6f 6e 6e 65 63  nd WhAjaj.Connec
1560: 74 6f 72 2e 70 72 6f 74 6f 74 79 70 65 2e 73 65  tor.prototype.se
1570: 6e 64 52 65 71 75 65 73 74 28 29 20 66 6f 72 20  ndRequest() for 
1580: 6d 6f 72 65 20 64 65 74 61 69 6c 73 0a 20 20 20  more details.   
1590: 20 61 62 6f 75 74 20 74 68 65 20 70 72 65 63 65   about the prece
15a0: 64 65 6e 63 65 20 6f 66 20 6f 70 74 69 6f 6e 73  dence of options
15b0: 2e 0a 20 20 20 20 0a 20 20 20 20 53 61 6d 70 6c  ..    .    Sampl
15c0: 65 20 75 73 61 67 65 3a 0a 20 20 20 20 0a 20 20  e usage:.    .  
15d0: 20 20 40 63 6f 64 65 0a 20 20 20 20 2f 2f 20 53    @code.    // S
15e0: 65 74 20 75 70 20 63 6f 6d 6d 6f 6e 20 63 6f 6e  et up common con
15f0: 6e 65 63 74 69 6f 6e 2d 6c 65 76 65 6c 20 6f 70  nection-level op
1600: 74 69 6f 6e 73 3a 0a 20 20 20 20 76 61 72 20 63  tions:.    var c
1610: 67 69 20 3d 20 6e 65 77 20 57 68 41 6a 61 6a 2e  gi = new WhAjaj.
1620: 43 6f 6e 6e 65 63 74 6f 72 28 7b 0a 20 20 20 20  Connector({.    
1630: 20 20 20 20 75 72 6c 3a 20 27 2f 63 67 69 2d 62      url: '/cgi-b
1640: 69 6e 2f 6d 79 2e 63 67 69 27 2c 0a 20 20 20 20  in/my.cgi',.    
1650: 20 20 20 20 74 69 6d 65 6f 75 74 3a 31 30 30 30      timeout:1000
1660: 30 2c 0a 20 20 20 20 20 20 20 20 6f 6e 52 65 73  0,.        onRes
1670: 70 6f 6e 73 65 28 72 65 73 70 2c 72 65 71 29 20  ponse(resp,req) 
1680: 7b 20 61 6c 65 72 74 28 4a 53 4f 4e 2e 73 74 72  { alert(JSON.str
1690: 69 6e 67 69 66 79 28 72 65 73 70 2c 30 2e 34 29  ingify(resp,0.4)
16a0: 29 3b 20 7d 2c 0a 20 20 20 20 20 20 20 20 6f 6e  ); },.        on
16b0: 45 72 72 6f 72 28 72 65 71 2c 6f 70 74 29 20 7b  Error(req,opt) {
16c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 6c 65  .            ale
16d0: 72 74 28 6f 70 74 2e 65 72 72 6f 72 4d 65 73 73  rt(opt.errorMess
16e0: 61 67 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  age);.        }.
16f0: 20 20 20 20 7d 29 3b 0a 20 20 20 20 2f 2f 20 41      });.    // A
1700: 6e 79 20 6f 66 20 74 68 6f 73 65 20 6f 70 74 69  ny of those opti
1710: 6f 6e 73 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c  ons may optional
1720: 6c 79 20 62 65 20 73 65 74 20 67 6c 6f 62 61 6c  ly be set global
1730: 6c 79 20 69 6e 0a 20 20 20 20 2f 2f 20 57 68 41  ly in.    // WhA
1740: 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e 6f 70  jaj.Connector.op
1750: 74 69 6f 6e 73 2e 61 6a 61 78 20 28 6f 6e 45 72  tions.ajax (onEr
1760: 72 6f 72 28 29 2c 20 62 65 66 6f 72 65 53 65 6e  ror(), beforeSen
1770: 64 28 29 2c 20 61 6e 64 20 61 66 74 65 72 53 65  d(), and afterSe
1780: 6e 64 28 29 0a 20 20 20 20 2f 2f 20 61 72 65 20  nd().    // are 
1790: 6f 66 74 65 6e 20 65 61 73 69 65 73 74 2f 6d 6f  often easiest/mo
17a0: 73 74 20 75 73 65 66 75 6c 20 74 6f 20 73 65 74  st useful to set
17b0: 20 67 6c 6f 62 61 6c 6c 79 29 2e 0a 0a 20 20 20   globally)...   
17c0: 20 2f 2f 20 47 65 74 20 6c 69 73 74 20 6f 66 20   // Get list of 
17d0: 70 61 67 65 73 2e 2e 2e 0a 20 20 20 20 63 67 69  pages....    cgi
17e0: 2e 73 65 6e 64 52 65 71 75 65 73 74 28 20 6e 75  .sendRequest( nu
17f0: 6c 6c 2c 20 7b 0a 20 20 20 20 20 20 20 20 6f 6e  ll, {.        on
1800: 52 65 73 70 6f 6e 73 65 28 72 65 73 70 2c 72 65  Response(resp,re
1810: 71 29 7b 20 61 6c 65 72 74 28 57 68 41 6a 61 6a  q){ alert(WhAjaj
1820: 2e 73 74 72 69 6e 67 69 66 79 28 72 65 73 70 29  .stringify(resp)
1830: 29 3b 20 7d 0a 20 20 20 20 7d 29 3b 0a 20 20 20  ); }.    });.   
1840: 20 40 65 6e 64 63 6f 64 65 0a 0a 20 20 20 20 46   @endcode..    F
1850: 6f 72 20 63 6f 6d 6d 6f 6e 20 72 65 71 75 65 73  or common reques
1860: 74 20 74 79 70 65 73 2c 20 63 6c 69 65 6e 74 73  t types, clients
1870: 20 63 61 6e 20 61 64 64 20 66 75 6e 63 74 69 6f   can add functio
1880: 6e 73 20 74 6f 20 74 68 69 73 0a 20 20 20 20 6f  ns to this.    o
1890: 62 6a 65 63 74 20 77 68 69 63 68 20 61 63 74 20  bject which act 
18a0: 61 73 20 77 72 61 70 70 65 72 73 20 66 6f 72 20  as wrappers for 
18b0: 62 61 63 6b 65 6e 64 2d 73 70 65 63 69 66 69 63  backend-specific
18c0: 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 2e 20   functionality. 
18d0: 41 73 0a 20 20 20 20 61 20 73 69 6d 70 6c 65 20  As.    a simple 
18e0: 65 78 61 6d 70 6c 65 3a 0a 20 20 20 20 0a 20 20  example:.    .  
18f0: 20 20 40 63 6f 64 65 0a 20 20 20 20 63 67 69 2e    @code.    cgi.
1900: 6c 6f 67 69 6e 20 3d 20 66 75 6e 63 74 69 6f 6e  login = function
1910: 28 6e 61 6d 65 2c 70 77 2c 61 6a 61 6a 4f 70 74  (name,pw,ajajOpt
1920: 29 20 7b 0a 20 20 20 20 20 20 20 20 74 68 69 73  ) {.        this
1930: 2e 73 65 6e 64 52 65 71 75 65 73 74 28 0a 20 20  .sendRequest(.  
1940: 20 20 20 20 20 20 20 20 20 20 7b 63 6f 6d 6d 61            {comma
1950: 6e 64 3a 22 6a 73 6f 6e 2f 6c 6f 67 69 6e 22 2c  nd:"json/login",
1960: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e  .              n
1970: 61 6d 65 3a 6e 61 6d 65 2c 0a 20 20 20 20 20 20  ame:name,.      
1980: 20 20 20 20 20 20 20 20 70 61 73 73 77 6f 72 64          password
1990: 3a 70 77 0a 20 20 20 20 20 20 20 20 20 20 20 20  :pw.            
19a0: 7d 2c 20 61 6a 61 6a 4f 70 74 20 29 3b 0a 20 20  }, ajajOpt );.  
19b0: 20 20 7d 3b 0a 20 20 20 20 40 65 6e 64 63 6f 64    };.    @endcod
19c0: 65 0a 20 20 20 20 0a 20 20 20 20 54 4f 44 4f 73  e.    .    TODOs
19d0: 3a 0a 20 20 20 20 0a 20 20 20 20 2d 20 43 61 63  :.    .    - Cac
19e0: 68 69 6e 67 20 6f 66 20 70 61 67 65 2d 6c 6f 61  hing of page-loa
19f0: 64 20 72 65 71 75 65 73 74 73 2c 20 77 69 74 68  d requests, with
1a00: 20 61 20 63 6f 6e 66 69 67 75 72 61 62 6c 65 20   a configurable 
1a10: 6c 69 66 65 74 69 6d 65 2e 0a 20 20 20 20 0a 20  lifetime..    . 
1a20: 20 20 20 2d 20 55 73 65 2d 63 61 73 65 73 20 6c     - Use-cases l
1a30: 69 6b 65 20 74 68 65 20 61 62 6f 76 65 20 6c 6f  ike the above lo
1a40: 67 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 61  gin() function a
1a50: 72 65 20 61 20 74 69 6e 79 20 62 69 74 0a 20 20  re a tiny bit.  
1a60: 20 20 70 72 6f 62 6c 65 6d 61 74 69 63 20 74 6f    problematic to
1a70: 20 69 6d 70 6c 65 6d 65 6e 74 20 77 68 65 6e 20   implement when 
1a80: 65 61 63 68 20 72 65 71 75 65 73 74 20 68 61 73  each request has
1a90: 20 61 20 64 69 66 66 65 72 65 6e 74 20 55 52 4c   a different URL
1aa0: 0a 20 20 20 20 70 61 74 68 20 28 69 20 6b 6e 6f  .    path (i kno
1ab0: 77 20 74 68 69 73 20 66 72 6f 6d 20 74 68 65 20  w this from the 
1ac0: 77 68 69 6b 69 20 61 6e 64 20 66 6f 73 73 69 6c  whiki and fossil
1ad0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73   implementations
1ae0: 29 2e 0a 20 20 20 20 54 68 69 73 20 69 73 20 70  )..    This is p
1af0: 61 72 74 6c 79 20 61 20 73 69 64 65 2d 65 66 66  artly a side-eff
1b00: 65 63 74 20 6f 66 20 64 65 73 69 67 6e 20 64 65  ect of design de
1b10: 73 63 69 73 69 6f 6e 73 20 6d 61 64 65 20 62 61  scisions made ba
1b20: 63 6b 20 69 6e 0a 20 20 20 20 74 68 65 20 76 65  ck in.    the ve
1b30: 72 79 20 66 69 72 73 74 20 64 61 79 73 20 6f 66  ry first days of
1b40: 20 74 68 69 73 20 63 6f 64 65 27 73 20 6c 69 66   this code's lif
1b50: 65 2e 20 69 20 6e 65 65 64 20 74 6f 20 67 6f 20  e. i need to go 
1b60: 74 68 72 6f 75 67 68 0a 20 20 20 20 61 6e 64 20  through.    and 
1b70: 73 65 65 20 77 68 65 72 65 20 69 20 63 61 6e 20  see where i can 
1b80: 62 65 6e 64 20 74 68 6f 73 65 20 63 6f 6e 76 65  bend those conve
1b90: 6e 74 69 6f 6e 73 20 61 20 62 69 74 20 28 77 68  ntions a bit (wh
1ba0: 65 72 65 20 69 74 20 77 6f 6e 27 74 0a 20 20 20  ere it won't.   
1bb0: 20 62 72 65 61 6b 20 6d 79 20 6f 74 68 65 72 20   break my other 
1bc0: 61 70 70 73 20 75 6e 64 75 6c 79 29 2e 0a 2a 2f  apps unduly)..*/
1bd0: 0a 57 68 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f  .WhAjaj.Connecto
1be0: 72 20 3d 20 66 75 6e 63 74 69 6f 6e 28 6f 70 74  r = function(opt
1bf0: 29 0a 7b 0a 20 20 20 20 69 66 28 57 68 41 6a 61  ).{.    if(WhAja
1c00: 6a 2e 69 73 4f 62 6a 65 63 74 28 6f 70 74 29 29  j.isObject(opt))
1c10: 20 74 68 69 73 2e 6f 70 74 69 6f 6e 73 20 3d 20   this.options = 
1c20: 6f 70 74 3b 0a 20 20 20 20 2f 2f 54 4f 44 4f 3f  opt;.    //TODO?
1c30: 3a 20 74 68 69 73 2e 24 63 61 63 68 65 20 3d 20  : this.$cache = 
1c40: 7b 7d 3b 0a 7d 3b 0a 0a 2f 2a 2a 0a 20 20 20 20  {};.};../**.    
1c50: 54 68 65 20 63 6f 72 65 20 6f 70 74 69 6f 6e 73  The core options
1c60: 20 75 73 65 64 20 62 79 20 57 68 41 6a 61 6a 2e   used by WhAjaj.
1c70: 43 6f 6e 6e 65 63 74 6f 72 20 69 6e 73 74 61 6e  Connector instan
1c80: 63 65 73 20 66 6f 72 20 70 65 72 66 6f 72 6d 69  ces for performi
1c90: 6e 67 0a 20 20 20 20 6e 65 74 77 6f 72 6b 20 6f  ng.    network o
1ca0: 70 65 72 61 74 69 6f 6e 73 2e 20 54 68 65 73 65  perations. These
1cb0: 20 6f 70 74 69 6f 6e 73 20 63 61 6e 20 28 61 6e   options can (an
1cc0: 64 20 73 6f 6d 65 20 5f 73 68 6f 75 6c 64 5f 29  d some _should_)
1cd0: 0a 20 20 20 20 62 65 20 63 68 61 6e 67 65 64 20  .    be changed 
1ce0: 62 79 20 61 20 63 6c 69 65 6e 74 20 61 70 70 6c  by a client appl
1cf0: 69 63 61 74 69 6f 6e 2e 20 54 68 65 79 20 63 61  ication. They ca
1d00: 6e 20 61 6c 73 6f 20 62 65 20 63 68 61 6e 67 65  n also be change
1d10: 64 0a 20 20 20 20 6f 6e 20 73 70 65 63 69 66 69  d.    on specifi
1d20: 63 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 57  c instances of W
1d30: 68 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2c  hAjaj.Connector,
1d40: 20 62 75 74 20 66 6f 72 20 6d 6f 73 74 20 61 70   but for most ap
1d50: 70 6c 69 63 61 74 69 6f 6e 73 0a 20 20 20 20 69  plications.    i
1d60: 74 20 69 73 20 73 69 6d 70 6c 65 72 20 74 6f 20  t is simpler to 
1d70: 73 65 74 20 74 68 65 6d 20 68 65 72 65 20 61 6e  set them here an
1d80: 64 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 62 6f  d not have to bo
1d90: 74 68 65 72 20 77 69 74 68 20 63 6f 6e 66 69 67  ther with config
1da0: 75 72 69 6e 67 0a 20 20 20 20 65 61 63 68 20 57  uring.    each W
1db0: 68 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72 20  hAjaj.Connector 
1dc0: 69 6e 73 74 61 6e 63 65 2e 20 41 70 70 73 20 77  instance. Apps w
1dd0: 68 69 63 68 20 75 73 65 20 6d 75 6c 74 69 70 6c  hich use multipl
1de0: 65 20 62 61 63 6b 2d 65 6e 64 73 20 61 74 20 6f  e back-ends at o
1df0: 6e 65 20 74 69 6d 65 2c 0a 20 20 20 20 68 6f 77  ne time,.    how
1e00: 65 76 65 72 2c 20 77 69 6c 6c 20 6e 65 65 64 20  ever, will need 
1e10: 74 6f 20 63 75 73 74 6f 6d 69 7a 65 20 65 61 63  to customize eac
1e20: 68 20 69 6e 73 74 61 6e 63 65 20 66 6f 72 20 61  h instance for a
1e30: 20 67 69 76 65 6e 20 62 61 63 6b 2d 65 6e 64 2e   given back-end.
1e40: 0a 2a 2f 0a 57 68 41 6a 61 6a 2e 43 6f 6e 6e 65  .*/.WhAjaj.Conne
1e50: 63 74 6f 72 2e 6f 70 74 69 6f 6e 73 20 3d 20 7b  ctor.options = {
1e60: 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 20 20  .    /**.       
1e70: 20 41 20 28 6d 65 61 6e 69 6e 67 6c 65 73 73 29   A (meaningless)
1e80: 20 70 72 65 66 69 78 20 74 6f 20 61 70 70 6c 79   prefix to apply
1e90: 20 74 6f 20 57 68 41 6a 61 6a 2e 43 6f 6e 6e 65   to WhAjaj.Conne
1ea0: 63 74 6f 72 2d 67 65 6e 65 72 61 74 65 64 0a 20  ctor-generated. 
1eb0: 20 20 20 20 20 20 20 72 65 71 75 65 73 74 20 49         request I
1ec0: 44 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 72  Ds..    */.    r
1ed0: 65 71 75 65 73 74 49 64 50 72 65 66 69 78 3a 27  equestIdPrefix:'
1ee0: 57 68 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72  WhAjaj.Connector
1ef0: 2d 27 2c 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20  -',.    /**.    
1f00: 20 20 20 20 44 65 66 61 75 6c 74 20 6f 70 74 69      Default opti
1f10: 6f 6e 73 20 66 6f 72 20 57 68 41 6a 61 6a 2e 43  ons for WhAjaj.C
1f20: 6f 6e 6e 65 63 74 6f 72 2e 73 65 6e 64 52 65 71  onnector.sendReq
1f30: 75 65 73 74 28 29 20 63 6f 6e 6e 65 63 74 69 6f  uest() connectio
1f40: 6e 20 0a 20 20 20 20 20 20 20 20 70 61 72 61 6d  n .        param
1f50: 65 74 65 72 73 2e 20 54 68 69 73 20 6f 62 6a 65  eters. This obje
1f60: 63 74 20 68 6f 6c 64 73 20 6f 6e 6c 79 20 63 6f  ct holds only co
1f70: 6e 6e 65 63 74 69 6f 6e 2d 72 65 6c 61 74 65 64  nnection-related
1f80: 20 0a 20 20 20 20 20 20 20 20 6f 70 74 69 6f 6e   .        option
1f90: 73 20 61 6e 64 20 63 61 6c 6c 62 61 63 6b 73 20  s and callbacks 
1fa0: 28 61 6c 6c 20 6f 70 74 69 6f 6e 61 6c 29 2c 20  (all optional), 
1fb0: 61 6e 64 20 6e 6f 74 20 6f 70 74 69 6f 6e 73 20  and not options 
1fc0: 0a 20 20 20 20 20 20 20 20 72 65 6c 61 74 65 64  .        related
1fd0: 20 74 6f 20 74 68 65 20 72 65 71 75 69 72 65 64   to the required
1fe0: 20 4a 53 4f 4e 20 73 74 72 75 63 74 75 72 65 20   JSON structure 
1ff0: 6f 66 20 61 6e 79 20 67 69 76 65 6e 20 72 65 71  of any given req
2000: 75 65 73 74 2e 20 0a 20 20 20 20 20 20 20 20 69  uest. .        i
2010: 2e 65 2e 20 74 68 65 20 70 61 67 65 20 6e 61 6d  .e. the page nam
2020: 65 20 75 73 65 64 20 69 6e 20 61 20 67 65 74 2d  e used in a get-
2030: 70 61 67 65 20 72 65 71 75 65 73 74 20 61 72 65  page request are
2040: 20 6e 6f 74 20 73 65 74 20 0a 20 20 20 20 20 20   not set .      
2050: 20 20 68 65 72 65 20 62 75 74 20 61 72 65 20 73    here but are s
2060: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
2070: 20 6f 66 20 74 68 65 20 72 65 71 75 65 73 74 20   of the request 
2080: 6f 62 6a 65 63 74 2e 0a 0a 20 20 20 20 20 20 20  object...       
2090: 20 54 68 65 73 65 20 63 6f 6e 6e 65 63 74 69 6f   These connectio
20a0: 6e 20 6f 70 74 69 6f 6e 73 20 61 72 65 20 61 20  n options are a 
20b0: 22 6e 6f 72 6d 61 6c 69 7a 65 64 20 66 6f 72 6d  "normalized form
20c0: 22 20 6f 66 20 6f 70 74 69 6f 6e 73 20 0a 20 20  " of options .  
20d0: 20 20 20 20 20 20 6f 66 74 65 6e 20 66 6f 75 6e        often foun
20e0: 64 20 69 6e 20 76 61 72 69 6f 75 73 20 41 4a 41  d in various AJA
20f0: 58 20 6c 69 62 72 61 72 69 65 73 20 6c 69 6b 65  X libraries like
2100: 20 6a 51 75 65 72 79 2c 20 0a 20 20 20 20 20 20   jQuery, .      
2110: 20 20 50 72 6f 74 6f 74 79 70 65 2c 20 64 6f 6a    Prototype, doj
2120: 6f 2c 20 65 74 63 2e 20 54 68 69 73 20 61 70 70  o, etc. This app
2130: 72 6f 61 63 68 20 61 6c 6c 6f 77 73 20 75 73 20  roach allows us 
2140: 74 6f 20 73 77 61 70 20 6f 75 74 20 0a 20 20 20  to swap out .   
2150: 20 20 20 20 20 74 68 65 20 72 65 61 6c 20 63 6f       the real co
2160: 6e 6e 65 63 74 69 6f 6e 2d 72 65 6c 61 74 65 64  nnection-related
2170: 20 70 61 72 74 73 20 62 79 20 77 72 69 74 69 6e   parts by writin
2180: 67 20 61 20 73 69 6d 70 6c 65 20 70 72 6f 78 79  g a simple proxy
2190: 20 0a 20 20 20 20 20 20 20 20 77 68 69 63 68 20   .        which 
21a0: 74 72 61 6e 73 66 6f 72 6d 73 20 6f 75 72 20 22  transforms our "
21b0: 6e 6f 72 6d 61 6c 69 7a 65 64 22 20 66 6f 72 6d  normalized" form
21c0: 20 74 6f 20 74 68 65 20 0a 20 20 20 20 20 20 20   to the .       
21d0: 20 62 61 63 6b 65 6e 64 2d 73 70 65 63 69 66 69   backend-specifi
21e0: 63 20 66 6f 72 6d 2e 20 46 6f 72 20 65 78 61 6d  c form. For exam
21f0: 70 6c 65 73 2c 20 73 65 65 20 74 68 65 20 76 61  ples, see the va
2200: 72 69 6f 75 73 20 0a 20 20 20 20 20 20 20 20 69  rious .        i
2210: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 73  mplementations s
2220: 74 6f 72 65 64 20 69 6e 20 57 68 41 6a 61 6a 2e  tored in WhAjaj.
2230: 43 6f 6e 6e 65 63 74 6f 72 2e 73 65 6e 64 49 6d  Connector.sendIm
2240: 70 6c 73 2e 0a 0a 20 20 20 20 20 20 20 20 54 68  pls...        Th
2250: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c  e following call
2260: 62 61 63 6b 20 6f 70 74 69 6f 6e 73 20 61 72 65  back options are
2270: 2c 20 69 6e 20 70 72 61 63 74 69 63 65 2c 20 61  , in practice, a
2280: 6c 6d 6f 73 74 20 0a 20 20 20 20 20 20 20 20 61  lmost .        a
2290: 6c 77 61 79 73 20 73 65 74 20 67 6c 6f 62 61 6c  lways set global
22a0: 6c 79 20 74 6f 20 73 6f 6d 65 20 61 70 70 2d 77  ly to some app-w
22b0: 69 64 65 20 64 65 66 61 75 6c 74 73 3a 0a 0a 20  ide defaults:.. 
22c0: 20 20 20 20 20 20 20 2d 20 6f 6e 45 72 72 6f 72         - onError
22d0: 28 29 20 74 6f 20 72 65 70 6f 72 74 20 65 72 72  () to report err
22e0: 6f 72 73 20 75 73 69 6e 67 20 61 20 63 6f 6d 6d  ors using a comm
22f0: 6f 6e 20 6d 65 63 68 61 6e 69 73 6d 2e 0a 20 20  on mechanism..  
2300: 20 20 20 20 20 20 2d 20 62 65 66 6f 72 65 53 65        - beforeSe
2310: 6e 64 28 29 20 74 6f 20 73 74 61 72 74 20 61 20  nd() to start a 
2320: 76 69 73 75 61 6c 20 61 63 74 69 76 69 74 79 20  visual activity 
2330: 6e 6f 74 69 66 69 63 61 74 69 6f 6e 0a 20 20 20  notification.   
2340: 20 20 20 20 20 2d 20 61 66 74 65 72 53 65 6e 64       - afterSend
2350: 28 29 20 74 6f 20 64 69 73 61 62 6c 65 20 74 68  () to disable th
2360: 65 20 76 69 73 75 61 6c 20 61 63 74 69 76 69 74  e visual activit
2370: 79 20 6e 6f 74 69 66 69 63 61 74 69 6f 6e 0a 0a  y notification..
2380: 20 20 20 20 20 20 20 20 48 6f 77 65 76 65 72 2c          However,
2390: 20 62 65 20 61 77 61 72 65 20 74 68 61 74 20 69   be aware that i
23a0: 66 20 61 6e 79 20 67 69 76 65 6e 20 57 68 41 6a  f any given WhAj
23b0: 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72 20 69 6e 73  aj.Connector ins
23c0: 74 61 6e 63 65 20 69 73 20 0a 20 20 20 20 20 20  tance is .      
23d0: 20 20 67 69 76 65 6e 20 69 74 73 20 6f 77 6e 20    given its own 
23e0: 62 65 66 6f 72 65 2f 61 66 74 65 72 53 65 6e 64  before/afterSend
23f0: 20 63 61 6c 6c 62 61 63 6b 20 74 68 65 6e 20 74   callback then t
2400: 68 6f 73 65 20 77 69 6c 6c 20 0a 20 20 20 20 20  hose will .     
2410: 20 20 20 6f 76 65 72 72 69 64 65 20 74 68 65 73     override thes
2420: 65 2e 20 4d 69 78 69 6e 67 20 73 68 61 72 65 64  e. Mixing shared
2430: 2f 67 6c 6f 62 61 6c 20 61 6e 64 20 70 65 72 2d  /global and per-
2440: 69 6e 73 74 61 6e 63 65 0a 20 20 20 20 20 20 20  instance.       
2450: 20 63 61 6c 6c 62 61 63 6b 73 20 63 61 6e 20 70   callbacks can p
2460: 6f 74 65 6e 74 69 61 6c 6c 79 20 6c 65 61 64 20  otentially lead 
2470: 74 6f 20 63 6f 6e 66 75 73 69 6e 67 20 72 65 73  to confusing res
2480: 75 6c 74 73 20 69 66 2c 20 65 2e 67 2e 2c 0a 20  ults if, e.g.,. 
2490: 20 20 20 20 20 20 20 74 68 65 20 62 65 66 6f 72         the befor
24a0: 65 53 65 6e 64 28 29 20 61 6e 64 20 61 66 74 65  eSend() and afte
24b0: 72 53 65 6e 64 28 29 20 66 75 6e 63 74 69 6f 6e  rSend() function
24c0: 73 20 68 61 76 65 20 73 69 64 65 2d 65 66 66 65  s have side-effe
24d0: 63 74 73 0a 20 20 20 20 20 20 20 20 62 75 74 20  cts.        but 
24e0: 61 72 65 20 6e 6f 74 20 75 73 65 64 20 77 69 74  are not used wit
24f0: 68 20 74 68 65 69 72 20 70 72 6f 70 65 72 20 62  h their proper b
2500: 65 66 6f 72 65 2f 61 66 74 65 72 20 70 61 72 74  efore/after part
2510: 6e 65 72 2e 0a 20 20 20 20 20 20 20 20 0a 20 20  ner..        .  
2520: 20 20 20 20 20 20 54 4f 44 4f 3a 20 72 65 6e 61        TODO: rena
2530: 6d 65 20 74 68 69 73 20 74 6f 20 27 61 6a 61 6a  me this to 'ajaj
2540: 27 20 28 74 68 65 20 6e 61 6d 65 20 69 73 20 68  ' (the name is h
2550: 69 73 74 6f 72 69 63 61 6c 29 2e 20 54 68 65 20  istorical). The 
2560: 0a 20 20 20 20 20 20 20 20 70 72 6f 62 6c 65 6d  .        problem
2570: 20 77 69 74 68 20 72 65 6e 61 6d 69 6e 67 20 69   with renaming i
2580: 74 20 69 73 20 69 73 20 74 68 61 74 20 74 68 65  t is is that the
2590: 20 77 6f 72 64 20 27 61 6a 61 78 27 20 69 73 20   word 'ajax' is 
25a0: 0a 20 20 20 20 20 20 20 20 70 72 65 74 74 79 20  .        pretty 
25b0: 70 72 65 76 65 6c 61 6e 74 20 69 6e 20 74 68 65  prevelant in the
25c0: 20 73 6f 75 72 63 65 20 74 72 65 65 2c 20 73 6f   source tree, so
25d0: 20 69 20 63 61 6e 27 74 20 67 6c 6f 62 61 6c 6c   i can't globall
25e0: 79 20 0a 20 20 20 20 20 20 20 20 73 77 61 70 20  y .        swap 
25f0: 69 74 20 6f 75 74 2e 0a 20 20 20 20 2a 2f 0a 20  it out..    */. 
2600: 20 20 20 61 6a 61 78 3a 20 7b 0a 20 20 20 20 20     ajax: {.     
2610: 20 20 20 2f 2a 2a 0a 20 20 20 20 20 20 20 20 20     /**.         
2620: 20 20 20 55 52 4c 20 6f 66 20 74 68 65 20 62 61     URL of the ba
2630: 63 6b 2d 65 6e 64 20 73 65 72 76 65 72 2f 43 47  ck-end server/CG
2640: 49 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  I..        */.  
2650: 20 20 20 20 20 20 75 72 6c 3a 20 27 2f 73 6f 6d        url: '/som
2660: 65 2f 70 61 74 68 27 2c 0a 0a 20 20 20 20 20 20  e/path',..      
2670: 20 20 2f 2a 2a 0a 20 20 20 20 20 20 20 20 20 20    /**.          
2680: 20 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 65 74    Connection met
2690: 68 6f 64 2e 20 53 6f 6d 65 20 63 6f 6e 6e 65 63  hod. Some connec
26a0: 74 69 6f 6e 2d 72 65 6c 61 74 65 64 20 66 75 6e  tion-related fun
26b0: 63 74 69 6f 6e 73 20 6d 69 67 68 74 0a 20 20 20  ctions might.   
26c0: 20 20 20 20 20 20 20 20 20 6f 76 65 72 72 69 64           overrid
26d0: 65 20 61 6e 79 20 63 6c 69 65 6e 74 2d 64 65 66  e any client-def
26e0: 69 6e 65 64 20 73 65 74 74 69 6e 67 2e 0a 20 20  ined setting..  
26f0: 20 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 20            .     
2700: 20 20 20 20 20 20 20 4d 75 73 74 20 62 65 20 6f         Must be o
2710: 6e 65 20 6f 66 20 27 47 45 54 27 20 6f 72 20 27  ne of 'GET' or '
2720: 50 4f 53 54 27 2e 20 46 6f 72 20 63 75 73 74 6f  POST'. For custo
2730: 6d 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 0a 20 20  m connection .  
2740: 20 20 20 20 20 20 20 20 20 20 69 6d 70 6c 65 6d            implem
2750: 65 6e 74 61 74 69 6f 6e 2c 20 69 74 20 6d 61 79  entation, it may
2760: 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 62 65 20 73   optionally be s
2770: 6f 6d 65 20 0a 20 20 20 20 20 20 20 20 20 20 20  ome .           
2780: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2d   implementation-
2790: 73 70 65 63 69 66 69 65 64 20 76 61 6c 75 65 2e  specified value.
27a0: 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 4e 6f  ..            No
27b0: 72 6d 61 6c 6c 79 20 74 68 65 20 41 50 49 20 63  rmally the API c
27c0: 61 6e 20 64 65 72 69 76 65 20 74 68 69 73 20 76  an derive this v
27d0: 61 6c 75 65 20 61 75 74 6f 6d 61 74 69 63 61 6c  alue automatical
27e0: 6c 79 20 2d 20 69 66 20 74 68 65 0a 20 20 20 20  ly - if the.    
27f0: 20 20 20 20 20 20 20 20 72 65 71 75 65 73 74 20          request 
2800: 75 73 65 73 20 4a 53 4f 4e 20 64 61 74 61 20 69  uses JSON data i
2810: 74 20 69 73 20 50 4f 53 54 65 64 2c 20 65 6c 73  t is POSTed, els
2820: 65 20 69 74 20 69 73 20 47 45 54 74 65 64 2e 0a  e it is GETted..
2830: 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
2840: 20 20 20 6d 65 74 68 6f 64 3a 27 47 45 54 27 2c     method:'GET',
2850: 0a 0a 20 20 20 20 20 20 20 20 2f 2a 2a 0a 20 20  ..        /**.  
2860: 20 20 20 20 20 20 20 20 20 20 41 20 68 69 6e 74            A hint
2870: 20 77 68 65 74 68 65 72 20 74 6f 20 72 75 6e 20   whether to run 
2880: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 73  the operation as
2890: 79 6e 63 68 72 6f 6e 6f 75 73 6c 79 20 6f 72 20  ynchronously or 
28a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 74  .            not
28b0: 2e 20 4e 6f 74 20 61 6c 6c 20 63 6f 6e 63 72 65  . Not all concre
28c0: 74 65 20 57 68 41 6a 61 6a 2e 43 6f 6e 6e 65 63  te WhAjaj.Connec
28d0: 74 6f 72 2e 73 65 6e 64 49 6d 70 6c 28 29 20 0a  tor.sendImpl() .
28e0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70 6c              impl
28f0: 65 6d 65 6e 74 61 74 69 6f 6e 73 20 63 61 6e 20  ementations can 
2900: 73 75 70 70 6f 72 74 20 74 68 69 73 2e 20 49 6e  support this. In
2910: 74 65 72 65 73 74 69 6e 67 6c 79 2c 20 61 74 20  terestingly, at 
2920: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 61  .            lea
2930: 73 74 20 6f 6e 65 20 70 6f 70 75 6c 61 72 20 41  st one popular A
2940: 4a 41 58 20 74 6f 6f 6c 6b 69 74 20 64 6f 65 73  JAX toolkit does
2950: 20 6e 6f 74 20 64 6f 63 75 6d 65 6e 74 20 0a 20   not document . 
2960: 20 20 20 20 20 20 20 20 20 20 20 73 75 70 70 6f             suppo
2970: 72 74 69 6e 67 20 5f 73 79 6e 63 68 72 6f 6e 6f  rting _synchrono
2980: 75 73 5f 20 41 4a 41 58 20 6f 70 65 72 61 74 69  us_ AJAX operati
2990: 6f 6e 73 2e 20 41 6c 6c 20 63 6f 6d 6d 6f 6e 20  ons. All common 
29a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72 6f  .            bro
29b0: 77 73 65 72 2d 73 69 64 65 20 69 6d 70 6c 65 6d  wser-side implem
29c0: 65 6e 74 61 74 69 6f 6e 73 20 73 75 70 70 6f 72  entations suppor
29d0: 74 20 61 73 79 6e 63 20 6f 70 65 72 61 74 69 6f  t async operatio
29e0: 6e 2c 20 62 75 74 20 0a 20 20 20 20 20 20 20 20  n, but .        
29f0: 20 20 20 20 6e 6f 6e 2d 62 72 6f 77 73 65 72 20      non-browser 
2a00: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20  implementations 
2a10: 6d 69 67 68 74 20 6e 6f 74 2e 0a 20 20 20 20 20  might not..     
2a20: 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73     */.        as
2a30: 79 6e 63 68 72 6f 6e 6f 75 73 3a 74 72 75 65 2c  ynchronous:true,
2a40: 0a 0a 20 20 20 20 20 20 20 20 2f 2a 2a 0a 20 20  ..        /**.  
2a50: 20 20 20 20 20 20 20 20 20 20 41 20 48 54 54 50            A HTTP
2a60: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   authentication 
2a70: 6c 6f 67 69 6e 20 6e 61 6d 65 20 66 6f 72 20 74  login name for t
2a80: 68 65 20 41 4a 41 58 20 0a 20 20 20 20 20 20 20  he AJAX .       
2a90: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e       connection.
2aa0: 20 4e 6f 74 20 61 6c 6c 20 63 6f 6e 63 72 65 74   Not all concret
2ab0: 65 20 57 68 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74  e WhAjaj.Connect
2ac0: 6f 72 2e 73 65 6e 64 49 6d 70 6c 28 29 20 0a 20  or.sendImpl() . 
2ad0: 20 20 20 20 20 20 20 20 20 20 20 69 6d 70 6c 65             imple
2ae0: 6d 65 6e 74 61 74 69 6f 6e 73 20 63 61 6e 20 73  mentations can s
2af0: 75 70 70 6f 72 74 20 74 68 69 73 2e 0a 20 20 20  upport this..   
2b00: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20       */.        
2b10: 6c 6f 67 69 6e 4e 61 6d 65 3a 75 6e 64 65 66 69  loginName:undefi
2b20: 6e 65 64 2c 0a 0a 20 20 20 20 20 20 20 20 2f 2a  ned,..        /*
2b30: 2a 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e  *.            An
2b40: 20 48 54 54 50 20 61 75 74 68 65 6e 74 69 63 61   HTTP authentica
2b50: 74 69 6f 6e 20 6c 6f 67 69 6e 20 70 61 73 73 77  tion login passw
2b60: 6f 72 64 20 66 6f 72 20 74 68 65 20 41 4a 41 4a  ord for the AJAJ
2b70: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f   .            co
2b80: 6e 6e 65 63 74 69 6f 6e 2e 20 4e 6f 74 20 61 6c  nnection. Not al
2b90: 6c 20 63 6f 6e 63 72 65 74 65 20 57 68 41 6a 61  l concrete WhAja
2ba0: 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e 73 65 6e 64  j.Connector.send
2bb0: 49 6d 70 6c 28 29 20 0a 20 20 20 20 20 20 20 20  Impl() .        
2bc0: 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69      implementati
2bd0: 6f 6e 73 20 63 61 6e 20 73 75 70 70 6f 72 74 20  ons can support 
2be0: 74 68 69 73 2e 0a 20 20 20 20 20 20 20 20 2a 2f  this..        */
2bf0: 0a 20 20 20 20 20 20 20 20 6c 6f 67 69 6e 50 61  .        loginPa
2c00: 73 73 77 6f 72 64 3a 75 6e 64 65 66 69 6e 65 64  ssword:undefined
2c10: 2c 0a 0a 20 20 20 20 20 20 20 20 2f 2a 2a 0a 20  ,..        /**. 
2c20: 20 20 20 20 20 20 20 20 20 20 20 41 20 63 6f 6e             A con
2c30: 6e 65 63 74 69 6f 6e 20 74 69 6d 65 6f 75 74 2c  nection timeout,
2c40: 20 69 6e 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73   in milliseconds
2c50: 2c 20 66 6f 72 20 65 73 74 61 62 6c 69 73 68 69  , for establishi
2c60: 6e 67 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  ng .            
2c70: 61 6e 20 41 4a 41 4a 20 63 6f 6e 6e 65 63 74 69  an AJAJ connecti
2c80: 6f 6e 2e 20 4e 6f 74 20 61 6c 6c 20 63 6f 6e 63  on. Not all conc
2c90: 72 65 74 65 20 0a 20 20 20 20 20 20 20 20 20 20  rete .          
2ca0: 20 20 57 68 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74    WhAjaj.Connect
2cb0: 6f 72 2e 73 65 6e 64 49 6d 70 6c 28 29 20 69 6d  or.sendImpl() im
2cc0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 63 61  plementations ca
2cd0: 6e 20 73 75 70 70 6f 72 74 20 74 68 69 73 2e 0a  n support this..
2ce0: 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
2cf0: 20 20 20 74 69 6d 65 6f 75 74 3a 31 30 30 30 30     timeout:10000
2d00: 2c 0a 0a 20 20 20 20 20 20 20 20 2f 2a 2a 0a 20  ,..        /**. 
2d10: 20 20 20 20 20 20 20 20 20 20 20 49 66 20 61 6e             If an
2d20: 20 41 4a 41 4a 20 72 65 71 75 65 73 74 20 72 65   AJAJ request re
2d30: 63 65 69 76 65 73 20 4a 53 4f 4e 20 64 61 74 61  ceives JSON data
2d40: 20 66 72 6f 6d 20 74 68 65 20 62 61 63 6b 2d 65   from the back-e
2d50: 6e 64 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  nd,.            
2d60: 74 68 61 74 20 64 61 74 61 20 69 73 20 70 61 73  that data is pas
2d70: 73 65 64 20 61 73 20 61 20 70 6c 61 69 6e 20 4f  sed as a plain O
2d80: 62 6a 65 63 74 20 61 73 20 74 68 65 20 72 65 73  bject as the res
2d90: 70 6f 6e 73 65 0a 20 20 20 20 20 20 20 20 20 20  ponse.          
2da0: 20 20 70 61 72 61 6d 65 74 65 72 20 28 65 78 63    parameter (exc
2db0: 65 70 74 69 6f 6e 3a 20 69 6e 20 6a 73 6f 6e 70  eption: in jsonp
2dc0: 20 6d 6f 64 65 20 69 74 20 69 73 20 70 61 73 73   mode it is pass
2dd0: 65 64 20 61 0a 20 20 20 20 20 20 20 20 20 20 20  ed a.           
2de0: 20 73 74 72 69 6e 67 20 28 77 68 79 3f 3f 3f 29   string (why???)
2df0: 29 2e 20 54 68 65 20 69 6e 69 74 69 61 74 69 6e  ). The initiatin
2e00: 67 20 72 65 71 75 65 73 74 20 6f 62 6a 65 63 74  g request object
2e10: 20 69 73 0a 20 20 20 20 20 20 20 20 20 20 20 20   is.            
2e20: 70 61 73 73 65 64 20 61 73 20 74 68 65 20 73 65  passed as the se
2e30: 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 2c 20  cond parameter, 
2e40: 62 75 74 20 63 6c 69 65 6e 74 73 20 63 61 6e 20  but clients can 
2e50: 6e 6f 72 6d 61 6c 6c 79 0a 20 20 20 20 20 20 20  normally.       
2e60: 20 20 20 20 20 69 67 6e 6f 72 65 20 69 74 20 28       ignore it (
2e70: 6f 6e 6c 79 20 74 68 6f 73 65 20 77 68 69 63 68  only those which
2e80: 20 6e 65 65 64 20 61 20 77 61 79 20 74 6f 20 6d   need a way to m
2e90: 61 70 20 73 70 65 63 69 66 69 63 0a 20 20 20 20  ap specific.    
2ea0: 20 20 20 20 20 20 20 20 72 65 71 75 65 73 74 73          requests
2eb0: 20 74 6f 20 72 65 73 70 6f 6e 73 65 73 20 77 69   to responses wi
2ec0: 6c 6c 20 6e 65 65 64 20 69 74 29 2e 20 54 68 65  ll need it). The
2ed0: 20 33 72 64 20 70 61 72 61 6d 65 74 65 72 0a 20   3rd parameter. 
2ee0: 20 20 20 20 20 20 20 20 20 20 20 69 73 20 74 68             is th
2ef0: 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 27 74  e same as the 't
2f00: 68 69 73 27 20 6f 62 6a 65 63 74 20 66 6f 72 20  his' object for 
2f10: 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 74  the context of t
2f20: 68 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  he.            c
2f30: 61 6c 6c 62 61 63 6b 2c 20 62 75 74 20 69 73 20  allback, but is 
2f40: 70 72 6f 76 69 64 65 64 20 62 65 63 61 75 73 65  provided because
2f50: 20 74 68 65 20 69 6e 73 74 61 6e 63 65 2d 6c 65   the instance-le
2f60: 76 65 6c 0a 20 20 20 20 20 20 20 20 20 20 20 20  vel.            
2f70: 63 61 6c 6c 62 61 63 6b 73 20 28 73 65 74 20 69  callbacks (set i
2f80: 6e 20 28 57 68 41 6a 61 6a 2e 43 6f 6e 6e 65 63  n (WhAjaj.Connec
2f90: 74 6f 72 20 69 6e 73 74 61 6e 63 65 29 2e 63 61  tor instance).ca
2fa0: 6c 6c 62 61 63 6b 73 2c 0a 20 20 20 20 20 20 20  llbacks,.       
2fb0: 20 20 20 20 20 72 65 71 75 69 72 65 20 69 74 20       require it 
2fc0: 69 6e 20 73 6f 6d 65 20 63 61 73 65 73 20 28 62  in some cases (b
2fd0: 65 63 61 75 73 65 20 74 68 65 69 72 20 27 74 68  ecause their 'th
2fe0: 69 73 27 20 69 73 0a 20 20 20 20 20 20 20 20 20  is' is.         
2ff0: 20 20 20 64 69 66 66 65 72 65 6e 74 21 29 2e 0a     different!)..
3000: 20 20 20 20 20 20 20 20 20 20 20 20 0a 20 20 20              .   
3010: 20 20 20 20 20 20 20 20 20 4e 6f 74 65 20 74 68           Note th
3020: 61 74 20 74 68 65 20 72 65 73 70 6f 6e 73 65 20  at the response 
3030: 6d 69 67 68 74 20 63 6f 6e 74 61 69 6e 20 65 72  might contain er
3040: 72 6f 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ror information.
3050: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 63              whic
3060: 68 20 63 6f 6d 65 73 20 66 72 6f 6d 20 74 68 65  h comes from the
3070: 20 62 61 63 6b 2d 65 6e 64 2e 20 54 68 65 20 64   back-end. The d
3080: 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
3090: 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  n.            th
30a0: 69 73 20 65 72 72 6f 72 20 69 6e 66 6f 20 61 6e  is error info an
30b0: 64 20 74 68 65 20 69 6e 66 6f 20 70 61 73 73 65  d the info passe
30c0: 64 20 74 6f 20 74 68 65 20 6f 6e 45 72 72 6f 72  d to the onError
30d0: 28 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  ().            c
30e0: 61 6c 6c 62 61 63 6b 20 69 73 20 74 68 61 74 20  allback is that 
30f0: 74 68 69 73 20 64 61 74 61 20 69 6e 64 69 63 61  this data indica
3100: 74 65 73 20 61 6e 0a 20 20 20 20 20 20 20 20 20  tes an.         
3110: 20 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 6c     application-l
3120: 65 76 65 6c 20 65 72 72 6f 72 2c 20 77 68 65 72  evel error, wher
3130: 65 61 73 20 6f 6e 45 72 72 6f 72 28 29 20 69 73  eas onError() is
3140: 20 75 73 65 64 20 74 6f 0a 20 20 20 20 20 20 20   used to.       
3150: 20 20 20 20 20 72 65 70 6f 72 74 20 63 6f 6e 6e       report conn
3160: 65 63 74 69 6f 6e 2d 6c 65 76 65 6c 20 70 72 6f  ection-level pro
3170: 62 6c 65 6d 73 20 6f 72 20 77 68 65 6e 20 74 68  blems or when th
3180: 65 20 62 61 63 6b 65 6e 64 0a 20 20 20 20 20 20  e backend.      
3190: 20 20 20 20 20 20 70 72 6f 64 75 63 65 73 20 6e        produces n
31a0: 6f 6e 2d 4a 53 4f 4e 20 64 61 74 61 20 28 77 68  on-JSON data (wh
31b0: 69 63 68 2c 20 77 68 65 6e 20 6e 6f 74 20 69 6e  ich, when not in
31c0: 20 6a 73 6f 6e 70 20 6d 6f 64 65 2c 0a 20 20 20   jsonp mode,.   
31d0: 20 20 20 20 20 20 20 20 20 69 73 20 75 6e 65 78           is unex
31e0: 70 65 63 74 65 64 20 61 6e 64 20 69 73 20 61 73  pected and is as
31f0: 20 66 61 74 61 6c 20 74 6f 20 74 68 65 20 72 65   fatal to the re
3200: 71 75 65 73 74 20 61 73 20 61 0a 20 20 20 20 20  quest as a.     
3210: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
3220: 6e 20 65 72 72 6f 72 29 2e 0a 20 20 20 20 20 20  n error)..      
3230: 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 6f 6e 52    */.        onR
3240: 65 73 70 6f 6e 73 65 3a 20 66 75 6e 63 74 69 6f  esponse: functio
3250: 6e 28 72 65 73 70 6f 6e 73 65 2c 20 72 65 71 75  n(response, requ
3260: 65 73 74 2c 20 6f 70 74 29 7b 7d 2c 0a 0a 20 20  est, opt){},..  
3270: 20 20 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 20        /**.      
3280: 20 20 20 20 20 20 49 66 20 61 6e 20 41 4a 41 58        If an AJAX
3290: 20 72 65 71 75 65 73 74 20 66 61 69 6c 73 20 74   request fails t
32a0: 6f 20 65 73 74 61 62 6c 69 73 68 20 61 20 63 6f  o establish a co
32b0: 6e 6e 65 63 74 69 6f 6e 20 6f 72 20 69 74 20 0a  nnection or it .
32c0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 63 65              rece
32d0: 69 76 65 73 20 6e 6f 6e 2d 4a 53 4f 4e 20 64 61  ives non-JSON da
32e0: 74 61 20 66 72 6f 6d 20 74 68 65 20 62 61 63 6b  ta from the back
32f0: 2d 65 6e 64 2c 20 74 68 69 73 20 66 75 6e 63 74  -end, this funct
3300: 69 6f 6e 20 0a 20 20 20 20 20 20 20 20 20 20 20  ion .           
3310: 20 69 73 20 63 61 6c 6c 65 64 20 28 65 2e 67 2e   is called (e.g.
3320: 20 74 69 6d 65 6f 75 74 20 65 72 72 6f 72 20 6f   timeout error o
3330: 72 20 68 6f 73 74 20 6e 61 6d 65 20 6e 6f 74 20  r host name not 
3340: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73  .            res
3350: 6f 6c 76 61 62 6c 65 29 2e 20 49 74 20 69 73 20  olvable). It is 
3360: 70 61 73 73 65 64 20 74 68 65 20 6f 72 69 67 69  passed the origi
3370: 6e 61 74 69 6e 67 20 72 65 71 75 65 73 74 20 61  nating request a
3380: 6e 64 20 74 68 65 0a 20 20 20 20 20 20 20 20 20  nd the.         
3390: 20 20 20 22 6e 6f 72 6d 61 6c 69 7a 65 64 22 20     "normalized" 
33a0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 61 72 61 6d  connection param
33b0: 65 74 65 72 73 20 75 73 65 64 20 66 6f 72 20 74  eters used for t
33c0: 68 61 74 20 0a 20 20 20 20 20 20 20 20 20 20 20  hat .           
33d0: 20 72 65 71 75 65 73 74 2e 20 54 68 65 20 63 6f   request. The co
33e0: 6e 6e 65 63 74 4f 70 74 20 6f 62 6a 65 63 74 20  nnectOpt object 
33f0: 22 73 68 6f 75 6c 64 22 20 28 6f 72 20 22 6d 69  "should" (or "mi
3400: 67 68 74 22 29 20 0a 20 20 20 20 20 20 20 20 20  ght") .         
3410: 20 20 20 68 61 76 65 20 61 6e 20 22 65 72 72 6f     have an "erro
3420: 72 4d 65 73 73 61 67 65 22 20 70 72 6f 70 65 72  rMessage" proper
3430: 74 79 20 77 68 69 63 68 20 64 65 73 63 72 69 62  ty which describ
3440: 65 73 20 74 68 65 20 0a 20 20 20 20 20 20 20 20  es the .        
3450: 20 20 20 20 6e 61 74 75 72 65 20 6f 66 20 74 68      nature of th
3460: 65 20 70 72 6f 62 6c 65 6d 2e 0a 20 20 20 20 20  e problem..     
3470: 20 20 20 20 20 20 20 0a 20 20 20 20 20 20 20 20         .        
3480: 20 20 20 20 43 6c 69 65 6e 74 73 20 77 69 6c 6c      Clients will
3490: 20 61 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20 77   almost always w
34a0: 61 6e 74 20 74 6f 20 72 65 70 6c 61 63 65 20 74  ant to replace t
34b0: 68 65 20 64 65 66 61 75 6c 74 20 0a 20 20 20 20  he default .    
34c0: 20 20 20 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e          implemen
34d0: 74 61 74 69 6f 6e 20 77 69 74 68 20 73 6f 6d 65  tation with some
34e0: 74 68 69 6e 67 20 77 68 69 63 68 20 69 6e 74 65  thing which inte
34f0: 67 72 61 74 65 73 20 69 6e 74 6f 20 0a 20 20 20  grates into .   
3500: 20 20 20 20 20 20 20 20 20 74 68 65 69 72 20 61           their a
3510: 70 70 6c 69 63 61 74 69 6f 6e 2e 0a 20 20 20 20  pplication..    
3520: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 6f      */.        o
3530: 6e 45 72 72 6f 72 3a 20 66 75 6e 63 74 69 6f 6e  nError: function
3540: 28 72 65 71 75 65 73 74 2c 20 63 6f 6e 6e 65 63  (request, connec
3550: 74 4f 70 74 29 0a 20 20 20 20 20 20 20 20 7b 0a  tOpt).        {.
3560: 20 20 20 20 20 20 20 20 20 20 20 20 61 6c 65 72              aler
3570: 74 28 27 41 4a 41 4a 20 72 65 71 75 65 73 74 20  t('AJAJ request 
3580: 66 61 69 6c 65 64 3a 5c 6e 27 0a 20 20 20 20 20  failed:\n'.     
3590: 20 20 20 20 20 20 20 20 20 20 20 2b 27 43 6f 6e             +'Con
35a0: 6e 65 63 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  nection informat
35b0: 69 6f 6e 3a 5c 6e 27 0a 20 20 20 20 20 20 20 20  ion:\n'.        
35c0: 20 20 20 20 20 20 20 20 2b 4a 53 4f 4e 2e 73 74          +JSON.st
35d0: 72 69 6e 67 69 66 79 28 63 6f 6e 6e 65 63 74 4f  ringify(connectO
35e0: 70 74 2c 30 2c 34 29 0a 20 20 20 20 20 20 20 20  pt,0,4).        
35f0: 20 20 20 20 29 3b 0a 20 20 20 20 20 20 20 20 7d      );.        }
3600: 2c 0a 0a 20 20 20 20 20 20 20 20 2f 2a 2a 0a 20  ,..        /**. 
3610: 20 20 20 20 20 20 20 20 20 20 20 43 61 6c 6c 65             Calle
3620: 64 20 62 65 66 6f 72 65 20 65 61 63 68 20 63 6f  d before each co
3630: 6e 6e 65 63 74 69 6f 6e 20 61 74 74 65 6d 70 74  nnection attempt
3640: 20 69 73 20 6d 61 64 65 2e 20 43 6c 69 65 6e 74   is made. Client
3650: 73 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  s .            c
3660: 61 6e 20 75 73 65 20 74 68 69 73 20 74 6f 2c 20  an use this to, 
3670: 65 2e 67 2e 2c 20 20 65 6e 61 62 6c 65 20 61 20  e.g.,  enable a 
3680: 76 69 73 75 61 6c 20 22 6e 65 74 77 6f 72 6b 20  visual "network 
3690: 61 63 74 69 76 69 74 79 0a 20 20 20 20 20 20 20  activity.       
36a0: 20 20 20 20 20 6e 6f 74 69 66 69 63 61 74 69 6f       notificatio
36b0: 6e 22 20 66 6f 72 20 74 68 65 20 75 73 65 72 2e  n" for the user.
36c0: 20 49 74 20 69 73 20 70 61 73 73 65 64 20 74 68   It is passed th
36d0: 65 20 6f 72 69 67 69 6e 61 6c 20 0a 20 20 20 20  e original .    
36e0: 20 20 20 20 20 20 20 20 72 65 71 75 65 73 74 20          request 
36f0: 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 65 20 6e  object and the n
3700: 6f 72 6d 61 6c 69 7a 65 64 20 63 6f 6e 6e 65 63  ormalized connec
3710: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 73 20  tion parameters 
3720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
3730: 20 74 68 65 20 72 65 71 75 65 73 74 2e 20 49 66   the request. If
3740: 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 63   this function c
3750: 68 61 6e 67 65 73 20 6f 70 74 2c 20 74 68 6f 73  hanges opt, thos
3760: 65 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  e .            c
3770: 68 61 6e 67 65 73 20 5f 61 72 65 5f 20 61 70 70  hanges _are_ app
3780: 6c 69 65 64 20 74 6f 20 74 68 65 20 73 75 62 73  lied to the subs
3790: 65 71 75 65 6e 74 20 72 65 71 75 65 73 74 2e 20  equent request. 
37a0: 49 66 20 74 68 69 73 20 0a 20 20 20 20 20 20 20  If this .       
37b0: 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 74 68       function th
37c0: 72 6f 77 73 2c 20 6e 65 69 74 68 65 72 20 74 68  rows, neither th
37d0: 65 20 6f 6e 45 72 72 6f 72 28 29 20 6e 6f 72 20  e onError() nor 
37e0: 61 66 74 65 72 53 65 6e 64 28 29 20 0a 20 20 20  afterSend() .   
37f0: 20 20 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63           callbac
3800: 6b 73 20 61 72 65 20 74 72 69 67 67 65 72 65 64  ks are triggered
3810: 20 61 6e 64 20 57 68 41 6a 61 6a 2e 43 6f 6e 6e   and WhAjaj.Conn
3820: 65 63 74 6f 72 2e 73 65 6e 64 49 6d 70 6c 28 29  ector.sendImpl()
3830: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72   .            pr
3840: 6f 70 61 67 61 74 65 73 20 74 68 65 20 65 78 63  opagates the exc
3850: 65 70 74 69 6f 6e 20 62 61 63 6b 20 74 6f 20 74  eption back to t
3860: 68 65 20 63 61 6c 6c 65 72 2e 0a 20 20 20 20 20  he caller..     
3870: 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 62 65     */.        be
3880: 66 6f 72 65 53 65 6e 64 3a 20 66 75 6e 63 74 69  foreSend: functi
3890: 6f 6e 28 72 65 71 75 65 73 74 2c 6f 70 74 29 7b  on(request,opt){
38a0: 7d 2c 0a 0a 20 20 20 20 20 20 20 20 2f 2a 2a 0a  },..        /**.
38b0: 20 20 20 20 20 20 20 20 20 20 20 20 43 61 6c 6c              Call
38c0: 65 64 20 61 66 74 65 72 20 61 6e 20 41 4a 41 4a  ed after an AJAJ
38d0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 74 74 65   connection atte
38e0: 6d 70 74 20 63 6f 6d 70 6c 65 74 65 73 2c 20 0a  mpt completes, .
38f0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 67 61              rega
3900: 72 64 6c 65 73 73 20 6f 66 20 73 75 63 63 65 73  rdless of succes
3910: 73 20 6f 72 20 66 61 69 6c 75 72 65 2e 20 50 61  s or failure. Pa
3920: 73 73 65 64 20 74 68 65 20 73 61 6d 65 20 0a 20  ssed the same . 
3930: 20 20 20 20 20 20 20 20 20 20 20 70 61 72 61 6d             param
3940: 65 74 65 72 73 20 61 73 20 62 65 66 6f 72 65 53  eters as beforeS
3950: 65 6e 64 28 29 20 28 73 65 65 20 74 68 61 74 20  end() (see that 
3960: 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 0a 20 20  function for .  
3970: 20 20 20 20 20 20 20 20 20 20 64 65 74 61 69 6c            detail
3980: 73 29 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  s)..            
3990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 48 65 72  .            Her
39a0: 65 27 73 20 61 6e 20 65 78 61 6d 70 6c 65 20 6f  e's an example o
39b0: 66 20 73 65 74 74 69 6e 67 20 75 70 20 61 20 76  f setting up a v
39c0: 69 73 75 61 6c 20 6e 6f 74 69 66 69 63 61 74 69  isual notificati
39d0: 6f 6e 20 6f 6e 20 0a 20 20 20 20 20 20 20 20 20  on on .         
39e0: 20 20 20 61 6a 61 78 20 6f 70 65 72 61 74 69 6f     ajax operatio
39f0: 6e 73 20 75 73 69 6e 67 20 6a 51 75 65 72 79 20  ns using jQuery 
3a00: 28 62 75 74 20 69 74 27 73 20 61 6c 73 6f 20 65  (but it's also e
3a10: 61 73 79 20 74 6f 20 64 6f 20 0a 20 20 20 20 20  asy to do .     
3a20: 20 20 20 20 20 20 20 77 69 74 68 6f 75 74 20 6a         without j
3a30: 51 75 65 72 79 20 61 73 20 77 65 6c 6c 29 3a 0a  Query as well):.
3a40: 20 20 20 20 20 20 20 20 20 20 20 20 0a 20 20 20              .   
3a50: 20 20 20 20 20 20 20 20 20 40 63 6f 64 65 0a 20           @code. 
3a60: 20 20 20 20 20 20 20 20 20 20 20 66 75 6e 63 74             funct
3a70: 69 6f 6e 20 73 74 61 72 74 41 6a 61 78 4e 6f 74  ion startAjaxNot
3a80: 69 66 28 72 65 71 2c 6f 70 74 29 20 7b 0a 20 20  if(req,opt) {.  
3a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61                va
3aa0: 72 20 6d 65 20 3d 20 61 72 67 75 6d 65 6e 74 73  r me = arguments
3ab0: 2e 63 61 6c 6c 65 65 3b 0a 20 20 20 20 20 20 20  .callee;.       
3ac0: 20 20 20 20 20 20 20 20 20 76 61 72 20 63 20 3d           var c =
3ad0: 20 2b 2b 6d 65 2e 61 6a 61 78 43 6f 75 6e 74 3b   ++me.ajaxCount;
3ae0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3af0: 20 6d 65 2e 65 6c 65 6d 65 6e 74 2e 74 65 78 74   me.element.text
3b00: 28 20 63 20 2b 20 22 20 70 65 6e 64 69 6e 67 20  ( c + " pending 
3b10: 41 4a 41 58 20 6f 70 65 72 61 74 69 6f 6e 28 73  AJAX operation(s
3b20: 29 2e 2e 2e 22 20 29 3b 0a 20 20 20 20 20 20 20  )..." );.       
3b30: 20 20 20 20 20 20 20 20 20 69 66 28 20 31 20 3d           if( 1 =
3b40: 3d 20 63 20 29 20 6d 65 2e 65 6c 65 6d 65 6e 74  = c ) me.element
3b50: 2e 73 74 6f 70 28 29 2e 66 61 64 65 49 6e 28 29  .stop().fadeIn()
3b60: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
3b70: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72              star
3b80: 74 41 6a 61 78 4e 6f 74 69 66 2e 61 6a 61 78 43  tAjaxNotif.ajaxC
3b90: 6f 75 6e 74 20 3d 20 30 2e 0a 20 20 20 20 20 20  ount = 0..      
3ba0: 20 20 20 20 20 20 73 74 61 72 74 41 6a 61 78 4e        startAjaxN
3bb0: 6f 74 69 66 2e 65 6c 65 6d 65 6e 74 20 3d 20 6a  otif.element = j
3bc0: 51 75 65 72 79 28 27 23 77 68 69 6b 69 41 6a 61  Query('#whikiAja
3bd0: 78 4e 6f 74 69 66 69 63 61 74 69 6f 6e 27 29 3b  xNotification');
3be0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 0a 20 20  .            .  
3bf0: 20 20 20 20 20 20 20 20 20 20 66 75 6e 63 74 69            functi
3c00: 6f 6e 20 65 6e 64 41 6a 61 78 4e 6f 74 69 66 28  on endAjaxNotif(
3c10: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
3c20: 20 20 20 20 76 61 72 20 63 20 3d 20 2d 2d 73 74      var c = --st
3c30: 61 72 74 41 6a 61 78 4e 6f 74 69 66 2e 61 6a 61  artAjaxNotif.aja
3c40: 78 43 6f 75 6e 74 3b 0a 20 20 20 20 20 20 20 20  xCount;.        
3c50: 20 20 20 20 20 20 20 20 73 74 61 72 74 41 6a 61          startAja
3c60: 78 4e 6f 74 69 66 2e 65 6c 65 6d 65 6e 74 2e 74  xNotif.element.t
3c70: 65 78 74 28 20 63 2b 22 20 70 65 6e 64 69 6e 67  ext( c+" pending
3c80: 20 41 4a 41 58 20 6f 70 65 72 61 74 69 6f 6e 28   AJAX operation(
3c90: 73 29 2e 2e 2e 22 20 29 3b 0a 20 20 20 20 20 20  s)..." );.      
3ca0: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 30 20            if( 0 
3cb0: 3d 3d 20 63 20 29 20 73 74 61 72 74 41 6a 61 78  == c ) startAjax
3cc0: 4e 6f 74 69 66 2e 65 6c 65 6d 65 6e 74 2e 73 74  Notif.element.st
3cd0: 6f 70 28 29 2e 66 61 64 65 4f 75 74 28 29 3b 0a  op().fadeOut();.
3ce0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
3cf0: 20 20 20 20 20 20 20 20 20 20 40 65 6e 64 63 6f            @endco
3d00: 64 65 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20  de..            
3d10: 53 65 74 20 74 68 65 20 62 65 66 6f 72 65 53 65  Set the beforeSe
3d20: 6e 64 2f 61 66 74 65 72 53 65 6e 64 20 70 72 6f  nd/afterSend pro
3d30: 70 65 72 74 69 65 73 20 74 6f 20 74 68 6f 73 65  perties to those
3d40: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 75   .            fu
3d50: 6e 63 74 69 6f 6e 73 20 74 6f 20 65 6e 61 62 6c  nctions to enabl
3d60: 65 20 74 68 65 20 6e 6f 74 69 66 69 63 61 74 69  e the notificati
3d70: 6f 6e 73 20 62 79 20 64 65 66 61 75 6c 74 2e 20  ons by default. 
3d80: 20 20 20 20 20 20 20 20 20 20 20 0a 20 20 20 20             .    
3d90: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 61      */.        a
3da0: 66 74 65 72 53 65 6e 64 3a 20 66 75 6e 63 74 69  fterSend: functi
3db0: 6f 6e 28 72 65 71 75 65 73 74 2c 6f 70 74 29 7b  on(request,opt){
3dc0: 7d 2c 0a 0a 20 20 20 20 20 20 20 20 2f 2a 2a 0a  },..        /**.
3dd0: 20 20 20 20 20 20 20 20 20 20 20 20 49 66 20 6a              If j
3de0: 73 6f 6e 70 20 69 73 20 61 20 73 74 72 69 6e 67  sonp is a string
3df0: 20 74 68 65 6e 20 74 68 65 20 57 68 41 6a 61 6a   then the WhAjaj
3e00: 2d 69 6e 74 65 72 6e 61 6c 20 72 65 73 70 6f 6e  -internal respon
3e10: 73 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 68  se.            h
3e20: 61 6e 64 6c 69 6e 67 20 63 6f 64 65 20 41 53 53  andling code ASS
3e30: 55 4d 45 53 20 74 68 61 74 20 74 68 65 20 72 65  UMES that the re
3e40: 73 70 6f 6e 73 65 20 63 6f 6e 74 61 69 6e 73 20  sponse contains 
3e50: 61 20 4a 53 4f 4e 50 2d 73 74 79 6c 65 0a 20 20  a JSONP-style.  
3e60: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 72            constr
3e70: 75 63 74 20 61 6e 64 20 65 76 61 6c 28 29 73 20  uct and eval()s 
3e80: 69 74 20 61 66 74 65 72 20 61 66 74 65 72 53 65  it after afterSe
3e90: 6e 64 28 29 20 62 75 74 20 62 65 66 6f 72 65 20  nd() but before 
3ea0: 6f 6e 52 65 73 70 6f 6e 73 65 28 29 2e 0a 20 20  onResponse()..  
3eb0: 20 20 20 20 20 20 20 20 20 20 49 6e 20 74 68 69            In thi
3ec0: 73 20 63 61 73 65 2c 20 6f 6e 52 65 73 70 6f 6e  s case, onRespon
3ed0: 73 65 28 29 20 77 69 6c 6c 20 67 65 74 20 61 20  se() will get a 
3ee0: 73 74 72 69 6e 67 20 76 61 6c 75 65 20 66 6f 72  string value for
3ef0: 20 74 68 65 20 72 65 73 70 6f 6e 73 65 0a 20 20   the response.  
3f00: 20 20 20 20 20 20 20 20 20 20 69 6e 73 74 65 61            instea
3f10: 64 20 6f 66 20 61 20 72 65 73 70 6f 6e 73 65 20  d of a response 
3f20: 6f 62 6a 65 63 74 20 70 61 72 73 65 64 20 66 72  object parsed fr
3f30: 6f 6d 20 4a 53 4f 4e 2e 20 0a 20 20 20 20 20 20  om JSON. .      
3f40: 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 6a 73 6f    */.        jso
3f50: 6e 70 3a 75 6e 64 65 66 69 6e 65 64 2c 0a 20 20  np:undefined,.  
3f60: 20 20 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 20        /**.      
3f70: 20 20 20 20 20 20 44 6f 6e 27 74 20 75 73 65 20        Don't use 
3f80: 79 65 74 2e 20 50 6c 61 6e 6e 65 64 20 66 75 74  yet. Planned fut
3f90: 75 72 65 20 6f 70 74 69 6f 6e 2e 0a 20 20 20 20  ure option..    
3fa0: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 70      */.        p
3fb0: 72 6f 70 61 67 61 74 65 45 78 63 65 70 74 69 6f  ropagateExceptio
3fc0: 6e 73 3a 66 61 6c 73 65 0a 20 20 20 20 7d 0a 7d  ns:false.    }.}
3fd0: 3b 0a 0a 0a 2f 2a 2a 0a 20 20 20 20 57 68 41 6a  ;.../**.    WhAj
3fe0: 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e 70 72 6f  aj.Connector.pro
3ff0: 74 6f 74 79 70 65 2e 63 61 6c 6c 62 61 63 6b 73  totype.callbacks
4000: 20 64 65 66 69 6e 65 73 20 63 61 6c 6c 62 61 63   defines callbac
4010: 6b 73 20 61 6e 61 6c 6f 67 0a 20 20 20 20 74 6f  ks analog.    to
4020: 20 74 68 65 20 6f 6e 58 58 58 20 63 61 6c 6c 62   the onXXX callb
4030: 61 63 6b 73 20 64 65 66 69 6e 65 64 20 69 6e 20  acks defined in 
4040: 57 68 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72  WhAjaj.Connector
4050: 2e 6f 70 74 69 6f 6e 73 2e 61 6a 61 78 2c 0a 20  .options.ajax,. 
4060: 20 20 20 77 69 74 68 20 74 77 6f 20 6e 6f 74 61     with two nota
4070: 62 6c 65 20 64 69 66 66 65 72 65 6e 63 65 73 3a  ble differences:
4080: 0a 0a 20 20 20 20 31 29 20 74 68 65 73 65 20 63  ..    1) these c
4090: 61 6c 6c 62 61 63 6b 73 2c 20 69 66 20 73 65 74  allbacks, if set
40a0: 2c 20 61 72 65 20 63 61 6c 6c 65 64 20 69 6e 20  , are called in 
40b0: 61 64 64 69 74 69 6f 6e 20 74 6f 20 61 6e 79 0a  addition to any.
40c0: 20 20 20 20 72 65 71 75 65 73 74 2d 73 70 65 63      request-spec
40d0: 69 66 69 63 20 63 61 6c 6c 62 61 63 6b 2e 20 54  ific callback. T
40e0: 68 65 20 69 6e 74 65 6e 74 69 6f 6e 20 69 73 20  he intention is 
40f0: 74 6f 20 61 6c 6c 6f 77 20 61 20 66 72 61 6d 65  to allow a frame
4100: 77 6f 72 6b 20 74 6f 20 73 65 74 0a 20 20 20 20  work to set.    
4110: 22 66 72 61 6d 65 77 6f 72 6b 2d 6c 65 76 65 6c  "framework-level
4120: 22 20 63 61 6c 6c 62 61 63 6b 73 20 77 68 69 63  " callbacks whic
4130: 68 20 73 68 6f 75 6c 64 20 62 65 20 63 61 6c 6c  h should be call
4140: 65 64 20 69 6e 64 65 70 65 6e 64 65 6e 74 6c 79  ed independently
4150: 20 6f 66 20 74 68 65 0a 20 20 20 20 72 65 71 75   of the.    requ
4160: 65 73 74 2d 73 70 65 63 69 66 69 63 20 63 61 6c  est-specific cal
4170: 6c 62 61 63 6b 73 20 28 77 69 74 68 6f 75 74 20  lbacks (without 
4180: 69 6e 74 65 72 66 65 72 69 6e 67 20 77 69 74 68  interfering with
4190: 20 74 68 65 6d 2c 20 65 2e 67 2e 0a 20 20 20 20   them, e.g..    
41a0: 72 65 71 75 69 72 69 6e 67 20 73 70 65 63 69 61  requiring specia
41b0: 6c 20 72 65 2d 66 6f 72 77 61 72 64 69 6e 67 20  l re-forwarding 
41c0: 66 65 61 74 75 72 65 73 29 2e 0a 0a 20 20 20 20  features)...    
41d0: 32 29 20 54 68 65 20 27 74 68 69 73 27 20 6f 62  2) The 'this' ob
41e0: 6a 65 63 74 20 69 6e 20 74 68 65 73 65 20 63 61  ject in these ca
41f0: 6c 6c 62 61 63 6b 73 20 69 73 20 74 68 65 20 43  llbacks is the C
4200: 6f 6e 6e 65 63 74 6f 72 20 69 6e 73 74 61 6e 63  onnector instanc
4210: 65 0a 20 20 20 20 61 73 73 6f 63 69 61 74 65 64  e.    associated
4220: 20 77 69 74 68 20 74 68 65 20 63 61 6c 6c 62 61   with the callba
4230: 63 6b 2c 20 77 68 65 72 65 61 73 20 74 68 65 20  ck, whereas the 
4240: 22 6f 74 68 65 72 22 20 6f 6e 58 58 58 20 66 6f  "other" onXXX fo
4250: 72 6d 20 68 61 73 20 69 74 73 0a 20 20 20 20 22  rm has its.    "
4260: 61 6a 61 78 20 6f 70 74 69 6f 6e 73 22 20 6f 62  ajax options" ob
4270: 6a 65 63 74 20 61 73 20 69 74 73 20 74 68 69 73  ject as its this
4280: 2e 0a 0a 20 20 20 20 57 68 65 6e 20 74 68 69 73  ...    When this
4290: 20 41 50 49 20 73 61 79 73 20 74 68 61 74 20 61   API says that a
42a0: 6e 20 6f 6e 58 58 58 20 63 61 6c 6c 62 61 63 6b  n onXXX callback
42b0: 20 77 69 6c 6c 20 62 65 20 63 61 6c 6c 65 64 20   will be called 
42c0: 66 6f 72 20 61 20 72 65 71 75 65 73 74 2c 0a 20  for a request,. 
42d0: 20 20 20 62 6f 74 68 20 74 68 65 20 72 65 71 75     both the requ
42e0: 65 73 74 27 73 20 6f 6e 58 58 58 20 28 69 66 20  est's onXXX (if 
42f0: 73 65 74 29 20 61 6e 64 20 74 68 69 73 20 6f 6e  set) and this on
4300: 65 20 28 69 66 20 73 65 74 29 20 77 69 6c 6c 20  e (if set) will 
4310: 62 65 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 57 68  be called..*/.Wh
4320: 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e 70  Ajaj.Connector.p
4330: 72 6f 74 6f 74 79 70 65 2e 63 61 6c 6c 62 61 63  rototype.callbac
4340: 6b 73 20 3d 20 7b 7d 3b 0a 2f 2a 2a 0a 20 20 20  ks = {};./**.   
4350: 20 49 6e 73 74 61 6e 63 65 2d 73 70 65 63 69 66   Instance-specif
4360: 69 63 20 76 61 6c 75 65 73 20 66 6f 72 20 41 4a  ic values for AJ
4370: 41 4a 2d 6c 65 76 65 6c 20 70 72 6f 70 65 72 74  AJ-level propert
4380: 69 65 73 20 28 61 73 20 6f 70 70 6f 73 65 64 20  ies (as opposed 
4390: 74 6f 0a 20 20 20 20 61 70 70 6c 69 63 61 74 69  to.    applicati
43a0: 6f 6e 2d 6c 65 76 65 6c 20 72 65 71 75 65 73 74  on-level request
43b0: 20 70 72 6f 70 65 72 74 69 65 73 29 2e 20 4f 70   properties). Op
43c0: 74 69 6f 6e 73 20 73 65 74 20 68 65 72 65 20 22  tions set here "
43d0: 6f 76 65 72 72 69 64 65 22 20 74 68 6f 73 65 0a  override" those.
43e0: 20 20 20 20 73 70 65 63 69 66 69 65 64 20 69 6e      specified in
43f0: 20 57 68 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f   WhAjaj.Connecto
4400: 72 2e 6f 70 74 69 6f 6e 73 2e 61 6a 61 78 20 61  r.options.ajax a
4410: 6e 64 20 61 72 65 20 22 6f 76 65 72 72 69 64 64  nd are "overridd
4420: 65 6e 22 20 62 79 0a 20 20 20 20 6f 70 74 69 6f  en" by.    optio
4430: 6e 73 20 70 61 73 73 65 64 20 74 6f 20 73 65 6e  ns passed to sen
4440: 64 52 65 71 75 65 73 74 28 29 2e 0a 2a 2f 0a 57  dRequest()..*/.W
4450: 68 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e  hAjaj.Connector.
4460: 70 72 6f 74 6f 74 79 70 65 2e 6f 70 74 69 6f 6e  prototype.option
4470: 73 20 3d 20 7b 7d 3b 0a 0a 0a 2f 2a 2a 0a 20 20  s = {};.../**.  
4480: 20 20 54 72 69 65 73 20 74 6f 20 66 69 6e 64 20    Tries to find 
4490: 74 68 65 20 67 69 76 65 6e 20 6b 65 79 20 69 6e  the given key in
44a0: 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c   any of the foll
44b0: 6f 77 69 6e 67 2c 20 72 65 74 75 72 6e 69 6e 67  owing, returning
44c0: 0a 20 20 20 20 74 68 65 20 66 69 72 73 74 20 6d  .    the first m
44d0: 61 74 63 68 20 66 6f 75 6e 64 3a 20 6f 70 74 2c  atch found: opt,
44e0: 20 74 68 69 73 2e 6f 70 74 69 6f 6e 73 2c 20 57   this.options, W
44f0: 68 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e  hAjaj.Connector.
4500: 6f 70 74 69 6f 6e 73 2e 61 6a 61 78 2e 0a 0a 20  options.ajax... 
4510: 20 20 20 52 65 74 75 72 6e 73 20 75 6e 64 65 66     Returns undef
4520: 69 6e 65 64 20 69 66 20 6b 65 79 20 69 73 20 6e  ined if key is n
4530: 6f 74 20 66 6f 75 6e 64 2e 0a 2a 2f 0a 57 68 41  ot found..*/.WhA
4540: 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e 70 72  jaj.Connector.pr
4550: 6f 74 6f 74 79 70 65 2e 64 65 72 69 76 65 64 4f  ototype.derivedO
4560: 70 74 69 6f 6e 20 3d 20 66 75 6e 63 74 69 6f 6e  ption = function
4570: 28 6b 65 79 2c 6f 70 74 29 20 7b 0a 20 20 20 20  (key,opt) {.    
4580: 76 61 72 20 76 20 3d 20 6f 70 74 20 3f 20 6f 70  var v = opt ? op
4590: 74 5b 6b 65 79 5d 20 3a 20 75 6e 64 65 66 69 6e  t[key] : undefin
45a0: 65 64 3b 0a 20 20 20 20 69 66 28 20 75 6e 64 65  ed;.    if( unde
45b0: 66 69 6e 65 64 20 21 3d 3d 20 76 20 29 20 72 65  fined !== v ) re
45c0: 74 75 72 6e 20 76 3b 0a 20 20 20 20 65 6c 73 65  turn v;.    else
45d0: 20 76 20 3d 20 74 68 69 73 2e 6f 70 74 69 6f 6e   v = this.option
45e0: 73 5b 6b 65 79 5d 3b 0a 20 20 20 20 69 66 28 20  s[key];.    if( 
45f0: 75 6e 64 65 66 69 6e 65 64 20 21 3d 3d 20 76 20  undefined !== v 
4600: 29 20 72 65 74 75 72 6e 20 76 3b 0a 20 20 20 20  ) return v;.    
4610: 65 6c 73 65 20 76 20 3d 20 57 68 41 6a 61 6a 2e  else v = WhAjaj.
4620: 43 6f 6e 6e 65 63 74 6f 72 2e 6f 70 74 69 6f 6e  Connector.option
4630: 73 2e 61 6a 61 78 5b 6b 65 79 5d 3b 0a 20 20 20  s.ajax[key];.   
4640: 20 72 65 74 75 72 6e 20 76 3b 0a 7d 3b 0a 0a 2f   return v;.};../
4650: 2a 2a 0a 20 20 20 20 52 65 74 75 72 6e 73 20 61  **.    Returns a
4660: 20 75 6e 69 71 75 65 20 73 74 72 69 6e 67 20 6f   unique string o
4670: 6e 20 65 61 63 68 20 63 61 6c 6c 20 63 6f 6e 74  n each call cont
4680: 61 69 6e 69 6e 67 20 61 20 67 65 6e 65 72 69 63  aining a generic
4690: 20 0a 20 20 20 20 72 65 61 6e 64 6f 6d 20 72 65   .    reandom re
46a0: 71 75 65 73 74 20 69 64 65 6e 74 69 66 69 65 72  quest identifier
46b0: 20 73 74 72 69 6e 67 2e 20 54 68 69 73 20 69 73   string. This is
46c0: 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68 65   not used by the
46d0: 20 63 6f 72 65 20 0a 20 20 20 20 41 50 49 20 62   core .    API b
46e0: 75 74 20 63 61 6e 20 62 65 20 75 73 65 64 20 62  ut can be used b
46f0: 79 20 63 6c 69 65 6e 74 20 63 6f 64 65 20 74 6f  y client code to
4700: 20 67 65 6e 65 72 61 74 65 20 75 6e 69 71 75 65   generate unique
4710: 20 49 44 73 20 66 6f 72 20 0a 20 20 20 20 65 61   IDs for .    ea
4720: 63 68 20 72 65 71 75 65 73 74 20 28 69 66 20 6e  ch request (if n
4730: 65 65 64 65 64 29 2e 0a 0a 20 20 20 20 54 68 65  eeded)...    The
4740: 20 65 78 61 63 74 20 66 6f 72 6d 61 74 20 69 73   exact format is
4750: 20 75 6e 73 70 65 63 69 66 69 65 64 20 61 6e 64   unspecified and
4760: 20 6d 61 79 20 63 68 61 6e 67 65 20 69 6e 20 74   may change in t
4770: 68 65 20 66 75 74 75 72 65 2e 0a 0a 20 20 20 20  he future...    
4780: 52 65 71 75 65 73 74 20 49 44 73 20 63 61 6e 20  Request IDs can 
4790: 62 65 20 75 73 65 64 20 62 79 20 63 6c 69 65 6e  be used by clien
47a0: 74 73 20 74 6f 20 22 6d 61 74 63 68 20 75 70 22  ts to "match up"
47b0: 20 72 65 73 70 6f 6e 73 65 73 20 74 6f 20 0a 20   responses to . 
47c0: 20 20 20 73 70 65 63 69 66 69 63 20 72 65 71 75     specific requ
47d0: 65 73 74 73 20 69 66 20 6e 65 65 64 65 64 2e 20  ests if needed. 
47e0: 49 6e 20 70 72 61 63 74 69 63 65 2c 20 68 6f 77  In practice, how
47f0: 65 76 65 72 2c 20 74 68 65 79 20 61 72 65 20 0a  ever, they are .
4800: 20 20 20 20 73 65 6c 64 6f 6d 2c 20 69 66 20 65      seldom, if e
4810: 76 65 72 2c 20 6e 65 65 64 65 64 2e 20 57 68 65  ver, needed. Whe
4820: 6e 20 70 61 73 73 69 6e 67 20 73 65 76 65 72 61  n passing severa
4830: 6c 20 63 6f 6e 63 75 72 72 65 6e 74 20 0a 20 20  l concurrent .  
4840: 20 20 72 65 71 75 65 73 74 73 20 74 68 72 6f 75    requests throu
4850: 67 68 20 74 68 65 20 73 61 6d 65 20 72 65 73 70  gh the same resp
4860: 6f 6e 73 65 20 63 61 6c 6c 62 61 63 6b 2c 20 69  onse callback, i
4870: 74 20 6d 69 67 68 74 20 62 65 20 75 73 65 66 75  t might be usefu
4880: 6c 20 0a 20 20 20 20 66 6f 72 20 73 6f 6d 65 20  l .    for some 
4890: 63 6c 69 65 6e 74 73 20 74 6f 20 62 65 20 61 62  clients to be ab
48a0: 6c 65 20 74 6f 20 64 69 73 74 69 6e 67 75 69 73  le to distinguis
48b0: 68 2c 20 70 6f 73 73 69 62 6c 79 20 72 65 2d 72  h, possibly re-r
48c0: 6f 75 74 69 6e 67 20 0a 20 20 20 20 74 68 65 6d  outing .    them
48d0: 20 74 68 72 6f 75 67 68 20 6f 74 68 65 72 20 68   through other h
48e0: 61 6e 64 6c 65 72 73 20 62 61 73 65 64 20 6f 6e  andlers based on
48f0: 20 74 68 65 20 6f 72 69 67 69 6e 61 74 69 6e 67   the originating
4900: 20 72 65 71 75 65 73 74 20 74 79 70 65 2e 0a 20   request type.. 
4910: 20 20 20 0a 20 20 20 20 49 66 20 74 68 69 73 2e     .    If this.
4920: 6f 70 74 69 6f 6e 73 2e 72 65 71 75 65 73 74 49  options.requestI
4930: 64 50 72 65 66 69 78 20 6f 72 20 0a 20 20 20 20  dPrefix or .    
4940: 57 68 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72  WhAjaj.Connector
4950: 2e 6f 70 74 69 6f 6e 73 2e 72 65 71 75 65 73 74  .options.request
4960: 49 64 50 72 65 66 69 78 20 69 73 20 73 65 74 20  IdPrefix is set 
4970: 74 68 65 6e 20 74 68 61 74 20 74 65 78 74 0a 20  then that text. 
4980: 20 20 20 69 73 20 70 72 65 66 69 78 65 64 20 74     is prefixed t
4990: 6f 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 73  o the returned s
49a0: 74 72 69 6e 67 2e 0a 2a 2f 0a 57 68 41 6a 61 6a  tring..*/.WhAjaj
49b0: 2e 43 6f 6e 6e 65 63 74 6f 72 2e 70 72 6f 74 6f  .Connector.proto
49c0: 74 79 70 65 2e 67 65 6e 65 72 61 74 65 52 65 71  type.generateReq
49d0: 75 65 73 74 49 64 20 3d 20 66 75 6e 63 74 69 6f  uestId = functio
49e0: 6e 28 29 0a 7b 0a 20 20 20 20 69 66 28 20 75 6e  n().{.    if( un
49f0: 64 65 66 69 6e 65 64 20 3d 3d 3d 20 61 72 67 75  defined === argu
4a00: 6d 65 6e 74 73 2e 63 61 6c 6c 65 65 2e 73 65 71  ments.callee.seq
4a10: 75 65 6e 63 65 20 29 0a 20 20 20 20 7b 0a 20 20  uence ).    {.  
4a20: 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 73 2e        arguments.
4a30: 63 61 6c 6c 65 65 2e 73 65 71 75 65 6e 63 65 20  callee.sequence 
4a40: 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 76  = 0;.    }.    v
4a50: 61 72 20 70 72 65 66 20 3d 20 74 68 69 73 2e 6f  ar pref = this.o
4a60: 70 74 69 6f 6e 73 2e 72 65 71 75 65 73 74 49 64  ptions.requestId
4a70: 50 72 65 66 69 78 20 7c 7c 20 57 68 41 6a 61 6a  Prefix || WhAjaj
4a80: 2e 43 6f 6e 6e 65 63 74 6f 72 2e 6f 70 74 69 6f  .Connector.optio
4a90: 6e 73 2e 72 65 71 75 65 73 74 49 64 50 72 65 66  ns.requestIdPref
4aa0: 69 78 20 7c 7c 20 27 27 3b 0a 20 20 20 20 72 65  ix || '';.    re
4ab0: 74 75 72 6e 20 70 72 65 66 20 2b 0a 20 20 20 20  turn pref +.    
4ac0: 20 20 20 20 57 68 41 6a 61 6a 2e 6d 73 54 69 6d      WhAjaj.msTim
4ad0: 65 73 74 61 6d 70 28 29 20 2b 0a 20 20 20 20 20  estamp() +.     
4ae0: 20 20 20 27 2f 27 2b 28 4d 61 74 68 2e 72 6f 75     '/'+(Math.rou
4af0: 6e 64 28 20 4d 61 74 68 2e 72 61 6e 64 6f 6d 28  nd( Math.random(
4b00: 29 20 2a 20 31 30 30 30 30 30 30 30 30 29 20 29  ) * 100000000) )
4b10: 2b 0a 20 20 20 20 20 20 20 20 27 3a 27 2b 28 2b  +.        ':'+(+
4b20: 2b 61 72 67 75 6d 65 6e 74 73 2e 63 61 6c 6c 65  +arguments.calle
4b30: 65 2e 73 65 71 75 65 6e 63 65 29 3b 0a 7d 3b 0a  e.sequence);.};.
4b40: 0a 2f 2a 2a 0a 20 20 20 20 43 6f 70 69 65 73 20  ./**.    Copies 
4b50: 28 53 48 41 4c 4c 4f 57 4c 59 29 20 61 6c 6c 20  (SHALLOWLY) all 
4b60: 70 72 6f 70 65 72 74 69 65 73 20 69 6e 20 6f 70  properties in op
4b70: 74 20 74 6f 20 74 68 69 73 2e 6f 70 74 69 6f 6e  t to this.option
4b80: 73 2e 0a 2a 2f 0a 57 68 41 6a 61 6a 2e 43 6f 6e  s..*/.WhAjaj.Con
4b90: 6e 65 63 74 6f 72 2e 70 72 6f 74 6f 74 79 70 65  nector.prototype
4ba0: 2e 61 64 64 4f 70 74 69 6f 6e 73 20 3d 20 66 75  .addOptions = fu
4bb0: 6e 63 74 69 6f 6e 28 6f 70 74 29 20 7b 0a 20 20  nction(opt) {.  
4bc0: 20 20 76 61 72 20 6b 2c 20 76 3b 0a 20 20 20 20    var k, v;.    
4bd0: 66 6f 72 28 20 6b 20 69 6e 20 6f 70 74 20 29 20  for( k in opt ) 
4be0: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 20  {.        if( ! 
4bf0: 6f 70 74 2e 68 61 73 4f 77 6e 50 72 6f 70 65 72  opt.hasOwnProper
4c00: 74 79 28 6b 29 20 29 20 63 6f 6e 74 69 6e 75 65  ty(k) ) continue
4c10: 20 2f 2a 20 70 72 6f 61 63 74 69 76 65 20 50 72   /* proactive Pr
4c20: 6f 74 6f 74 79 70 65 20 6b 6c 75 64 67 65 21 20  ototype kludge! 
4c30: 2a 2f 3b 0a 20 20 20 20 20 20 20 20 74 68 69 73  */;.        this
4c40: 2e 6f 70 74 69 6f 6e 73 5b 6b 5d 20 3d 20 6f 70  .options[k] = op
4c50: 74 5b 6b 5d 3b 0a 20 20 20 20 7d 0a 20 20 20 20  t[k];.    }.    
4c60: 72 65 74 75 72 6e 20 74 68 69 73 2e 6f 70 74 69  return this.opti
4c70: 6f 6e 73 3b 0a 7d 3b 0a 0a 2f 2a 2a 0a 20 20 20  ons;.};../**.   
4c80: 20 41 6e 20 69 6e 74 65 72 6e 61 6c 20 68 65 6c   An internal hel
4c90: 70 65 72 20 6f 62 6a 65 63 74 20 77 68 69 63 68  per object which
4ca0: 20 68 6f 6c 64 73 20 73 65 76 65 72 61 6c 20 66   holds several f
4cb0: 75 6e 63 74 69 6f 6e 73 20 69 6e 74 65 6e 64 65  unctions intende
4cc0: 64 20 0a 20 20 20 20 74 6f 20 73 69 6d 70 6c 69  d .    to simpli
4cd0: 66 79 20 74 68 65 20 63 72 65 61 74 69 6f 6e 20  fy the creation 
4ce0: 6f 66 20 63 6f 6e 63 72 65 74 65 20 63 6f 6d 6d  of concrete comm
4cf0: 75 6e 69 63 61 74 69 6f 6e 20 63 68 61 6e 6e 65  unication channe
4d00: 6c 20 0a 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74  l .    implement
4d10: 61 74 69 6f 6e 73 20 66 6f 72 20 57 68 41 6a 61  ations for WhAja
4d20: 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e 73 65 6e 64  j.Connector.send
4d30: 49 6d 70 6c 28 29 2e 20 54 68 65 73 65 20 6f 70  Impl(). These op
4d40: 65 72 61 74 69 6f 6e 73 0a 20 20 20 20 74 61 6b  erations.    tak
4d50: 65 20 63 61 72 65 20 6f 66 20 73 6f 6d 65 20 6f  e care of some o
4d60: 66 20 74 68 65 20 6d 6f 72 65 20 65 72 72 6f 72  f the more error
4d70: 2d 70 72 6f 6e 65 20 70 61 72 74 73 20 6f 66 20  -prone parts of 
4d80: 65 6e 73 75 72 69 6e 67 20 74 68 61 74 0a 20 20  ensuring that.  
4d90: 20 20 6f 6e 52 65 73 70 6f 6e 73 65 28 29 2c 20    onResponse(), 
4da0: 6f 6e 45 72 72 6f 72 28 29 2c 20 65 74 63 2e 20  onError(), etc. 
4db0: 63 61 6c 6c 62 61 63 6b 73 20 61 72 65 20 63 61  callbacks are ca
4dc0: 6c 6c 65 64 20 63 6f 6e 73 69 73 74 65 6e 74 6c  lled consistentl
4dd0: 79 20 0a 20 20 20 20 75 73 69 6e 67 20 74 68 65  y .    using the
4de0: 20 73 61 6d 65 20 72 75 6c 65 73 2e 0a 2a 2f 0a   same rules..*/.
4df0: 57 68 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72  WhAjaj.Connector
4e00: 2e 73 65 6e 64 48 65 6c 70 65 72 20 3d 20 7b 0a  .sendHelper = {.
4e10: 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 20 20 20      /**.        
4e20: 6f 70 74 20 69 73 20 61 73 73 75 6d 65 64 20 74  opt is assumed t
4e30: 6f 20 62 65 20 61 20 6e 6f 72 6d 61 6c 69 7a 65  o be a normalize
4e40: 64 20 73 65 74 20 6f 66 20 0a 20 20 20 20 20 20  d set of .      
4e50: 20 20 57 68 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74    WhAjaj.Connect
4e60: 6f 72 2e 73 65 6e 64 52 65 71 75 65 73 74 28 29  or.sendRequest()
4e70: 20 6f 70 74 69 6f 6e 73 2e 20 54 68 69 73 20 66   options. This f
4e80: 75 6e 63 74 69 6f 6e 20 0a 20 20 20 20 20 20 20  unction .       
4e90: 20 63 72 65 61 74 65 73 20 61 20 75 72 6c 20 62   creates a url b
4ea0: 79 20 63 6f 6e 63 61 74 65 6e 61 74 69 6e 67 20  y concatenating 
4eb0: 6f 70 74 2e 75 72 6c 20 61 6e 64 20 73 6f 6d 65  opt.url and some
4ec0: 20 66 6f 72 6d 20 6f 66 20 0a 20 20 20 20 20 20   form of .      
4ed0: 20 20 6f 70 74 2e 75 72 6c 50 61 72 61 6d 2e 0a    opt.urlParam..
4ee0: 20 20 20 20 20 20 20 20 0a 20 20 20 20 20 20 20          .       
4ef0: 20 49 66 20 6f 70 74 2e 75 72 6c 50 61 72 61 6d   If opt.urlParam
4f00: 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 6f 72   is an object or
4f10: 20 73 74 72 69 6e 67 20 74 68 65 6e 20 69 74 20   string then it 
4f20: 69 73 20 61 70 70 65 6e 64 65 64 20 0a 20 20 20  is appended .   
4f30: 20 20 20 20 20 74 6f 20 74 68 65 20 75 72 6c 2e       to the url.
4f40: 20 41 6e 20 6f 62 6a 65 63 74 20 69 73 20 61 73   An object is as
4f50: 73 75 6d 65 64 20 74 6f 20 62 65 20 61 20 6f 6e  sumed to be a on
4f60: 65 2d 64 69 6d 65 6e 73 69 6f 6e 61 6c 20 73 65  e-dimensional se
4f70: 74 20 0a 20 20 20 20 20 20 20 20 6f 66 20 73 69  t .        of si
4f80: 6d 70 6c 65 20 28 75 72 6c 65 6e 63 6f 64 61 62  mple (urlencodab
4f90: 6c 65 29 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  le) key/value pa
4fa0: 69 72 73 2c 20 61 6e 64 20 6e 6f 74 20 6c 61 72  irs, and not lar
4fb0: 67 65 72 20 0a 20 20 20 20 20 20 20 20 64 61 74  ger .        dat
4fc0: 61 20 73 74 72 75 63 74 75 72 65 73 2e 20 41 20  a structures. A 
4fd0: 73 74 72 69 6e 67 20 76 61 6c 75 65 20 69 73 20  string value is 
4fe0: 61 73 73 75 6d 65 64 20 74 6f 20 62 65 20 61 20  assumed to be a 
4ff0: 0a 20 20 20 20 20 20 20 20 77 65 6c 6c 2d 66 6f  .        well-fo
5000: 72 6d 65 64 2c 20 75 72 6c 65 6e 63 6f 64 65 64  rmed, urlencoded
5010: 20 73 65 74 20 6f 66 20 6b 65 79 2f 76 61 6c 75   set of key/valu
5020: 65 20 70 61 69 72 73 20 73 65 70 61 72 61 74 65  e pairs separate
5030: 64 20 62 79 20 0a 20 20 20 20 20 20 20 20 27 26  d by .        '&
5040: 27 20 63 68 61 72 61 63 74 65 72 73 2e 0a 20 20  ' characters..  
5050: 20 20 20 20 20 20 0a 20 20 20 20 20 20 20 20 54        .        T
5060: 68 65 20 6e 65 77 2f 6e 6f 72 6d 61 6c 69 7a 65  he new/normalize
5070: 64 20 55 52 4c 20 69 73 20 72 65 74 75 72 6e 65  d URL is returne
5080: 64 20 28 6f 70 74 20 69 73 20 6e 6f 74 20 6d 6f  d (opt is not mo
5090: 64 69 66 69 65 64 29 2e 20 49 66 20 0a 20 20 20  dified). If .   
50a0: 20 20 20 20 20 6f 70 74 2e 75 72 6c 50 61 72 61       opt.urlPara
50b0: 6d 20 69 73 20 6e 6f 74 20 73 65 74 20 74 68 65  m is not set the
50c0: 6e 20 6f 70 74 2e 75 72 6c 20 69 73 20 72 65 74  n opt.url is ret
50d0: 75 72 6e 65 64 20 28 6f 72 20 61 6e 20 0a 20 20  urned (or an .  
50e0: 20 20 20 20 20 20 65 6d 70 74 79 20 73 74 72 69        empty stri
50f0: 6e 67 20 69 66 20 6f 70 74 2e 75 72 6c 20 69 73  ng if opt.url is
5100: 20 69 74 73 65 6c 66 20 61 20 66 61 6c 73 65 20   itself a false 
5110: 76 61 6c 75 65 29 2e 0a 20 20 20 20 20 20 20 20  value)..        
5120: 0a 20 20 20 20 20 20 20 20 54 4f 44 4f 3a 20 69  .        TODO: i
5130: 66 20 6f 70 74 20 69 73 2d 61 20 4f 62 6a 65 63  f opt is-a Objec
5140: 74 20 61 6e 64 20 61 6e 79 20 6b 65 79 20 70 6f  t and any key po
5150: 69 6e 74 73 20 74 6f 20 61 6e 20 61 72 72 61 79  ints to an array
5160: 2c 20 0a 20 20 20 20 20 20 20 20 62 75 69 6c 64  , .        build
5170: 20 75 70 20 61 20 6c 69 73 74 20 6f 66 20 6b 65   up a list of ke
5180: 79 73 20 69 6e 20 74 68 65 20 66 6f 72 6d 20 22  ys in the form "
5190: 6b 65 79 6e 61 6d 65 5b 5d 22 2e 20 57 65 20 63  keyname[]". We c
51a0: 6f 75 6c 64 20 0a 20 20 20 20 20 20 20 20 61 72  ould .        ar
51b0: 67 75 61 62 6c 79 20 65 6e 63 6f 64 65 20 73 75  guably encode su
51c0: 62 2d 6f 62 6a 65 63 74 73 20 6c 69 6b 65 20 22  b-objects like "
51d0: 6b 65 79 6e 61 6d 65 5b 73 75 62 6b 65 79 5d 3d  keyname[subkey]=
51e0: 2e 2e 2e 22 2c 20 62 75 74 20 0a 20 20 20 20 20  ...", but .     
51f0: 20 20 20 69 20 64 6f 6e 27 74 20 6b 6e 6f 77 20     i don't know 
5200: 69 66 20 74 68 61 74 27 73 20 63 6f 6e 76 65 6e  if that's conven
5210: 74 69 6f 6e 73 2d 63 6f 6d 70 61 74 69 62 6c 65  tions-compatible
5220: 20 77 69 74 68 20 6f 74 68 65 72 20 0a 20 20 20   with other .   
5230: 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 73 2e       frameworks.
5240: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e 6f 72 6d  .    */.    norm
5250: 61 6c 69 7a 65 55 52 4c 3a 20 66 75 6e 63 74 69  alizeURL: functi
5260: 6f 6e 28 6f 70 74 29 20 7b 0a 20 20 20 20 20 20  on(opt) {.      
5270: 20 20 76 61 72 20 75 20 3d 20 6f 70 74 2e 75 72    var u = opt.ur
5280: 6c 20 7c 7c 20 27 27 3b 0a 20 20 20 20 20 20 20  l || '';.       
5290: 20 69 66 28 20 6f 70 74 2e 75 72 6c 50 61 72 61   if( opt.urlPara
52a0: 6d 20 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  m ) {.          
52b0: 20 20 76 61 72 20 61 64 64 51 20 3d 20 28 75 2e    var addQ = (u.
52c0: 69 6e 64 65 78 4f 66 28 27 3f 27 29 20 3e 3d 20  indexOf('?') >= 
52d0: 30 29 20 3f 20 66 61 6c 73 65 20 3a 20 74 72 75  0) ? false : tru
52e0: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 76  e;.            v
52f0: 61 72 20 61 64 64 41 20 3d 20 61 64 64 51 20 3f  ar addA = addQ ?
5300: 20 66 61 6c 73 65 20 3a 20 28 28 75 2e 69 6e 64   false : ((u.ind
5310: 65 78 4f 66 28 27 26 27 29 3e 3d 30 29 20 3f 20  exOf('&')>=0) ? 
5320: 74 72 75 65 20 3a 20 66 61 6c 73 65 29 3b 0a 20  true : false);. 
5330: 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20 74             var t
5340: 61 69 6c 20 3d 20 27 27 3b 0a 20 20 20 20 20 20  ail = '';.      
5350: 20 20 20 20 20 20 69 66 28 20 57 68 41 6a 61 6a        if( WhAjaj
5360: 2e 69 73 4f 62 6a 65 63 74 28 6f 70 74 2e 75 72  .isObject(opt.ur
5370: 6c 50 61 72 61 6d 29 20 29 20 7b 0a 20 20 20 20  lParam) ) {.    
5380: 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20              var 
5390: 6c 69 20 3d 20 5b 5d 2c 20 6b 3b 0a 20 20 20 20  li = [], k;.    
53a0: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 28              for(
53b0: 20 6b 20 69 6e 20 6f 70 74 2e 75 72 6c 50 61 72   k in opt.urlPar
53c0: 61 6d 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  am) {.          
53d0: 20 20 20 20 20 20 20 20 20 20 6c 69 2e 70 75 73            li.pus
53e0: 68 28 20 6b 2b 27 3d 27 2b 65 6e 63 6f 64 65 55  h( k+'='+encodeU
53f0: 52 49 43 6f 6d 70 6f 6e 65 6e 74 28 20 6f 70 74  RIComponent( opt
5400: 2e 75 72 6c 50 61 72 61 6d 5b 6b 5d 20 29 20 29  .urlParam[k] ) )
5410: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
5420: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
5430: 20 20 20 20 74 61 69 6c 20 3d 20 6c 69 2e 6a 6f      tail = li.jo
5440: 69 6e 28 27 26 27 29 3b 0a 20 20 20 20 20 20 20  in('&');.       
5450: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
5460: 20 20 20 65 6c 73 65 20 69 66 28 20 27 73 74 72     else if( 'str
5470: 69 6e 67 27 20 3d 3d 3d 20 74 79 70 65 6f 66 20  ing' === typeof 
5480: 6f 70 74 2e 75 72 6c 50 61 72 61 6d 20 29 20 7b  opt.urlParam ) {
5490: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
54a0: 20 74 61 69 6c 20 3d 20 6f 70 74 2e 75 72 6c 50   tail = opt.urlP
54b0: 61 72 61 6d 3b 0a 20 20 20 20 20 20 20 20 20 20  aram;.          
54c0: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
54d0: 75 20 3d 20 75 20 2b 20 28 61 64 64 51 20 3f 20  u = u + (addQ ? 
54e0: 27 3f 27 20 3a 20 27 27 29 20 2b 20 28 61 64 64  '?' : '') + (add
54f0: 41 20 3f 20 27 26 27 20 3a 20 27 27 29 20 2b 20  A ? '&' : '') + 
5500: 74 61 69 6c 3b 0a 20 20 20 20 20 20 20 20 7d 0a  tail;.        }.
5510: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 75          return u
5520: 3b 0a 20 20 20 20 7d 2c 0a 20 20 20 20 2f 2a 2a  ;.    },.    /**
5530: 0a 20 20 20 20 20 20 20 20 53 68 6f 75 6c 64 20  .        Should 
5540: 62 65 20 63 61 6c 6c 65 64 20 62 79 20 57 68 41  be called by WhA
5550: 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e 73 65  jaj.Connector.se
5560: 6e 64 49 6d 70 6c 28 29 20 0a 20 20 20 20 20 20  ndImpl() .      
5570: 20 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e    implementation
5580: 73 20 61 66 74 65 72 20 61 20 72 65 73 70 6f 6e  s after a respon
5590: 73 65 20 68 61 73 20 63 6f 6d 65 20 62 61 63 6b  se has come back
55a0: 2e 20 54 68 69 73 20 0a 20 20 20 20 20 20 20 20  . This .        
55b0: 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20 63  function takes c
55c0: 61 72 65 20 6f 66 20 6d 6f 73 74 20 6f 66 20 65  are of most of e
55d0: 6e 73 75 72 69 6e 67 20 74 68 61 74 20 66 72 61  nsuring that fra
55e0: 6d 65 77 6f 72 6b 2d 6c 65 76 65 6c 20 0a 20 20  mework-level .  
55f0: 20 20 20 20 20 20 63 6f 6e 76 65 6e 74 69 6f 6e        convention
5600: 73 20 69 6e 76 6f 6c 76 69 6e 67 20 57 68 41 6a  s involving WhAj
5610: 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e 6f 70 74  aj.Connector.opt
5620: 69 6f 6e 73 2e 61 6a 61 78 20 0a 20 20 20 20 20  ions.ajax .     
5630: 20 20 20 70 72 6f 70 65 72 74 69 65 73 20 61 72     properties ar
5640: 65 20 66 6f 6c 6c 6f 77 65 64 2e 0a 20 20 20 20  e followed..    
5650: 20 20 20 20 0a 20 20 20 20 20 20 20 20 54 68 65      .        The
5660: 20 72 65 71 75 65 73 74 20 61 72 67 75 6d 65 6e   request argumen
5670: 74 20 6d 75 73 74 20 62 65 20 74 68 65 20 6f 72  t must be the or
5680: 69 67 69 6e 61 6c 20 72 65 71 75 65 73 74 20 70  iginal request p
5690: 61 73 73 65 64 20 74 6f 20 0a 20 20 20 20 20 20  assed to .      
56a0: 20 20 74 68 65 20 73 65 6e 64 49 6d 70 6c 28 29    the sendImpl()
56b0: 20 66 75 6e 63 74 69 6f 6e 2e 20 49 74 20 6d 61   function. It ma
56c0: 79 20 6c 65 67 61 6c 6c 79 20 62 65 20 6e 75 6c  y legally be nul
56d0: 6c 20 66 6f 72 20 47 45 54 20 72 65 71 75 65 73  l for GET reques
56e0: 74 73 2e 0a 20 20 20 20 20 20 20 20 0a 20 20 20  ts..        .   
56f0: 20 20 20 20 20 54 68 65 20 6f 70 74 20 6f 62 6a       The opt obj
5700: 65 63 74 20 73 68 6f 75 6c 64 20 62 65 20 74 68  ect should be th
5710: 65 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 41 4a 41  e normalized AJA
5720: 58 20 6f 70 74 69 6f 6e 73 20 75 73 65 64 20 0a  X options used .
5730: 20 20 20 20 20 20 20 20 66 6f 72 20 74 68 65 20          for the 
5740: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 20 20 20 20  connection..    
5750: 20 20 20 20 0a 20 20 20 20 20 20 20 20 54 68 65      .        The
5760: 20 72 65 73 70 20 61 72 67 75 6d 65 6e 74 20 6d   resp argument m
5770: 61 79 20 62 65 20 65 69 74 68 65 72 20 61 20 70  ay be either a p
5780: 6c 61 69 6e 20 4f 62 6a 65 63 74 20 6f 72 20 61  lain Object or a
5790: 20 73 74 72 69 6e 67 20 0a 20 20 20 20 20 20 20   string .       
57a0: 20 28 69 6e 20 77 68 69 63 68 20 63 61 73 65 20   (in which case 
57b0: 69 74 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f  it is assumed to
57c0: 20 62 65 20 4a 53 4f 4e 29 2e 0a 0a 20 20 20 20   be JSON)...    
57d0: 20 20 20 20 54 68 65 20 27 74 68 69 73 27 20 6f      The 'this' o
57e0: 62 6a 65 63 74 20 66 6f 72 20 74 68 69 73 20 63  bject for this c
57f0: 61 6c 6c 20 4d 55 53 54 20 62 65 20 61 20 57 68  all MUST be a Wh
5800: 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72 0a 20  Ajaj.Connector. 
5810: 20 20 20 20 20 20 20 69 6e 73 74 61 6e 63 65 20         instance 
5820: 69 6e 20 6f 72 64 65 72 20 66 6f 72 20 63 61 6c  in order for cal
5830: 6c 62 61 63 6b 20 70 72 6f 63 65 73 73 69 6e 67  lback processing
5840: 20 74 6f 20 77 6f 72 6b 20 70 72 6f 70 65 72 6c   to work properl
5850: 79 2e 0a 20 20 20 20 20 20 20 20 0a 20 20 20 20  y..        .    
5860: 20 20 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f      This functio
5870: 6e 20 74 61 6b 65 73 20 63 61 72 65 20 6f 66 20  n takes care of 
5880: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 20  the following:. 
5890: 20 20 20 20 20 20 20 0a 20 20 20 20 20 20 20 20         .        
58a0: 2d 20 43 61 6c 6c 69 6e 67 20 6f 70 74 2e 61 66  - Calling opt.af
58b0: 74 65 72 53 65 6e 64 28 29 0a 20 20 20 20 20 20  terSend().      
58c0: 20 20 0a 20 20 20 20 20 20 20 20 2d 20 49 66 20    .        - If 
58d0: 72 65 73 70 20 69 73 20 61 20 73 74 72 69 6e 67  resp is a string
58e0: 2c 20 64 65 2d 4a 53 4f 4e 2d 69 7a 69 6e 67 20  , de-JSON-izing 
58f0: 69 74 20 74 6f 20 61 6e 20 6f 62 6a 65 63 74 2e  it to an object.
5900: 0a 20 20 20 20 20 20 20 20 0a 20 20 20 20 20 20  .        .      
5910: 20 20 2d 20 43 61 6c 6c 69 6e 67 20 6f 70 74 2e    - Calling opt.
5920: 6f 6e 52 65 73 70 6f 6e 73 65 28 29 0a 20 20 20  onResponse().   
5930: 20 20 20 20 20 0a 20 20 20 20 20 20 20 20 2d 20       .        - 
5940: 43 61 6c 6c 69 6e 67 20 6f 70 74 2e 6f 6e 45 72  Calling opt.onEr
5950: 72 6f 72 28 29 20 69 6e 20 73 65 76 65 72 61 6c  ror() in several
5960: 20 63 6f 6d 6d 6f 6e 20 28 70 6f 74 65 6e 74 69   common (potenti
5970: 61 6c 29 20 65 72 72 6f 72 20 0a 20 20 20 20 20  al) error .     
5980: 20 20 20 63 61 73 65 73 2e 0a 0a 20 20 20 20 20     cases...     
5990: 20 20 20 2d 20 49 66 20 72 65 73 70 20 69 73 2d     - If resp is-
59a0: 61 20 53 74 72 69 6e 67 20 61 6e 64 20 6f 70 74  a String and opt
59b0: 2e 6a 73 6f 6e 70 20 74 68 65 6e 20 72 65 73 70  .jsonp then resp
59c0: 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 62   is assumed to b
59d0: 65 0a 20 20 20 20 20 20 20 20 61 20 4a 53 4f 4e  e.        a JSON
59e0: 50 2d 66 6f 72 6d 20 63 6f 6e 73 74 72 75 63 74  P-form construct
59f0: 20 61 6e 64 20 69 73 20 65 76 61 6c 28 29 64 20   and is eval()d 
5a00: 42 45 46 4f 52 45 20 6f 70 74 2e 6f 6e 52 65 73  BEFORE opt.onRes
5a10: 70 6f 6e 73 65 28 29 0a 20 20 20 20 20 20 20 20  ponse().        
5a20: 69 73 20 63 61 6c 6c 65 64 2e 20 49 74 20 69 73  is called. It is
5a30: 20 61 72 67 75 61 62 6c 65 20 74 6f 20 65 76 61   arguable to eva
5a40: 6c 28 29 20 69 74 20 66 69 72 73 74 2c 20 62 75  l() it first, bu
5a50: 74 20 74 68 65 20 6c 6f 67 69 63 0a 20 20 20 20  t the logic.    
5a60: 20 20 20 20 69 6e 74 65 67 72 61 74 65 73 20 62      integrates b
5a70: 65 74 74 65 72 20 77 69 74 68 20 74 68 65 20 6e  etter with the n
5a80: 6f 6e 2d 6a 73 6f 6e 70 20 68 61 6e 64 6c 65 72  on-jsonp handler
5a90: 2e 0a 0a 20 20 20 20 20 20 20 20 54 68 65 20 73  ...        The s
5aa0: 65 6e 64 49 6d 70 6c 28 29 20 73 68 6f 75 6c 64  endImpl() should
5ab0: 20 72 65 74 75 72 6e 20 69 6d 6d 65 64 69 61 74   return immediat
5ac0: 65 6c 79 20 61 66 74 65 72 20 63 61 6c 6c 69 6e  ely after callin
5ad0: 67 20 74 68 69 73 2e 0a 20 20 20 20 20 20 20 20  g this..        
5ae0: 0a 20 20 20 20 20 20 20 20 54 68 65 20 73 65 6e  .        The sen
5af0: 64 49 6d 70 6c 28 29 20 6d 75 73 74 20 63 61 6c  dImpl() must cal
5b00: 6c 20 6f 6e 6c 79 20 6f 6e 65 20 6f 66 20 6f 6e  l only one of on
5b10: 53 65 6e 64 53 75 63 63 65 73 73 28 29 20 6f 72  SendSuccess() or
5b20: 20 0a 20 20 20 20 20 20 20 20 6f 6e 53 65 6e 64   .        onSend
5b30: 45 72 72 6f 72 28 29 2e 20 49 74 20 6d 75 73 74  Error(). It must
5b40: 20 63 61 6c 6c 20 6f 6e 65 20 6f 66 20 74 68 65   call one of the
5b50: 6d 20 6f 72 20 69 74 20 6d 75 73 74 20 69 6d 70  m or it must imp
5b60: 6c 65 6d 65 6e 74 20 0a 20 20 20 20 20 20 20 20  lement .        
5b70: 69 74 73 20 6f 77 6e 20 72 65 73 70 6f 6e 73 65  its own response
5b80: 2f 65 72 72 6f 72 20 68 61 6e 64 6c 69 6e 67 2c  /error handling,
5b90: 20 77 68 69 63 68 20 69 73 20 6e 6f 74 20 72 65   which is not re
5ba0: 63 6f 6d 6d 65 6e 64 65 64 20 0a 20 20 20 20 20  commended .     
5bb0: 20 20 20 62 65 63 61 75 73 65 20 67 65 74 74 69     because getti
5bc0: 6e 67 20 74 68 65 20 64 6f 63 75 6d 65 6e 74 65  ng the documente
5bd0: 64 20 73 65 6d 61 6e 74 69 63 73 20 6f 66 20 74  d semantics of t
5be0: 68 65 20 0a 20 20 20 20 20 20 20 20 6f 6e 45 72  he .        onEr
5bf0: 72 6f 72 2f 6f 6e 52 65 73 70 6f 6e 73 65 2f 61  ror/onResponse/a
5c00: 66 74 65 72 53 65 6e 64 20 68 61 6e 64 6c 69 6e  fterSend handlin
5c10: 67 20 63 6f 72 72 65 63 74 20 63 61 6e 20 62 65  g correct can be
5c20: 20 74 65 64 69 6f 75 73 2e 0a 20 20 20 20 2a 2f   tedious..    */
5c30: 0a 20 20 20 20 6f 6e 53 65 6e 64 53 75 63 63 65  .    onSendSucce
5c40: 73 73 3a 66 75 6e 63 74 69 6f 6e 28 72 65 71 75  ss:function(requ
5c50: 65 73 74 2c 72 65 73 70 2c 6f 70 74 29 20 7b 0a  est,resp,opt) {.
5c60: 20 20 20 20 20 20 20 20 76 61 72 20 63 62 20 3d          var cb =
5c70: 20 74 68 69 73 2e 63 61 6c 6c 62 61 63 6b 73 20   this.callbacks 
5c80: 7c 7c 20 7b 7d 3b 0a 20 20 20 20 20 20 20 20 69  || {};.        i
5c90: 66 28 20 57 68 41 6a 61 6a 2e 69 73 46 75 6e 63  f( WhAjaj.isFunc
5ca0: 74 69 6f 6e 28 63 62 2e 61 66 74 65 72 53 65 6e  tion(cb.afterSen
5cb0: 64 29 20 29 20 7b 0a 20 20 20 20 20 20 20 20 20  d) ) {.         
5cc0: 20 20 20 74 72 79 20 7b 63 62 2e 61 66 74 65 72     try {cb.after
5cd0: 53 65 6e 64 28 20 72 65 71 75 65 73 74 2c 20 6f  Send( request, o
5ce0: 70 74 20 29 3b 7d 0a 20 20 20 20 20 20 20 20 20  pt );}.         
5cf0: 20 20 20 63 61 74 63 68 28 65 29 7b 7d 0a 20 20     catch(e){}.  
5d00: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5d10: 69 66 28 20 57 68 41 6a 61 6a 2e 69 73 46 75 6e  if( WhAjaj.isFun
5d20: 63 74 69 6f 6e 28 6f 70 74 2e 61 66 74 65 72 53  ction(opt.afterS
5d30: 65 6e 64 29 20 29 20 7b 0a 20 20 20 20 20 20 20  end) ) {.       
5d40: 20 20 20 20 20 74 72 79 20 7b 6f 70 74 2e 61 66       try {opt.af
5d50: 74 65 72 53 65 6e 64 28 20 72 65 71 75 65 73 74  terSend( request
5d60: 2c 20 6f 70 74 20 29 3b 7d 0a 20 20 20 20 20 20  , opt );}.      
5d70: 20 20 20 20 20 20 63 61 74 63 68 28 65 29 7b 7d        catch(e){}
5d80: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
5d90: 20 20 20 66 75 6e 63 74 69 6f 6e 20 64 6f 45 72     function doEr
5da0: 72 28 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  r(){.           
5db0: 20 69 66 28 20 57 68 41 6a 61 6a 2e 69 73 46 75   if( WhAjaj.isFu
5dc0: 6e 63 74 69 6f 6e 28 63 62 2e 6f 6e 45 72 72 6f  nction(cb.onErro
5dd0: 72 29 20 29 20 7b 0a 20 20 20 20 20 20 20 20 20  r) ) {.         
5de0: 20 20 20 20 20 20 20 74 72 79 20 7b 63 62 2e 6f         try {cb.o
5df0: 6e 45 72 72 6f 72 28 20 72 65 71 75 65 73 74 2c  nError( request,
5e00: 20 6f 70 74 20 29 3b 7d 0a 20 20 20 20 20 20 20   opt );}.       
5e10: 20 20 20 20 20 20 20 20 20 63 61 74 63 68 28 65           catch(e
5e20: 29 7b 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ){}.            
5e30: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  }.            if
5e40: 28 20 57 68 41 6a 61 6a 2e 69 73 46 75 6e 63 74  ( WhAjaj.isFunct
5e50: 69 6f 6e 28 6f 70 74 2e 6f 6e 45 72 72 6f 72 29  ion(opt.onError)
5e60: 20 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20   ) {.           
5e70: 20 20 20 20 20 74 72 79 20 7b 6f 70 74 2e 6f 6e       try {opt.on
5e80: 45 72 72 6f 72 28 20 72 65 71 75 65 73 74 2c 20  Error( request, 
5e90: 6f 70 74 20 29 3b 7d 0a 20 20 20 20 20 20 20 20  opt );}.        
5ea0: 20 20 20 20 20 20 20 20 63 61 74 63 68 28 65 29          catch(e)
5eb0: 7b 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  {}.            }
5ec0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
5ed0: 20 20 20 69 66 28 20 21 20 72 65 73 70 20 29 20     if( ! resp ) 
5ee0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 70  {.            op
5ef0: 74 2e 65 72 72 6f 72 4d 65 73 73 61 67 65 20 3d  t.errorMessage =
5f00: 20 22 53 65 6e 64 69 6e 67 20 6f 66 20 72 65 71   "Sending of req
5f10: 75 65 73 74 20 73 75 63 63 65 65 64 65 64 20 62  uest succeeded b
5f20: 75 74 20 72 65 74 75 72 6e 65 64 20 6e 6f 20 64  ut returned no d
5f30: 61 74 61 21 22 3b 0a 20 20 20 20 20 20 20 20 20  ata!";.         
5f40: 20 20 20 64 6f 45 72 72 28 29 3b 0a 20 20 20 20     doErr();.    
5f50: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
5f60: 61 6c 73 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a  alse;.        }.
5f70: 0a 20 20 20 20 20 20 20 20 69 66 28 20 27 73 74  .        if( 'st
5f80: 72 69 6e 67 27 20 3d 3d 3d 20 74 79 70 65 6f 66  ring' === typeof
5f90: 20 72 65 73 70 20 29 20 7b 0a 20 20 20 20 20 20   resp ) {.      
5fa0: 20 20 20 20 20 20 74 72 79 20 7b 0a 20 20 20 20        try {.    
5fb0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 70              resp
5fc0: 20 3d 20 6f 70 74 2e 6a 73 6f 6e 70 20 3f 20 65   = opt.jsonp ? e
5fd0: 76 61 6c 28 72 65 73 70 29 20 3a 20 4a 53 4f 4e  val(resp) : JSON
5fe0: 2e 70 61 72 73 65 28 72 65 73 70 29 3b 0a 20 20  .parse(resp);.  
5ff0: 20 20 20 20 20 20 20 20 20 20 7d 20 63 61 74 63            } catc
6000: 68 28 65 29 20 7b 0a 20 20 20 20 20 20 20 20 20  h(e) {.         
6010: 20 20 20 20 20 20 20 6f 70 74 2e 65 72 72 6f 72         opt.error
6020: 4d 65 73 73 61 67 65 20 3d 20 65 2e 74 6f 53 74  Message = e.toSt
6030: 72 69 6e 67 28 29 3b 0a 20 20 20 20 20 20 20 20  ring();.        
6040: 20 20 20 20 20 20 20 20 64 6f 45 72 72 28 29 3b          doErr();
6050: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6060: 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20   return;.       
6070: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
6080: 0a 20 20 20 20 20 20 20 20 74 72 79 20 7b 0a 20  .        try {. 
6090: 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 57             if( W
60a0: 68 41 6a 61 6a 2e 69 73 46 75 6e 63 74 69 6f 6e  hAjaj.isFunction
60b0: 28 20 63 62 2e 6f 6e 52 65 73 70 6f 6e 73 65 20  ( cb.onResponse 
60c0: 20 29 20 29 20 7b 0a 20 20 20 20 20 20 20 20 20   ) ) {.         
60d0: 20 20 20 20 20 20 20 63 62 2e 6f 6e 52 65 73 70         cb.onResp
60e0: 6f 6e 73 65 28 20 72 65 73 70 2c 20 72 65 71 75  onse( resp, requ
60f0: 65 73 74 2c 20 6f 70 74 20 29 3b 0a 20 20 20 20  est, opt );.    
6100: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
6110: 20 20 20 20 20 20 69 66 28 20 57 68 41 6a 61 6a        if( WhAjaj
6120: 2e 69 73 46 75 6e 63 74 69 6f 6e 28 20 6f 70 74  .isFunction( opt
6130: 2e 6f 6e 52 65 73 70 6f 6e 73 65 20 20 29 20 29  .onResponse  ) )
6140: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
6150: 20 20 20 6f 70 74 2e 6f 6e 52 65 73 70 6f 6e 73     opt.onRespons
6160: 65 28 20 72 65 73 70 2c 20 72 65 71 75 65 73 74  e( resp, request
6170: 2c 20 6f 70 74 20 29 3b 0a 20 20 20 20 20 20 20  , opt );.       
6180: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
6190: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a     return true;.
61a0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
61b0: 20 20 63 61 74 63 68 28 65 29 20 7b 0a 20 20 20    catch(e) {.   
61c0: 20 20 20 20 20 20 20 20 20 6f 70 74 2e 65 72 72           opt.err
61d0: 6f 72 4d 65 73 73 61 67 65 20 3d 20 22 45 78 63  orMessage = "Exc
61e0: 65 70 74 69 6f 6e 20 77 68 69 6c 65 20 68 61 6e  eption while han
61f0: 64 6c 69 6e 67 20 69 6e 62 6f 75 6e 64 20 4a 53  dling inbound JS
6200: 4f 4e 20 72 65 73 70 6f 6e 73 65 3a 5c 6e 22 0a  ON response:\n".
6210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6220: 2b 20 65 0a 20 20 20 20 20 20 20 20 20 20 20 20  + e.            
6230: 20 20 20 20 2b 22 5c 6e 4f 72 69 67 69 6e 61 6c      +"\nOriginal
6240: 20 72 65 73 70 6f 6e 73 65 20 64 61 74 61 3a 5c   response data:\
6250: 6e 22 2b 4a 53 4f 4e 2e 73 74 72 69 6e 67 69 66  n"+JSON.stringif
6260: 79 28 72 65 73 70 2c 30 2c 32 29 0a 20 20 20 20  y(resp,0,2).    
6270: 20 20 20 20 20 20 20 20 20 20 20 20 3b 0a 20 20              ;.  
6280: 20 20 20 20 20 20 20 20 20 20 3b 0a 20 20 20 20            ;.    
6290: 20 20 20 20 20 20 20 20 64 6f 45 72 72 28 29 3b          doErr();
62a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
62b0: 75 72 6e 20 66 61 6c 73 65 3b 0a 20 20 20 20 20  urn false;.     
62c0: 20 20 20 7d 0a 20 20 20 20 7d 2c 0a 20 20 20 2f     }.    },.   /
62d0: 2a 2a 0a 20 20 20 20 20 20 20 20 53 68 6f 75 6c  **.        Shoul
62e0: 64 20 62 65 20 63 61 6c 6c 65 64 20 62 79 20 73  d be called by s
62f0: 65 6e 64 49 6d 70 6c 28 29 20 69 6d 70 6c 65 6d  endImpl() implem
6300: 65 6e 74 61 74 69 6f 6e 73 20 61 66 74 65 72 20  entations after 
6310: 61 20 72 65 73 70 6f 6e 73 65 0a 20 20 20 20 20  a response.     
6320: 20 20 20 68 61 73 20 66 61 69 6c 65 64 20 74 6f     has failed to
6330: 20 63 6f 6e 6e 65 63 74 20 28 65 2e 67 2e 20 63   connect (e.g. c
6340: 6f 75 6c 64 20 6e 6f 74 20 72 65 73 6f 6c 76 65  ould not resolve
6350: 20 68 6f 73 74 20 6f 72 20 74 69 6d 65 6f 75 74   host or timeout
6360: 0a 20 20 20 20 20 20 20 20 72 65 61 63 68 65 64  .        reached
6370: 29 2e 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  ). This function
6380: 20 74 61 6b 65 73 20 63 61 72 65 20 6f 66 20 6d   takes care of m
6390: 6f 73 74 20 6f 66 20 65 6e 73 75 72 69 6e 67 20  ost of ensuring 
63a0: 74 68 61 74 0a 20 20 20 20 20 20 20 20 66 72 61  that.        fra
63b0: 6d 65 77 6f 72 6b 2d 6c 65 76 65 6c 20 63 6f 6e  mework-level con
63c0: 76 65 6e 74 69 6f 6e 73 20 69 6e 76 6f 6c 76 69  ventions involvi
63d0: 6e 67 20 57 68 41 6a 61 6a 2e 43 6f 6e 6e 65 63  ng WhAjaj.Connec
63e0: 74 6f 72 2e 6f 70 74 69 6f 6e 73 2e 61 6a 61 78  tor.options.ajax
63f0: 0a 20 20 20 20 20 20 20 20 70 72 6f 70 65 72 74  .        propert
6400: 69 65 73 20 61 72 65 20 66 6f 6c 6c 6f 77 65 64  ies are followed
6410: 2e 0a 20 20 20 20 20 20 20 20 0a 20 20 20 20 20  ..        .     
6420: 20 20 20 54 68 65 20 72 65 71 75 65 73 74 20 61     The request a
6430: 72 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65 20  rgument must be 
6440: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 72 65 71  the original req
6450: 75 65 73 74 20 70 61 73 73 65 64 20 74 6f 20 0a  uest passed to .
6460: 20 20 20 20 20 20 20 20 74 68 65 20 73 65 6e 64          the send
6470: 49 6d 70 6c 28 29 20 66 75 6e 63 74 69 6f 6e 2e  Impl() function.
6480: 20 49 74 20 6d 61 79 20 6c 65 67 61 6c 6c 79 20   It may legally 
6490: 62 65 20 6e 75 6c 6c 20 66 6f 72 20 47 45 54 20  be null for GET 
64a0: 0a 20 20 20 20 20 20 20 20 72 65 71 75 65 73 74  .        request
64b0: 73 2e 0a 0a 20 20 20 20 20 20 20 20 54 68 65 20  s...        The 
64c0: 27 74 68 69 73 27 20 6f 62 6a 65 63 74 20 66 6f  'this' object fo
64d0: 72 20 74 68 69 73 20 63 61 6c 6c 20 4d 55 53 54  r this call MUST
64e0: 20 62 65 20 61 20 57 68 41 6a 61 6a 2e 43 6f 6e   be a WhAjaj.Con
64f0: 6e 65 63 74 6f 72 0a 20 20 20 20 20 20 20 20 69  nector.        i
6500: 6e 73 74 61 6e 63 65 20 69 6e 20 6f 72 64 65 72  nstance in order
6510: 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 70 72   for callback pr
6520: 6f 63 65 73 73 69 6e 67 20 74 6f 20 77 6f 72 6b  ocessing to work
6530: 20 70 72 6f 70 65 72 6c 79 2e 0a 20 20 20 20 20   properly..     
6540: 20 20 20 0a 20 20 20 20 20 20 20 20 54 68 65 20     .        The 
6550: 6f 70 74 20 6f 62 6a 65 63 74 20 73 68 6f 75 6c  opt object shoul
6560: 64 20 62 65 20 74 68 65 20 6e 6f 72 6d 61 6c 69  d be the normali
6570: 7a 65 64 20 41 4a 41 58 20 6f 70 74 69 6f 6e 73  zed AJAX options
6580: 20 75 73 65 64 20 0a 20 20 20 20 20 20 20 20 66   used .        f
6590: 6f 72 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  or the connectio
65a0: 6e 2e 20 42 79 20 63 6f 6e 76 65 6e 74 69 6f 6e  n. By convention
65b0: 2c 20 74 68 65 20 63 61 6c 6c 65 72 20 6f 66 20  , the caller of 
65c0: 74 68 69 73 20 0a 20 20 20 20 20 20 20 20 66 75  this .        fu
65d0: 6e 63 74 69 6f 6e 20 22 73 68 6f 75 6c 64 22 20  nction "should" 
65e0: 73 65 74 20 6f 70 74 2e 65 72 72 6f 72 4d 65 73  set opt.errorMes
65f0: 73 61 67 65 20 74 6f 20 63 6f 6e 74 61 69 6e 20  sage to contain 
6600: 61 20 0a 20 20 20 20 20 20 20 20 68 75 6d 61 6e  a .        human
6610: 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63 72 69  -readable descri
6620: 70 74 69 6f 6e 20 6f 66 20 74 68 65 20 65 72 72  ption of the err
6630: 6f 72 2e 0a 20 20 20 20 20 20 20 20 0a 20 20 20  or..        .   
6640: 20 20 20 20 20 54 68 65 20 73 65 6e 64 49 6d 70       The sendImp
6650: 6c 28 29 20 73 68 6f 75 6c 64 20 72 65 74 75 72  l() should retur
6660: 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61 66  n immediately af
6670: 74 65 72 20 63 61 6c 6c 69 6e 67 20 74 68 69 73  ter calling this
6680: 2e 20 54 68 65 0a 20 20 20 20 20 20 20 20 72 65  . The.        re
6690: 74 75 72 6e 20 76 61 6c 75 65 20 66 72 6f 6d 20  turn value from 
66a0: 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  this function is
66b0: 20 75 6e 73 70 65 63 69 66 69 65 64 2e 0a 20 20   unspecified..  
66c0: 20 20 2a 2f 0a 20 20 20 20 6f 6e 53 65 6e 64 45    */.    onSendE
66d0: 72 72 6f 72 3a 20 66 75 6e 63 74 69 6f 6e 28 72  rror: function(r
66e0: 65 71 75 65 73 74 2c 6f 70 74 29 20 7b 0a 20 20  equest,opt) {.  
66f0: 20 20 20 20 20 20 76 61 72 20 63 62 20 3d 20 74        var cb = t
6700: 68 69 73 2e 63 61 6c 6c 62 61 63 6b 73 20 7c 7c  his.callbacks ||
6710: 20 7b 7d 3b 0a 20 20 20 20 20 20 20 20 69 66 28   {};.        if(
6720: 20 57 68 41 6a 61 6a 2e 69 73 46 75 6e 63 74 69   WhAjaj.isFuncti
6730: 6f 6e 28 63 62 2e 61 66 74 65 72 53 65 6e 64 29  on(cb.afterSend)
6740: 20 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20   ) {.           
6750: 20 74 72 79 20 7b 63 62 2e 61 66 74 65 72 53 65   try {cb.afterSe
6760: 6e 64 28 20 72 65 71 75 65 73 74 2c 20 6f 70 74  nd( request, opt
6770: 20 29 3b 7d 0a 20 20 20 20 20 20 20 20 20 20 20   );}.           
6780: 20 63 61 74 63 68 28 65 29 7b 7d 0a 20 20 20 20   catch(e){}.    
6790: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
67a0: 28 20 57 68 41 6a 61 6a 2e 69 73 46 75 6e 63 74  ( WhAjaj.isFunct
67b0: 69 6f 6e 28 6f 70 74 2e 61 66 74 65 72 53 65 6e  ion(opt.afterSen
67c0: 64 29 20 29 20 7b 0a 20 20 20 20 20 20 20 20 20  d) ) {.         
67d0: 20 20 20 74 72 79 20 7b 6f 70 74 2e 61 66 74 65     try {opt.afte
67e0: 72 53 65 6e 64 28 20 72 65 71 75 65 73 74 2c 20  rSend( request, 
67f0: 6f 70 74 20 29 3b 7d 0a 20 20 20 20 20 20 20 20  opt );}.        
6800: 20 20 20 20 63 61 74 63 68 28 65 29 7b 7d 0a 20      catch(e){}. 
6810: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
6820: 20 69 66 28 20 57 68 41 6a 61 6a 2e 69 73 46 75   if( WhAjaj.isFu
6830: 6e 63 74 69 6f 6e 28 20 63 62 2e 6f 6e 45 72 72  nction( cb.onErr
6840: 6f 72 20 29 20 29 20 7b 0a 20 20 20 20 20 20 20  or ) ) {.       
6850: 20 20 20 20 20 74 72 79 20 7b 63 62 2e 6f 6e 45       try {cb.onE
6860: 72 72 6f 72 28 20 72 65 71 75 65 73 74 2c 20 6f  rror( request, o
6870: 70 74 20 29 3b 7d 0a 20 20 20 20 20 20 20 20 20  pt );}.         
6880: 20 20 20 63 61 74 63 68 28 65 29 20 7b 2f 2a 69     catch(e) {/*i
6890: 67 6e 6f 72 65 2a 2f 7d 0a 20 20 20 20 20 20 20  gnore*/}.       
68a0: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 57   }.        if( W
68b0: 68 41 6a 61 6a 2e 69 73 46 75 6e 63 74 69 6f 6e  hAjaj.isFunction
68c0: 28 20 6f 70 74 2e 6f 6e 45 72 72 6f 72 20 29 20  ( opt.onError ) 
68d0: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
68e0: 74 72 79 20 7b 6f 70 74 2e 6f 6e 45 72 72 6f 72  try {opt.onError
68f0: 28 20 72 65 71 75 65 73 74 2c 20 6f 70 74 20 29  ( request, opt )
6900: 3b 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  ;}.            c
6910: 61 74 63 68 28 65 29 20 7b 2f 2a 69 67 6e 6f 72  atch(e) {/*ignor
6920: 65 2a 2f 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20  e*/}.        }. 
6930: 20 20 20 7d 0a 7d 3b 0a 0a 2f 2a 2a 0a 20 20 20     }.};../**.   
6940: 20 57 68 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f   WhAjaj.Connecto
6950: 72 2e 73 65 6e 64 49 6d 70 6c 73 20 68 6f 6c 64  r.sendImpls hold
6960: 73 20 73 65 76 65 72 61 6c 20 63 6f 6e 63 72 65  s several concre
6970: 74 65 20 0a 20 20 20 20 69 6d 70 6c 65 6d 65 6e  te .    implemen
6980: 74 61 74 69 6f 6e 73 20 6f 66 20 57 68 41 6a 61  tations of WhAja
6990: 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e 70 72 6f 74  j.Connector.prot
69a0: 6f 74 79 70 65 2e 73 65 6e 64 49 6d 70 6c 28 29  otype.sendImpl()
69b0: 2e 20 54 6f 20 75 73 65 20 0a 20 20 20 20 61 20  . To use .    a 
69c0: 73 70 65 63 69 66 69 63 20 69 6d 70 6c 65 6d 65  specific impleme
69d0: 6e 74 61 74 69 6f 6e 20 62 79 20 64 65 66 61 75  ntation by defau
69e0: 6c 74 20 61 73 73 69 67 6e 20 0a 20 20 20 20 57  lt assign .    W
69f0: 68 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e  hAjaj.Connector.
6a00: 70 72 6f 74 6f 74 79 70 65 2e 73 65 6e 64 49 6d  prototype.sendIm
6a10: 70 6c 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65  pl to one of the
6a20: 73 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 20 20  se functions..  
6a30: 20 20 0a 20 20 20 20 54 68 65 20 66 75 6e 63 74    .    The funct
6a40: 69 6f 6e 73 20 64 65 66 69 6e 65 64 20 68 65 72  ions defined her
6a50: 65 20 72 65 71 75 69 72 65 20 74 68 61 74 20 74  e require that t
6a60: 68 65 20 27 74 68 69 73 27 20 6f 62 6a 65 63 74  he 'this' object
6a70: 20 62 65 2d 61 0a 20 20 20 20 57 68 41 6a 61 6a   be-a.    WhAjaj
6a80: 2e 43 6f 6e 6e 65 63 74 6f 72 20 69 6e 73 74 61  .Connector insta
6a90: 6e 63 65 2e 0a 20 20 20 20 0a 20 20 20 20 48 69  nce..    .    Hi
6aa0: 73 74 6f 72 69 63 61 6c 20 6e 6f 74 65 73 3a 0a  storical notes:.
6ab0: 0a 20 20 20 20 61 29 20 57 65 20 6f 6e 63 65 20  .    a) We once 
6ac0: 68 61 64 20 61 6e 20 69 6d 70 6c 65 6d 65 6e 74  had an implement
6ad0: 61 74 69 6f 6e 20 62 61 73 65 64 20 6f 6e 20 50  ation based on P
6ae0: 72 6f 74 6f 74 79 70 65 2c 20 62 75 74 20 74 68  rototype, but th
6af0: 61 74 20 0a 20 20 20 20 6c 69 62 72 61 72 79 20  at .    library 
6b00: 6a 75 73 74 20 70 69 73 73 65 73 20 6d 65 20 6f  just pisses me o
6b10: 66 66 20 28 74 68 65 79 20 63 68 61 6e 67 65 20  ff (they change 
6b20: 62 61 73 65 2d 6d 6f 73 74 20 74 79 70 65 73 27  base-most types'
6b30: 20 0a 20 20 20 20 70 72 6f 74 6f 74 79 70 65 73   .    prototypes
6b40: 2c 20 69 6e 74 72 6f 64 75 63 69 6e 67 20 73 69  , introducing si
6b50: 64 65 2d 65 66 66 65 63 74 73 20 69 6e 20 63 6c  de-effects in cl
6b60: 69 65 6e 74 20 63 6f 64 65 20 77 68 69 63 68 20  ient code which 
6b70: 0a 20 20 20 20 64 6f 65 73 6e 27 74 20 65 76 65  .    doesn't eve
6b80: 6e 20 75 73 65 20 50 72 6f 74 6f 74 79 70 65 29  n use Prototype)
6b90: 2e 20 54 68 65 20 50 72 6f 74 6f 74 79 70 65 20  . The Prototype 
6ba0: 76 65 72 73 69 6f 6e 20 61 74 20 74 68 65 20 74  version at the t
6bb0: 69 6d 65 20 0a 20 20 20 20 68 61 64 20 61 20 73  ime .    had a s
6bc0: 65 72 69 6f 75 73 20 74 6f 4a 53 4f 4e 28 29 20  erious toJSON() 
6bd0: 62 75 67 20 77 68 69 63 68 20 63 61 75 73 65 64  bug which caused
6be0: 20 65 6d 70 74 79 20 61 72 72 61 79 73 20 74 6f   empty arrays to
6bf0: 20 0a 20 20 20 20 73 65 72 69 61 6c 69 7a 65 20   .    serialize 
6c00: 61 73 20 74 68 65 20 73 74 72 69 6e 67 20 22 5b  as the string "[
6c10: 5d 22 2c 20 77 68 69 63 68 20 62 72 6f 6b 65 20  ]", which broke 
6c20: 61 20 62 75 6e 63 68 20 6f 66 20 6d 79 20 63 6f  a bunch of my co
6c30: 64 65 2e 20 0a 20 20 20 20 28 54 68 61 74 20 68  de. .    (That h
6c40: 61 73 20 62 65 65 6e 20 66 69 78 65 64 20 69 6e  as been fixed in
6c50: 20 74 68 65 20 6d 65 61 6e 20 74 69 6d 65 2c 20   the mean time, 
6c60: 62 75 74 20 69 20 64 6f 6e 27 74 20 75 73 65 20  but i don't use 
6c70: 0a 20 20 20 20 50 72 6f 74 6f 74 79 70 65 2e 29  .    Prototype.)
6c80: 0a 20 20 20 20 0a 20 20 20 20 62 29 20 57 65 20  .    .    b) We 
6c90: 6f 6e 63 65 20 68 61 64 20 61 6e 20 69 6d 70 6c  once had an impl
6ca0: 65 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 74  ementation for t
6cb0: 68 65 20 64 6f 6a 6f 20 6c 69 62 72 61 72 79 2c  he dojo library,
6cc0: 20 0a 20 20 20 20 0a 20 20 20 20 49 66 2f 77 68   .    .    If/wh
6cd0: 65 6e 20 74 68 65 20 74 69 6d 65 20 63 6f 6d 65  en the time come
6ce0: 73 20 74 6f 20 61 64 64 20 50 72 6f 74 6f 74 79  s to add Prototy
6cf0: 70 65 2f 64 6f 6a 6f 20 73 75 70 70 6f 72 74 2c  pe/dojo support,
6d00: 20 77 65 20 73 69 6d 70 6c 79 0a 20 20 20 20 6e   we simply.    n
6d10: 65 65 64 20 74 6f 20 70 6f 72 74 3a 0a 20 20 20  eed to port:.   
6d20: 20 0a 20 20 20 20 68 74 74 70 3a 2f 2f 63 6f 64   .    http://cod
6d30: 65 2e 67 6f 6f 67 6c 65 2e 63 6f 6d 2f 70 2f 6a  e.google.com/p/j
6d40: 73 6f 6e 6d 65 73 73 61 67 65 2f 73 6f 75 72 63  sonmessage/sourc
6d50: 65 2f 62 72 6f 77 73 65 2f 74 72 75 6e 6b 2f 6c  e/browse/trunk/l
6d60: 69 62 2f 4a 53 4f 4e 4d 65 73 73 61 67 65 2f 4a  ib/JSONMessage/J
6d70: 53 4f 4e 4d 65 73 73 61 67 65 2e 69 6e 63 2e 6a  SONMessage.inc.j
6d80: 73 0a 20 20 20 20 0a 20 20 20 20 28 73 65 61 72  s.    .    (sear
6d90: 63 68 20 74 68 61 74 20 66 69 6c 65 20 66 6f 72  ch that file for
6da0: 20 22 64 6f 6a 6f 22 20 61 6e 64 20 22 50 72 6f   "dojo" and "Pro
6db0: 74 6f 74 79 70 65 22 29 20 74 6f 20 74 68 69 73  totype") to this
6dc0: 20 74 72 65 65 2e 20 54 68 61 74 20 0a 20 20 20   tree. That .   
6dd0: 20 63 6f 64 65 20 69 73 20 74 68 69 73 20 63 6f   code is this co
6de0: 64 65 27 73 20 67 65 6e 65 72 69 63 20 67 72 61  de's generic gra
6df0: 6e 64 66 61 74 68 65 72 20 61 6e 64 20 74 68 65  ndfather and the
6e00: 79 20 61 72 65 20 73 74 69 6c 6c 20 76 65 72 79  y are still very
6e10: 20 0a 20 20 20 20 73 69 6d 69 6c 61 72 2c 20 73   .    similar, s
6e20: 6f 20 61 20 70 6f 72 74 20 69 73 20 74 72 69 76  o a port is triv
6e30: 69 61 6c 2e 20 20 20 20 0a 20 20 20 20 0a 2a 2f  ial.    .    .*/
6e40: 0a 57 68 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f  .WhAjaj.Connecto
6e50: 72 2e 73 65 6e 64 49 6d 70 6c 73 20 3d 20 7b 0a  r.sendImpls = {.
6e60: 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 20 20 20      /**.        
6e70: 54 68 69 73 20 69 73 20 61 20 63 6f 6e 63 72 65  This is a concre
6e80: 74 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  te implementatio
6e90: 6e 20 6f 66 20 0a 20 20 20 20 20 20 20 20 57 68  n of .        Wh
6ea0: 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e 70  Ajaj.Connector.p
6eb0: 72 6f 74 6f 74 79 70 65 2e 73 65 6e 64 49 6d 70  rototype.sendImp
6ec0: 6c 28 29 20 77 68 69 63 68 20 75 73 65 73 20 74  l() which uses t
6ed0: 68 65 20 0a 20 20 20 20 20 20 20 20 65 6e 76 69  he .        envi
6ee0: 72 6f 6e 6d 65 6e 74 27 73 20 6e 61 74 69 76 65  ronment's native
6ef0: 20 58 4d 4c 48 74 74 70 52 65 71 75 65 73 74 20   XMLHttpRequest 
6f00: 63 6c 61 73 73 20 74 6f 20 73 65 6e 64 20 77 68  class to send wh
6f10: 69 6b 69 20 0a 20 20 20 20 20 20 20 20 72 65 71  iki .        req
6f20: 75 65 73 74 73 20 61 6e 64 20 66 65 74 63 68 20  uests and fetch 
6f30: 74 68 65 20 72 65 73 70 6f 6e 73 65 73 2e 0a 0a  the responses...
6f40: 20 20 20 20 20 20 20 20 54 68 65 20 6f 6e 6c 79          The only
6f50: 20 61 72 67 75 6d 65 6e 74 20 6d 75 73 74 20 62   argument must b
6f60: 65 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70  e a connection p
6f70: 72 6f 70 65 72 74 69 65 73 20 6f 62 6a 65 63 74  roperties object
6f80: 2c 20 61 73 20 0a 20 20 20 20 20 20 20 20 63 6f  , as .        co
6f90: 6e 73 74 72 75 63 74 65 64 20 62 79 20 57 68 41  nstructed by WhA
6fa0: 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e 6e 6f  jaj.Connector.no
6fb0: 72 6d 61 6c 69 7a 65 41 6a 61 78 50 61 72 61 6d  rmalizeAjaxParam
6fc0: 65 74 65 72 73 28 29 2e 0a 0a 20 20 20 20 20 20  eters()...      
6fd0: 20 20 49 66 20 77 69 6e 64 6f 77 2e 66 69 72 65    If window.fire
6fe0: 62 75 67 20 69 73 20 73 65 74 20 74 68 65 6e 20  bug is set then 
6ff0: 77 69 6e 64 6f 77 2e 66 69 72 65 62 75 67 2e 77  window.firebug.w
7000: 61 74 63 68 58 48 52 28 29 20 69 73 20 0a 20 20  atchXHR() is .  
7010: 20 20 20 20 20 20 63 61 6c 6c 65 64 20 74 6f 20        called to 
7020: 65 6e 61 62 6c 65 20 6d 6f 6e 69 74 6f 72 69 6e  enable monitorin
7030: 67 20 6f 66 20 74 68 65 20 58 4d 4c 48 74 74 70  g of the XMLHttp
7040: 52 65 71 75 65 73 74 20 6f 62 6a 65 63 74 2e 0a  Request object..
7050: 0a 20 20 20 20 20 20 20 20 54 68 69 73 20 69 6d  .        This im
7060: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 68 6f 6e  plementation hon
7070: 6f 72 73 20 74 68 65 20 6c 6f 67 69 6e 4e 61 6d  ors the loginNam
7080: 65 20 61 6e 64 20 6c 6f 67 69 6e 50 61 73 73 77  e and loginPassw
7090: 6f 72 64 20 0a 20 20 20 20 20 20 20 20 63 6f 6e  ord .        con
70a0: 6e 65 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65  nection paramete
70b0: 72 73 2e 0a 0a 20 20 20 20 20 20 20 20 52 65 74  rs...        Ret
70c0: 75 72 6e 73 20 74 68 65 20 58 4d 4c 48 74 74 70  urns the XMLHttp
70d0: 52 65 71 75 65 73 74 20 6f 62 6a 65 63 74 2e 0a  Request object..
70e0: 0a 20 20 20 20 20 20 20 20 54 68 69 73 20 69 6d  .        This im
70f0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 72 65 71  plementation req
7100: 75 69 72 65 73 20 74 68 61 74 20 74 68 65 20 27  uires that the '
7110: 74 68 69 73 27 20 6f 62 6a 65 63 74 20 62 65 2d  this' object be-
7120: 61 20 0a 20 20 20 20 20 20 20 20 57 68 41 6a 61  a .        WhAja
7130: 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e 0a 20 20 20  j.Connector..   
7140: 20 20 20 20 20 0a 20 20 20 20 20 20 20 20 54 68       .        Th
7150: 69 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  is implementatio
7160: 6e 20 75 73 65 73 20 73 65 74 54 69 6d 65 6f 75  n uses setTimeou
7170: 74 28 29 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  t() to implement
7180: 20 74 68 65 20 0a 20 20 20 20 20 20 20 20 74 69   the .        ti
7190: 6d 65 6f 75 74 20 73 75 70 70 6f 72 74 2c 20 61  meout support, a
71a0: 6e 64 20 74 68 75 73 20 74 68 65 20 4a 53 20 65  nd thus the JS e
71b0: 6e 67 69 6e 65 20 6d 75 73 74 20 70 72 6f 76 69  ngine must provi
71c0: 64 65 20 74 68 61 74 20 0a 20 20 20 20 20 20 20  de that .       
71d0: 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 2e 0a   functionality..
71e0: 20 20 20 20 2a 2f 0a 20 20 20 20 58 4d 4c 48 74      */.    XMLHt
71f0: 74 70 52 65 71 75 65 73 74 3a 20 66 75 6e 63 74  tpRequest: funct
7200: 69 6f 6e 28 72 65 71 75 65 73 74 2c 20 61 72 67  ion(request, arg
7210: 73 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20  s).    {.       
7220: 20 76 61 72 20 6a 73 6f 6e 20 3d 20 57 68 41 6a   var json = WhAj
7230: 61 6a 2e 69 73 4f 62 6a 65 63 74 28 72 65 71 75  aj.isObject(requ
7240: 65 73 74 29 20 3f 20 4a 53 4f 4e 2e 73 74 72 69  est) ? JSON.stri
7250: 6e 67 69 66 79 28 72 65 71 75 65 73 74 29 20 3a  ngify(request) :
7260: 20 72 65 71 75 65 73 74 3b 0a 20 20 20 20 20 20   request;.      
7270: 20 20 76 61 72 20 78 68 72 20 3d 20 6e 65 77 20    var xhr = new 
7280: 58 4d 4c 48 74 74 70 52 65 71 75 65 73 74 28 29  XMLHttpRequest()
7290: 3b 0a 20 20 20 20 20 20 20 20 76 61 72 20 73 74  ;.        var st
72a0: 61 72 74 54 69 6d 65 20 3d 20 28 6e 65 77 20 44  artTime = (new D
72b0: 61 74 65 28 29 29 2e 67 65 74 54 69 6d 65 28 29  ate()).getTime()
72c0: 3b 0a 20 20 20 20 20 20 20 20 76 61 72 20 74 69  ;.        var ti
72d0: 6d 65 6f 75 74 20 3d 20 61 72 67 73 2e 74 69 6d  meout = args.tim
72e0: 65 6f 75 74 20 7c 7c 20 31 30 30 30 30 2f 2a 61  eout || 10000/*a
72f0: 72 62 69 74 72 61 72 79 21 2a 2f 3b 0a 20 20 20  rbitrary!*/;.   
7300: 20 20 20 20 20 76 61 72 20 68 69 74 54 69 6d 65       var hitTime
7310: 6f 75 74 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20  out = false;.   
7320: 20 20 20 20 20 76 61 72 20 64 6f 6e 65 20 3d 20       var done = 
7330: 66 61 6c 73 65 3b 0a 20 20 20 20 20 20 20 20 76  false;.        v
7340: 61 72 20 74 6d 69 64 20 2f 2a 20 73 65 74 54 69  ar tmid /* setTi
7350: 6d 65 6f 75 74 28 29 20 49 44 20 2a 2f 3b 0a 20  meout() ID */;. 
7360: 20 20 20 20 20 20 20 76 61 72 20 77 68 73 65 6c         var whsel
7370: 66 20 3d 20 74 68 69 73 3b 0a 20 20 20 20 20 20  f = this;.      
7380: 20 20 66 75 6e 63 74 69 6f 6e 20 68 61 6e 64 6c    function handl
7390: 65 54 69 6d 65 6f 75 74 28 29 0a 20 20 20 20 20  eTimeout().     
73a0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
73b0: 20 68 69 74 54 69 6d 65 6f 75 74 20 3d 20 74 72   hitTimeout = tr
73c0: 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue;.            
73d0: 69 66 28 20 21 20 64 6f 6e 65 20 29 0a 20 20 20  if( ! done ).   
73e0: 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20           {.     
73f0: 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20 6e             var n
7400: 6f 77 20 3d 20 28 6e 65 77 20 44 61 74 65 28 29  ow = (new Date()
7410: 29 2e 67 65 74 54 69 6d 65 28 29 3b 0a 20 20 20  ).getTime();.   
7420: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
7430: 20 7b 20 78 68 72 2e 61 62 6f 72 74 28 29 3b 20   { xhr.abort(); 
7440: 7d 20 63 61 74 63 68 28 65 29 20 7b 2f 2a 69 67  } catch(e) {/*ig
7450: 6e 6f 72 65 2a 2f 7d 0a 20 20 20 20 20 20 20 20  nore*/}.        
7460: 20 20 20 20 20 20 20 20 2f 2f 20 73 65 65 3a 20          // see: 
7470: 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72  http://www.w3.or
7480: 67 2f 54 52 2f 58 4d 4c 48 74 74 70 52 65 71 75  g/TR/XMLHttpRequ
7490: 65 73 74 2f 23 74 68 65 2d 61 62 6f 72 74 2d 6d  est/#the-abort-m
74a0: 65 74 68 6f 64 0a 20 20 20 20 20 20 20 20 20 20  ethod.          
74b0: 20 20 20 20 20 20 61 72 67 73 2e 65 72 72 6f 72        args.error
74c0: 4d 65 73 73 61 67 65 20 3d 20 22 54 69 6d 65 6f  Message = "Timeo
74d0: 75 74 20 6f 66 20 22 2b 74 69 6d 65 6f 75 74 2b  ut of "+timeout+
74e0: 22 6d 73 20 72 65 61 63 68 65 64 20 61 66 74 65  "ms reached afte
74f0: 72 20 22 2b 28 6e 6f 77 2d 73 74 61 72 74 54 69  r "+(now-startTi
7500: 6d 65 29 2b 22 6d 73 20 64 75 72 69 6e 67 20 41  me)+"ms during A
7510: 4a 41 58 20 72 65 71 75 65 73 74 2e 22 3b 0a 20  JAX request.";. 
7520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 57                 W
7530: 68 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e  hAjaj.Connector.
7540: 73 65 6e 64 48 65 6c 70 65 72 2e 6f 6e 53 65 6e  sendHelper.onSen
7550: 64 45 72 72 6f 72 2e 61 70 70 6c 79 28 20 77 68  dError.apply( wh
7560: 73 65 6c 66 2c 20 5b 72 65 71 75 65 73 74 2c 20  self, [request, 
7570: 61 72 67 73 5d 20 29 3b 0a 20 20 20 20 20 20 20  args] );.       
7580: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
7590: 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20     return;.     
75a0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 66 75 6e     }.        fun
75b0: 63 74 69 6f 6e 20 6f 6e 53 74 61 74 65 43 68 61  ction onStateCha
75c0: 6e 67 65 28 29 0a 20 20 20 20 20 20 20 20 7b 20  nge().        { 
75d0: 2f 2f 20 72 65 6d 69 6e 64 65 72 20 74 6f 20 73  // reminder to s
75e0: 65 6c 66 3a 20 61 70 70 61 72 65 6e 74 6c 79 20  elf: apparently 
75f0: 27 74 68 69 73 27 20 69 73 2d 6e 6f 74 2d 61 20  'this' is-not-a 
7600: 58 48 52 20 3a 2f 0a 20 20 20 20 20 20 20 20 20  XHR :/.         
7610: 20 20 20 69 66 28 20 68 69 74 54 69 6d 65 6f 75     if( hitTimeou
7620: 74 20 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  t ).            
7630: 7b 20 2f 2a 20 77 65 27 72 65 20 74 6f 6f 20 6c  { /* we're too l
7640: 61 74 65 20 2d 20 74 68 65 20 65 72 72 6f 72 20  ate - the error 
7650: 77 61 73 20 61 6c 72 65 61 64 79 20 74 72 69 67  was already trig
7660: 67 65 72 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20  gered. */.      
7670: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7680: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
7690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28  .            if(
76a0: 20 34 20 3d 3d 20 78 68 72 2e 72 65 61 64 79 53   4 == xhr.readyS
76b0: 74 61 74 65 20 29 0a 20 20 20 20 20 20 20 20 20  tate ).         
76c0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
76d0: 20 20 20 20 20 64 6f 6e 65 20 3d 20 74 72 75 65       done = true
76e0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
76f0: 20 20 69 66 28 20 74 6d 69 64 20 29 0a 20 20 20    if( tmid ).   
7700: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20               {. 
7710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7720: 20 20 20 63 6c 65 61 72 54 69 6d 65 6f 75 74 28     clearTimeout(
7730: 20 74 6d 69 64 20 29 3b 0a 20 20 20 20 20 20 20   tmid );.       
7740: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 6d 69               tmi
7750: 64 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  d = null;.      
7760: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
7770: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
7780: 28 78 68 72 2e 73 74 61 74 75 73 20 3e 3d 20 32  (xhr.status >= 2
7790: 30 30 29 20 26 26 20 28 78 68 72 2e 73 74 61 74  00) && (xhr.stat
77a0: 75 73 20 3c 20 33 30 30 29 20 29 0a 20 20 20 20  us < 300) ).    
77b0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20              {.  
77c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77d0: 20 20 57 68 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74    WhAjaj.Connect
77e0: 6f 72 2e 73 65 6e 64 48 65 6c 70 65 72 2e 6f 6e  or.sendHelper.on
77f0: 53 65 6e 64 53 75 63 63 65 73 73 2e 61 70 70 6c  SendSuccess.appl
7800: 79 28 20 77 68 73 65 6c 66 2c 20 5b 72 65 71 75  y( whself, [requ
7810: 65 73 74 2c 20 78 68 72 2e 72 65 73 70 6f 6e 73  est, xhr.respons
7820: 65 54 65 78 74 2c 20 61 72 67 73 5d 20 29 3b 0a  eText, args] );.
7830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7840: 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20      return;.    
7850: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
7860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
7870: 73 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  se.             
7880: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
7890: 20 20 20 20 20 20 20 20 20 69 66 28 20 75 6e 64           if( und
78a0: 65 66 69 6e 65 64 20 3d 3d 3d 20 61 72 67 73 2e  efined === args.
78b0: 65 72 72 6f 72 4d 65 73 73 61 67 65 20 29 0a 20  errorMessage ). 
78c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78d0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
78e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67               arg
78f0: 73 2e 65 72 72 6f 72 4d 65 73 73 61 67 65 20 3d  s.errorMessage =
7900: 20 22 45 72 72 6f 72 20 73 65 6e 64 69 6e 67 20   "Error sending 
7910: 61 20 27 22 2b 61 72 67 73 2e 6d 65 74 68 6f 64  a '"+args.method
7920: 2b 22 27 20 41 4a 41 58 20 72 65 71 75 65 73 74  +"' AJAX request
7930: 20 74 6f 20 22 0a 20 20 20 20 20 20 20 20 20 20   to ".          
7940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7950: 20 20 20 20 20 20 2b 22 5b 22 2b 61 72 67 73 2e        +"["+args.
7960: 75 72 6c 2b 22 5d 3a 20 22 0a 20 20 20 20 20 20  url+"]: ".      
7970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7980: 20 20 20 20 20 20 20 20 20 20 2b 22 53 74 61 74            +"Stat
7990: 75 73 20 74 65 78 74 3d 5b 22 2b 78 68 72 2e 73  us text=["+xhr.s
79a0: 74 61 74 75 73 54 65 78 74 2b 22 5d 22 0a 20 20  tatusText+"]".  
79b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79c0: 20 20 20 20 20 20 20 20 20 20 3b 0a 20 20 20 20            ;.    
79d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79e0: 20 20 20 20 57 68 41 6a 61 6a 2e 43 6f 6e 6e 65      WhAjaj.Conne
79f0: 63 74 6f 72 2e 73 65 6e 64 48 65 6c 70 65 72 2e  ctor.sendHelper.
7a00: 6f 6e 53 65 6e 64 45 72 72 6f 72 2e 61 70 70 6c  onSendError.appl
7a10: 79 28 20 77 68 73 65 6c 66 2c 20 5b 72 65 71 75  y( whself, [requ
7a20: 65 73 74 2c 20 61 72 67 73 5d 20 29 3b 0a 20 20  est, args] );.  
7a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a40: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
7a50: 20 20 20 20 20 20 20 20 65 6c 73 65 20 7b 20 2f          else { /
7a60: 2a 6d 61 79 62 65 20 69 74 20 77 61 73 20 77 61  *maybe it was wa
7a70: 73 20 73 65 74 20 62 79 20 74 68 65 20 74 69 6d  s set by the tim
7a80: 65 6f 75 74 20 68 61 6e 64 6c 65 72 2e 20 2a 2f  eout handler. */
7a90: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
7aa0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20         return;. 
7ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
7ac0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
7ad0: 20 20 20 20 20 20 20 7d 3b 0a 0a 20 20 20 20 20         };..     
7ae0: 20 20 20 78 68 72 2e 6f 6e 72 65 61 64 79 73 74     xhr.onreadyst
7af0: 61 74 65 63 68 61 6e 67 65 20 3d 20 6f 6e 53 74  atechange = onSt
7b00: 61 74 65 43 68 61 6e 67 65 3b 0a 20 20 20 20 20  ateChange;.     
7b10: 20 20 20 69 66 28 20 28 27 75 6e 64 65 66 69 6e     if( ('undefin
7b20: 65 64 27 21 3d 3d 28 74 79 70 65 6f 66 20 77 69  ed'!==(typeof wi
7b30: 6e 64 6f 77 29 29 20 26 26 20 28 27 66 69 72 65  ndow)) && ('fire
7b40: 62 75 67 27 20 69 6e 20 77 69 6e 64 6f 77 29 20  bug' in window) 
7b50: 26 26 20 28 27 77 61 74 63 68 58 48 52 27 20 69  && ('watchXHR' i
7b60: 6e 20 77 69 6e 64 6f 77 2e 66 69 72 65 62 75 67  n window.firebug
7b70: 29 20 29 0a 20 20 20 20 20 20 20 20 7b 20 2f 2a  ) ).        { /*
7b80: 20 70 6c 75 67 20 69 6e 20 74 6f 20 66 69 72 65   plug in to fire
7b90: 62 75 67 20 6c 69 74 65 27 73 20 58 48 52 20 6d  bug lite's XHR m
7ba0: 6f 6e 69 74 6f 72 2e 2e 2e 20 2a 2f 0a 20 20 20  onitor... */.   
7bb0: 20 20 20 20 20 20 20 20 20 77 69 6e 64 6f 77 2e           window.
7bc0: 66 69 72 65 62 75 67 2e 77 61 74 63 68 58 48 52  firebug.watchXHR
7bd0: 28 20 78 68 72 20 29 3b 0a 20 20 20 20 20 20 20  ( xhr );.       
7be0: 20 7d 0a 20 20 20 20 20 20 20 20 74 72 79 0a 20   }.        try. 
7bf0: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
7c00: 20 20 20 20 20 2f 2f 61 6c 65 72 74 28 20 4a 53       //alert( JS
7c10: 4f 4e 2e 73 74 72 69 6e 67 69 66 79 28 20 61 72  ON.stringify( ar
7c20: 67 73 20 20 29 29 3b 0a 20 20 20 20 20 20 20 20  gs  ));.        
7c30: 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 78 68 72      function xhr
7c40: 4f 70 65 6e 28 29 0a 20 20 20 20 20 20 20 20 20  Open().         
7c50: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
7c60: 20 20 20 20 20 69 66 28 20 28 27 6c 6f 67 69 6e       if( ('login
7c70: 4e 61 6d 65 27 20 69 6e 20 61 72 67 73 29 20 26  Name' in args) &
7c80: 26 20 61 72 67 73 2e 6c 6f 67 69 6e 4e 61 6d 65  & args.loginName
7c90: 20 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   ).             
7ca0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
7cb0: 20 20 20 20 20 20 20 20 20 78 68 72 2e 6f 70 65           xhr.ope
7cc0: 6e 28 20 61 72 67 73 2e 6d 65 74 68 6f 64 2c 20  n( args.method, 
7cd0: 61 72 67 73 2e 75 72 6c 2c 20 61 72 67 73 2e 61  args.url, args.a
7ce0: 73 79 6e 63 68 72 6f 6e 6f 75 73 2c 20 61 72 67  synchronous, arg
7cf0: 73 2e 6c 6f 67 69 6e 4e 61 6d 65 2c 20 61 72 67  s.loginName, arg
7d00: 73 2e 6c 6f 67 69 6e 50 61 73 73 77 6f 72 64 20  s.loginPassword 
7d10: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
7d20: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
7d30: 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20       else.      
7d40: 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20            {.    
7d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d60: 78 68 72 2e 6f 70 65 6e 28 20 61 72 67 73 2e 6d  xhr.open( args.m
7d70: 65 74 68 6f 64 2c 20 61 72 67 73 2e 75 72 6c 2c  ethod, args.url,
7d80: 20 61 72 67 73 2e 61 73 79 6e 63 68 72 6f 6e 6f   args.asynchrono
7d90: 75 73 20 20 29 3b 0a 20 20 20 20 20 20 20 20 20  us  );.         
7da0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
7db0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
7dc0: 20 20 20 69 66 28 20 6a 73 6f 6e 20 26 26 20 28     if( json && (
7dd0: 27 50 4f 53 54 27 20 3d 3d 3d 20 20 61 72 67 73  'POST' ===  args
7de0: 2e 6d 65 74 68 6f 64 2e 74 6f 55 70 70 65 72 43  .method.toUpperC
7df0: 61 73 65 28 29 29 20 29 0a 20 20 20 20 20 20 20  ase()) ).       
7e00: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
7e10: 20 20 20 20 20 20 20 78 68 72 4f 70 65 6e 28 29         xhrOpen()
7e20: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
7e30: 20 20 78 68 72 2e 73 65 74 52 65 71 75 65 73 74    xhr.setRequest
7e40: 48 65 61 64 65 72 28 22 43 6f 6e 74 65 6e 74 2d  Header("Content-
7e50: 54 79 70 65 22 2c 20 22 61 70 70 6c 69 63 61 74  Type", "applicat
7e60: 69 6f 6e 2f 6a 73 6f 6e 3b 20 63 68 61 72 73 65  ion/json; charse
7e70: 74 3d 75 74 66 2d 38 22 29 3b 0a 20 20 20 20 20  t=utf-8");.     
7e80: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 47 6f             // Go
7e90: 6f 67 6c 65 20 43 68 72 6f 6d 65 20 77 61 72 6e  ogle Chrome warn
7ea0: 73 20 74 68 61 74 20 69 74 20 72 65 66 75 73 65  s that it refuse
7eb0: 73 20 74 6f 20 73 65 74 20 74 68 65 73 65 0a 20  s to set these. 
7ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7ed0: 2f 20 22 75 6e 73 61 66 65 22 20 68 65 61 64 65  / "unsafe" heade
7ee0: 72 73 20 28 68 69 73 20 77 6f 72 64 73 2c 20 6e  rs (his words, n
7ef0: 6f 74 20 6d 69 6e 65 29 3a 0a 20 20 20 20 20 20  ot mine):.      
7f00: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 78 68 72            // xhr
7f10: 2e 73 65 74 52 65 71 75 65 73 74 48 65 61 64 65  .setRequestHeade
7f20: 72 28 22 43 6f 6e 74 65 6e 74 2d 6c 65 6e 67 74  r("Content-lengt
7f30: 68 22 2c 20 6a 73 6f 6e 2e 6c 65 6e 67 74 68 29  h", json.length)
7f40: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
7f50: 20 20 2f 2f 20 78 68 72 2e 73 65 74 52 65 71 75    // xhr.setRequ
7f60: 65 73 74 48 65 61 64 65 72 28 22 43 6f 6e 6e 65  estHeader("Conne
7f70: 63 74 69 6f 6e 22 2c 20 22 63 6c 6f 73 65 22 29  ction", "close")
7f80: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
7f90: 20 20 78 68 72 2e 73 65 6e 64 28 20 6a 73 6f 6e    xhr.send( json
7fa0: 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20   );.            
7fb0: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  }.            el
7fc0: 73 65 20 2f 2a 20 61 73 73 75 6d 65 20 47 45 54  se /* assume GET
7fd0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
7fe0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
7ff0: 20 20 78 68 72 4f 70 65 6e 28 29 3b 0a 20 20 20    xhrOpen();.   
8000: 20 20 20 20 20 20 20 20 20 20 20 20 20 78 68 72               xhr
8010: 2e 73 65 6e 64 28 6e 75 6c 6c 29 3b 0a 20 20 20  .send(null);.   
8020: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
8030: 20 20 20 20 20 20 20 74 6d 69 64 20 3d 20 73 65         tmid = se
8040: 74 54 69 6d 65 6f 75 74 28 20 68 61 6e 64 6c 65  tTimeout( handle
8050: 54 69 6d 65 6f 75 74 2c 20 74 69 6d 65 6f 75 74  Timeout, timeout
8060: 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20   );.            
8070: 72 65 74 75 72 6e 20 78 68 72 3b 0a 20 20 20 20  return xhr;.    
8080: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 63 61      }.        ca
8090: 74 63 68 28 65 29 0a 20 20 20 20 20 20 20 20 7b  tch(e).        {
80a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67  .            arg
80b0: 73 2e 65 72 72 6f 72 4d 65 73 73 61 67 65 20 3d  s.errorMessage =
80c0: 20 65 2e 74 6f 53 74 72 69 6e 67 28 29 3b 0a 20   e.toString();. 
80d0: 20 20 20 20 20 20 20 20 20 20 20 57 68 41 6a 61             WhAja
80e0: 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e 73 65 6e 64  j.Connector.send
80f0: 48 65 6c 70 65 72 2e 6f 6e 53 65 6e 64 45 72 72  Helper.onSendErr
8100: 6f 72 2e 61 70 70 6c 79 28 20 77 68 73 65 6c 66  or.apply( whself
8110: 2c 20 5b 72 65 71 75 65 73 74 2c 20 61 72 67 73  , [request, args
8120: 5d 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ] );.           
8130: 20 72 65 74 75 72 6e 20 75 6e 64 65 66 69 6e 65   return undefine
8140: 64 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  d;.        }.   
8150: 20 7d 2f 2a 58 4d 4c 48 74 74 70 52 65 71 75 65   }/*XMLHttpReque
8160: 73 74 28 29 2a 2f 2c 0a 20 20 20 20 2f 2a 2a 0a  st()*/,.    /**.
8170: 20 20 20 20 20 20 20 20 54 68 69 73 20 69 73 20          This is 
8180: 61 20 63 6f 6e 63 72 65 74 65 20 69 6d 70 6c 65  a concrete imple
8190: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 0a 20 20  mentation of .  
81a0: 20 20 20 20 20 20 57 68 41 6a 61 6a 2e 43 6f 6e        WhAjaj.Con
81b0: 6e 65 63 74 6f 72 2e 70 72 6f 74 6f 74 79 70 65  nector.prototype
81c0: 2e 73 65 6e 64 49 6d 70 6c 28 29 20 77 68 69 63  .sendImpl() whic
81d0: 68 20 75 73 65 73 20 74 68 65 20 6a 51 75 65 72  h uses the jQuer
81e0: 79 20 0a 20 20 20 20 20 20 20 20 41 4a 41 58 20  y .        AJAX 
81f0: 41 50 49 20 74 6f 20 73 65 6e 64 20 72 65 71 75  API to send requ
8200: 65 73 74 73 20 61 6e 64 20 66 65 74 63 68 20 74  ests and fetch t
8210: 68 65 20 72 65 73 70 6f 6e 73 65 73 2e 0a 0a 20  he responses... 
8220: 20 20 20 20 20 20 20 54 68 65 20 66 69 72 73 74         The first
8230: 20 61 72 67 75 6d 65 6e 74 20 6d 61 79 20 62 65   argument may be
8240: 20 65 69 74 68 65 72 20 6e 75 6c 6c 2f 66 61 6c   either null/fal
8250: 73 65 2c 20 61 6e 20 4f 62 6a 65 63 74 20 0a 20  se, an Object . 
8260: 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 69 6e         containin
8270: 67 20 74 6f 4a 53 4f 4e 2d 61 62 6c 65 20 64 61  g toJSON-able da
8280: 74 61 20 74 6f 20 70 6f 73 74 20 74 6f 20 74 68  ta to post to th
8290: 65 20 62 61 63 6b 2d 65 6e 64 2c 20 6f 72 20 73  e back-end, or s
82a0: 75 63 68 20 61 6e 0a 20 20 20 20 20 20 20 20 6f  uch an.        o
82b0: 62 6a 65 63 74 20 69 6e 20 4a 53 4f 4e 20 73 74  bject in JSON st
82c0: 72 69 6e 67 20 66 6f 72 6d 2e 0a 0a 20 20 20 20  ring form...    
82d0: 20 20 20 20 54 68 65 20 73 65 63 6f 6e 64 20 61      The second a
82e0: 72 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65 20  rgument must be 
82f0: 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 6f  a connection pro
8300: 70 65 72 74 69 65 73 20 6f 62 6a 65 63 74 2c 20  perties object, 
8310: 61 73 20 0a 20 20 20 20 20 20 20 20 63 6f 6e 73  as .        cons
8320: 74 72 75 63 74 65 64 20 62 79 20 57 68 41 6a 61  tructed by WhAja
8330: 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e 6e 6f 72 6d  j.Connector.norm
8340: 61 6c 69 7a 65 41 6a 61 78 50 61 72 61 6d 65 74  alizeAjaxParamet
8350: 65 72 73 28 29 2e 0a 0a 20 20 20 20 20 20 20 20  ers()...        
8360: 49 66 20 77 69 6e 64 6f 77 2e 66 69 72 65 62 75  If window.firebu
8370: 67 20 69 73 20 73 65 74 20 74 68 65 6e 20 77 69  g is set then wi
8380: 6e 64 6f 77 2e 66 69 72 65 62 75 67 2e 77 61 74  ndow.firebug.wat
8390: 63 68 58 48 52 28 29 20 69 73 20 0a 20 20 20 20  chXHR() is .    
83a0: 20 20 20 20 63 61 6c 6c 65 64 20 74 6f 20 65 6e      called to en
83b0: 61 62 6c 65 20 6d 6f 6e 69 74 6f 72 69 6e 67 20  able monitoring 
83c0: 6f 66 20 74 68 65 20 58 4d 4c 48 74 74 70 52 65  of the XMLHttpRe
83d0: 71 75 65 73 74 20 6f 62 6a 65 63 74 2e 0a 0a 20  quest object... 
83e0: 20 20 20 20 20 20 20 54 68 69 73 20 69 6d 70 6c         This impl
83f0: 65 6d 65 6e 74 61 74 69 6f 6e 20 68 6f 6e 6f 72  ementation honor
8400: 73 20 74 68 65 20 6c 6f 67 69 6e 4e 61 6d 65 20  s the loginName 
8410: 61 6e 64 20 6c 6f 67 69 6e 50 61 73 73 77 6f 72  and loginPasswor
8420: 64 20 0a 20 20 20 20 20 20 20 20 63 6f 6e 6e 65  d .        conne
8430: 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 73  ction parameters
8440: 2e 0a 0a 20 20 20 20 20 20 20 20 52 65 74 75 72  ...        Retur
8450: 6e 73 20 74 68 65 20 58 4d 4c 48 74 74 70 52 65  ns the XMLHttpRe
8460: 71 75 65 73 74 20 6f 62 6a 65 63 74 2e 0a 0a 20  quest object... 
8470: 20 20 20 20 20 20 20 54 68 69 73 20 69 6d 70 6c         This impl
8480: 65 6d 65 6e 74 61 74 69 6f 6e 20 72 65 71 75 69  ementation requi
8490: 72 65 73 20 74 68 61 74 20 74 68 65 20 27 74 68  res that the 'th
84a0: 69 73 27 20 6f 62 6a 65 63 74 20 62 65 2d 61 20  is' object be-a 
84b0: 0a 20 20 20 20 20 20 20 20 57 68 41 6a 61 6a 2e  .        WhAjaj.
84c0: 43 6f 6e 6e 65 63 74 6f 72 2e 0a 20 20 20 20 2a  Connector..    *
84d0: 2f 0a 20 20 20 20 6a 51 75 65 72 79 3a 66 75 6e  /.    jQuery:fun
84e0: 63 74 69 6f 6e 28 72 65 71 75 65 73 74 2c 61 72  ction(request,ar
84f0: 67 73 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  gs).    {.      
8500: 20 20 76 61 72 20 64 61 74 61 20 3d 20 72 65 71    var data = req
8510: 75 65 73 74 20 7c 7c 20 75 6e 64 65 66 69 6e 65  uest || undefine
8520: 64 3b 0a 20 20 20 20 20 20 20 20 76 61 72 20 77  d;.        var w
8530: 68 73 65 6c 66 20 3d 20 74 68 69 73 3b 0a 20 20  hself = this;.  
8540: 20 20 20 20 20 20 69 66 28 20 64 61 74 61 20 29        if( data )
8550: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69   {.            i
8560: 66 28 27 73 74 72 69 6e 67 27 21 3d 3d 74 79 70  f('string'!==typ
8570: 65 6f 66 20 64 61 74 61 29 20 7b 0a 20 20 20 20  eof data) {.    
8580: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 20              try 
8590: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
85a0: 20 20 20 20 20 20 64 61 74 61 20 3d 20 4a 53 4f        data = JSO
85b0: 4e 2e 73 74 72 69 6e 67 69 66 79 28 64 61 74 61  N.stringify(data
85c0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
85d0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
85e0: 20 20 20 20 20 63 61 74 63 68 28 65 29 20 7b 0a       catch(e) {.
85f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8600: 20 20 20 20 57 68 41 6a 61 6a 2e 43 6f 6e 6e 65      WhAjaj.Conne
8610: 63 74 6f 72 2e 73 65 6e 64 48 65 6c 70 65 72 2e  ctor.sendHelper.
8620: 6f 6e 53 65 6e 64 45 72 72 6f 72 2e 61 70 70 6c  onSendError.appl
8630: 79 28 20 77 68 73 65 6c 66 2c 20 5b 72 65 71 75  y( whself, [requ
8640: 65 73 74 2c 20 61 72 67 73 5d 20 29 3b 0a 20 20  est, args] );.  
8650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8660: 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20    return;.      
8670: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
8680: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
8690: 20 20 7d 0a 20 20 20 20 20 20 20 20 76 61 72 20    }.        var 
86a0: 61 6a 6f 70 74 20 3d 20 7b 0a 20 20 20 20 20 20  ajopt = {.      
86b0: 20 20 20 20 20 20 75 72 6c 3a 20 61 72 67 73 2e        url: args.
86c0: 75 72 6c 2c 0a 20 20 20 20 20 20 20 20 20 20 20  url,.           
86d0: 20 64 61 74 61 3a 20 64 61 74 61 2c 0a 20 20 20   data: data,.   
86e0: 20 20 20 20 20 20 20 20 20 74 79 70 65 3a 20 61           type: a
86f0: 72 67 73 2e 6d 65 74 68 6f 64 2c 0a 20 20 20 20  rgs.method,.    
8700: 20 20 20 20 20 20 20 20 61 73 79 6e 63 3a 20 61          async: a
8710: 72 67 73 2e 61 73 79 6e 63 68 72 6f 6e 6f 75 73  rgs.asynchronous
8720: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 61  ,.            pa
8730: 73 73 77 6f 72 64 3a 20 28 75 6e 64 65 66 69 6e  ssword: (undefin
8740: 65 64 20 21 3d 3d 20 61 72 67 73 2e 6c 6f 67 69  ed !== args.logi
8750: 6e 50 61 73 73 77 6f 72 64 29 20 3f 20 61 72 67  nPassword) ? arg
8760: 73 2e 6c 6f 67 69 6e 50 61 73 73 77 6f 72 64 20  s.loginPassword 
8770: 3a 20 75 6e 64 65 66 69 6e 65 64 2c 0a 20 20 20  : undefined,.   
8780: 20 20 20 20 20 20 20 20 20 75 73 65 72 6e 61 6d           usernam
8790: 65 3a 20 28 75 6e 64 65 66 69 6e 65 64 20 21 3d  e: (undefined !=
87a0: 3d 20 61 72 67 73 2e 6c 6f 67 69 6e 4e 61 6d 65  = args.loginName
87b0: 29 20 3f 20 61 72 67 73 2e 6c 6f 67 69 6e 4e 61  ) ? args.loginNa
87c0: 6d 65 20 3a 20 75 6e 64 65 66 69 6e 65 64 2c 0a  me : undefined,.
87d0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
87e0: 65 6e 74 54 79 70 65 3a 20 27 61 70 70 6c 69 63  entType: 'applic
87f0: 61 74 69 6f 6e 2f 6a 73 6f 6e 3b 20 63 68 61 72  ation/json; char
8800: 73 65 74 3d 75 74 66 2d 38 27 2c 0a 20 20 20 20  set=utf-8',.    
8810: 20 20 20 20 20 20 20 20 65 72 72 6f 72 3a 20 66          error: f
8820: 75 6e 63 74 69 6f 6e 28 78 68 72 2c 20 74 65 78  unction(xhr, tex
8830: 74 53 74 61 74 75 73 2c 20 65 72 72 6f 72 54 68  tStatus, errorTh
8840: 72 6f 77 6e 29 0a 20 20 20 20 20 20 20 20 20 20  rown).          
8850: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
8860: 20 20 20 20 2f 2f 74 68 69 73 20 3d 3d 3d 20 74      //this === t
8870: 68 65 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 74  he options for t
8880: 68 69 73 20 61 6a 61 78 20 72 65 71 75 65 73 74  his ajax request
8890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
88a0: 20 61 72 67 73 2e 65 72 72 6f 72 4d 65 73 73 61   args.errorMessa
88b0: 67 65 20 3d 20 22 45 72 72 6f 72 20 73 65 6e 64  ge = "Error send
88c0: 69 6e 67 20 61 20 27 22 2b 61 6a 6f 70 74 2e 74  ing a '"+ajopt.t
88d0: 79 70 65 2b 22 27 20 72 65 71 75 65 73 74 20 74  ype+"' request t
88e0: 6f 20 5b 22 2b 61 6a 6f 70 74 2e 75 72 6c 2b 22  o ["+ajopt.url+"
88f0: 5d 3a 20 22 0a 20 20 20 20 20 20 20 20 20 20 20  ]: ".           
8900: 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 22 53               +"S
8910: 74 61 74 75 73 20 74 65 78 74 3d 5b 22 2b 74 65  tatus text=["+te
8920: 78 74 53 74 61 74 75 73 2b 22 5d 22 0a 20 20 20  xtStatus+"]".   
8930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8940: 20 20 20 20 20 2b 28 65 72 72 6f 72 54 68 72 6f       +(errorThro
8950: 77 6e 20 3f 20 28 22 45 72 72 6f 72 3d 5b 22 2b  wn ? ("Error=["+
8960: 65 72 72 6f 72 54 68 72 6f 77 6e 2b 22 5d 22 29  errorThrown+"]")
8970: 20 3a 20 22 22 29 0a 20 20 20 20 20 20 20 20 20   : "").         
8980: 20 20 20 20 20 20 20 20 20 20 20 3b 0a 20 20 20             ;.   
8990: 20 20 20 20 20 20 20 20 20 20 20 20 20 57 68 41               WhA
89a0: 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e 73 65  jaj.Connector.se
89b0: 6e 64 48 65 6c 70 65 72 2e 6f 6e 53 65 6e 64 45  ndHelper.onSendE
89c0: 72 72 6f 72 2e 61 70 70 6c 79 28 20 77 68 73 65  rror.apply( whse
89d0: 6c 66 2c 20 5b 72 65 71 75 65 73 74 2c 20 61 72  lf, [request, ar
89e0: 67 73 5d 20 29 3b 0a 20 20 20 20 20 20 20 20 20  gs] );.         
89f0: 20 20 20 7d 2c 0a 20 20 20 20 20 20 20 20 20 20     },.          
8a00: 20 20 73 75 63 63 65 73 73 3a 20 66 75 6e 63 74    success: funct
8a10: 69 6f 6e 28 64 61 74 61 29 0a 20 20 20 20 20 20  ion(data).      
8a20: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
8a30: 20 20 20 20 20 20 20 20 57 68 41 6a 61 6a 2e 43          WhAjaj.C
8a40: 6f 6e 6e 65 63 74 6f 72 2e 73 65 6e 64 48 65 6c  onnector.sendHel
8a50: 70 65 72 2e 6f 6e 53 65 6e 64 53 75 63 63 65 73  per.onSendSucces
8a60: 73 2e 61 70 70 6c 79 28 20 77 68 73 65 6c 66 2c  s.apply( whself,
8a70: 20 5b 72 65 71 75 65 73 74 2c 20 64 61 74 61 2c   [request, data,
8a80: 20 61 72 67 73 5d 20 29 3b 0a 20 20 20 20 20 20   args] );.      
8a90: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 20        },.       
8aa0: 20 20 20 20 20 2f 2a 20 53 65 74 20 64 61 74 61       /* Set data
8ab0: 54 79 70 65 3d 74 65 78 74 20 69 6e 73 74 65 61  Type=text instea
8ac0: 64 20 6f 66 20 6a 73 6f 6e 20 74 6f 20 6b 65 65  d of json to kee
8ad0: 70 20 6a 51 75 65 72 79 20 66 72 6f 6d 20 64 6f  p jQuery from do
8ae0: 69 6e 67 20 6f 75 72 20 63 61 72 65 66 75 6c 6c  ing our carefull
8af0: 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y.              
8b00: 20 20 77 72 69 74 74 65 6e 20 72 65 73 70 6f 6e    written respon
8b10: 73 65 20 68 61 6e 64 6c 69 6e 67 20 66 6f 72 20  se handling for 
8b20: 75 73 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  us..            
8b30: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  */.            d
8b40: 61 74 61 54 79 70 65 3a 20 27 74 65 78 74 27 0a  ataType: 'text'.
8b50: 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20          };.     
8b60: 20 20 20 69 66 28 20 75 6e 64 65 66 69 6e 65 64     if( undefined
8b70: 20 21 3d 3d 20 61 72 67 73 2e 74 69 6d 65 6f 75   !== args.timeou
8b80: 74 20 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20  t ).        {.  
8b90: 20 20 20 20 20 20 20 20 20 20 61 6a 6f 70 74 2e            ajopt.
8ba0: 74 69 6d 65 6f 75 74 20 3d 20 61 72 67 73 2e 74  timeout = args.t
8bb0: 69 6d 65 6f 75 74 3b 0a 20 20 20 20 20 20 20 20  imeout;.        
8bc0: 7d 0a 20 20 20 20 20 20 20 20 74 72 79 0a 20 20  }.        try.  
8bd0: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
8be0: 20 20 20 20 72 65 74 75 72 6e 20 6a 51 75 65 72      return jQuer
8bf0: 79 2e 61 6a 61 78 28 61 6a 6f 70 74 29 3b 0a 20  y.ajax(ajopt);. 
8c00: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
8c10: 20 63 61 74 63 68 28 65 29 0a 20 20 20 20 20 20   catch(e).      
8c20: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
8c30: 61 72 67 73 2e 65 72 72 6f 72 4d 65 73 73 61 67  args.errorMessag
8c40: 65 20 3d 20 65 2e 74 6f 53 74 72 69 6e 67 28 29  e = e.toString()
8c50: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 57 68  ;.            Wh
8c60: 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e 73  Ajaj.Connector.s
8c70: 65 6e 64 48 65 6c 70 65 72 2e 6f 6e 53 65 6e 64  endHelper.onSend
8c80: 45 72 72 6f 72 2e 61 70 70 6c 79 28 20 77 68 73  Error.apply( whs
8c90: 65 6c 66 2c 20 5b 72 65 71 75 65 73 74 2c 20 61  elf, [request, a
8ca0: 72 67 73 5d 20 29 3b 0a 20 20 20 20 20 20 20 20  rgs] );.        
8cb0: 20 20 20 20 72 65 74 75 72 6e 20 75 6e 64 65 66      return undef
8cc0: 69 6e 65 64 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ined;.        }.
8cd0: 20 20 20 20 7d 2f 2a 6a 51 75 65 72 79 28 29 2a      }/*jQuery()*
8ce0: 2f 2c 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20  /,.    /**.     
8cf0: 20 20 20 54 68 69 73 20 69 73 20 61 20 63 6f 6e     This is a con
8d00: 63 72 65 74 65 20 69 6d 70 6c 65 6d 65 6e 74 61  crete implementa
8d10: 74 69 6f 6e 20 6f 66 20 0a 20 20 20 20 20 20 20  tion of .       
8d20: 20 57 68 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f   WhAjaj.Connecto
8d30: 72 2e 70 72 6f 74 6f 74 79 70 65 2e 73 65 6e 64  r.prototype.send
8d40: 49 6d 70 6c 28 29 20 77 68 69 63 68 20 75 73 65  Impl() which use
8d50: 73 20 74 68 65 20 72 68 69 6e 6f 20 0a 20 20 20  s the rhino .   
8d60: 20 20 20 20 20 4a 61 76 61 20 41 50 49 20 74 6f       Java API to
8d70: 20 73 65 6e 64 20 72 65 71 75 65 73 74 73 20 61   send requests a
8d80: 6e 64 20 66 65 74 63 68 20 74 68 65 20 72 65 73  nd fetch the res
8d90: 70 6f 6e 73 65 73 2e 0a 0a 20 20 20 20 20 20 20  ponses...       
8da0: 20 4c 69 6d 69 74 61 74 69 6f 6e 73 20 76 69 73   Limitations vis
8db0: 2d 61 2d 76 69 73 20 74 68 65 20 69 6e 74 65 72  -a-vis the inter
8dc0: 66 61 63 65 3a 0a 0a 20 20 20 20 20 20 20 20 2d  face:..        -
8dd0: 20 74 69 6d 65 6f 75 74 73 20 61 72 65 20 6e 6f   timeouts are no
8de0: 74 20 73 75 70 70 6f 72 74 65 64 2e 0a 0a 20 20  t supported...  
8df0: 20 20 20 20 20 20 2d 20 61 73 79 6e 63 68 72 6f        - asynchro
8e00: 6e 6f 75 73 20 6d 6f 64 65 20 69 73 20 6e 6f 74  nous mode is not
8e10: 20 73 75 70 70 6f 72 74 65 64 20 62 65 63 61 75   supported becau
8e20: 73 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  se implementing 
8e30: 69 74 0a 20 20 20 20 20 20 20 20 72 65 71 75 69  it.        requi
8e40: 72 65 73 20 74 68 65 20 61 62 69 6c 69 74 79 20  res the ability 
8e50: 74 6f 20 6b 69 6c 6c 20 61 20 72 75 6e 6e 69 6e  to kill a runnin
8e60: 67 20 74 68 72 65 61 64 20 28 77 68 69 63 68 20  g thread (which 
8e70: 69 73 20 64 65 70 72 65 63 61 74 65 64 0a 20 20  is deprecated.  
8e80: 20 20 20 20 20 20 69 6e 20 74 68 65 20 4a 61 76        in the Jav
8e90: 61 20 41 50 49 29 2e 0a 0a 20 20 20 20 20 20 20  a API)...       
8ea0: 20 54 4f 44 4f 73 3a 0a 0a 20 20 20 20 20 20 20   TODOs:..       
8eb0: 20 2d 20 61 64 64 20 73 6f 63 6b 65 74 20 74 69   - add socket ti
8ec0: 6d 65 6f 75 74 73 2e 0a 0a 20 20 20 20 20 20 20  meouts...       
8ed0: 20 2d 20 73 75 70 70 6f 72 74 20 48 54 54 50 20   - support HTTP 
8ee0: 70 72 6f 78 79 2e 0a 0a 20 20 20 20 20 20 20 20  proxy...        
8ef0: 54 68 65 20 4a 61 76 61 20 41 50 49 73 20 73 75  The Java APIs su
8f00: 70 70 6f 72 74 20 74 68 69 73 2c 20 69 74 20 6a  pport this, it j
8f10: 75 73 74 20 68 61 73 6e 27 74 20 62 65 65 6e 20  ust hasn't been 
8f20: 61 64 64 65 64 20 68 65 72 65 20 79 65 74 2e 0a  added here yet..
8f30: 20 20 20 20 2a 2f 0a 20 20 20 20 72 68 69 6e 6f      */.    rhino
8f40: 3a 66 75 6e 63 74 69 6f 6e 28 72 65 71 75 65 73  :function(reques
8f50: 74 2c 61 72 67 73 29 0a 20 20 20 20 7b 0a 20 20  t,args).    {.  
8f60: 20 20 20 20 20 20 76 61 72 20 73 65 6c 66 20 3d        var self =
8f70: 20 74 68 69 73 3b 0a 20 20 20 20 20 20 20 20 76   this;.        v
8f80: 61 72 20 64 61 74 61 20 3d 20 72 65 71 75 65 73  ar data = reques
8f90: 74 20 7c 7c 20 75 6e 64 65 66 69 6e 65 64 3b 0a  t || undefined;.
8fa0: 20 20 20 20 20 20 20 20 69 66 28 20 64 61 74 61          if( data
8fb0: 20 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20   ) {.           
8fc0: 20 69 66 28 27 73 74 72 69 6e 67 27 21 3d 3d 74   if('string'!==t
8fd0: 79 70 65 6f 66 20 64 61 74 61 29 20 7b 0a 20 20  ypeof data) {.  
8fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
8ff0: 79 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  y {.            
9000: 20 20 20 20 20 20 20 20 64 61 74 61 20 3d 20 4a          data = J
9010: 53 4f 4e 2e 73 74 72 69 6e 67 69 66 79 28 64 61  SON.stringify(da
9020: 74 61 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ta);.           
9030: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
9040: 20 20 20 20 20 20 20 63 61 74 63 68 28 65 29 20         catch(e) 
9050: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
9060: 20 20 20 20 20 20 57 68 41 6a 61 6a 2e 43 6f 6e        WhAjaj.Con
9070: 6e 65 63 74 6f 72 2e 73 65 6e 64 48 65 6c 70 65  nector.sendHelpe
9080: 72 2e 6f 6e 53 65 6e 64 45 72 72 6f 72 2e 61 70  r.onSendError.ap
9090: 70 6c 79 28 20 73 65 6c 66 2c 20 5b 72 65 71 75  ply( self, [requ
90a0: 65 73 74 2c 20 61 72 67 73 5d 20 29 3b 0a 20 20  est, args] );.  
90b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90c0: 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20    return;.      
90d0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
90e0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
90f0: 20 20 7d 0a 20 20 20 20 20 20 20 20 76 61 72 20    }.        var 
9100: 75 72 6c 3b 0a 20 20 20 20 20 20 20 20 76 61 72  url;.        var
9110: 20 63 6f 6e 3b 0a 20 20 20 20 20 20 20 20 76 61   con;.        va
9120: 72 20 49 4f 20 3d 20 6e 65 77 20 4a 61 76 61 49  r IO = new JavaI
9130: 6d 70 6f 72 74 65 72 28 6a 61 76 61 2e 69 6f 29  mporter(java.io)
9140: 3b 0a 20 20 20 20 20 20 20 20 76 61 72 20 77 72  ;.        var wr
9150: 3b 0a 20 20 20 20 20 20 20 20 76 61 72 20 72 64  ;.        var rd
9160: 2c 20 6c 6e 2c 20 6a 73 6f 6e 20 3d 20 5b 5d 3b  , ln, json = [];
9170: 0a 20 20 20 20 20 20 20 20 66 75 6e 63 74 69 6f  .        functio
9180: 6e 20 73 65 74 49 6e 63 6f 6d 69 6e 67 43 6f 6f  n setIncomingCoo
9190: 6b 69 65 73 28 6c 69 73 74 29 7b 0a 20 20 20 20  kies(list){.    
91a0: 20 20 20 20 20 20 20 20 69 66 28 21 6c 69 73 74          if(!list
91b0: 20 7c 7c 20 21 6c 69 73 74 2e 6c 65 6e 67 74 68   || !list.length
91c0: 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  ) return;.      
91d0: 20 20 20 20 20 20 69 66 28 20 21 73 65 6c 66 2e        if( !self.
91e0: 63 6f 6f 6b 69 65 73 20 29 20 73 65 6c 66 2e 63  cookies ) self.c
91f0: 6f 6f 6b 69 65 73 20 3d 20 7b 7d 3b 0a 20 20 20  ookies = {};.   
9200: 20 20 20 20 20 20 20 20 20 76 61 72 20 6b 2c 20           var k, 
9210: 76 2c 20 69 3b 0a 20 20 20 20 20 20 20 20 20 20  v, i;.          
9220: 20 20 66 6f 72 28 20 69 20 3d 20 30 3b 20 69 20    for( i = 0; i 
9230: 3c 20 6c 69 73 74 2e 6c 65 6e 67 74 68 3b 20 2b  < list.length; +
9240: 2b 69 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  +i ){.          
9250: 20 20 20 20 20 20 76 20 3d 20 6c 69 73 74 5b 69        v = list[i
9260: 5d 2e 73 70 6c 69 74 28 27 3d 27 2c 32 29 3b 0a  ].split('=',2);.
9270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9280: 6b 20 3d 20 64 65 63 6f 64 65 55 52 49 43 6f 6d  k = decodeURICom
9290: 70 6f 6e 65 6e 74 28 76 5b 30 5d 29 0a 20 20 20  ponent(v[0]).   
92a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 76 20 3d               v =
92b0: 20 76 5b 30 5d 20 3f 20 64 65 63 6f 64 65 55 52   v[0] ? decodeUR
92c0: 49 43 6f 6d 70 6f 6e 65 6e 74 28 76 5b 30 5d 2e  IComponent(v[0].
92d0: 73 70 6c 69 74 28 27 3b 27 2c 32 29 5b 30 5d 29  split(';',2)[0])
92e0: 20 3a 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20   : null;.       
92f0: 20 20 20 20 20 20 20 20 20 2f 2f 70 72 69 6e 74           //print
9300: 28 22 52 45 43 45 49 56 45 44 20 43 4f 4f 4b 49  ("RECEIVED COOKI
9310: 45 3a 20 22 2b 6b 2b 22 3d 22 2b 76 29 3b 0a 20  E: "+k+"="+v);. 
9320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
9330: 66 28 21 76 29 20 7b 0a 20 20 20 20 20 20 20 20  f(!v) {.        
9340: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 6c 65              dele
9350: 74 65 20 73 65 6c 66 2e 63 6f 6f 6b 69 65 73 5b  te self.cookies[
9360: 6b 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  k];.            
9370: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
9380: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
9390: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
93a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6c               sel
93b0: 66 2e 63 6f 6f 6b 69 65 73 5b 6b 5d 20 3d 20 76  f.cookies[k] = v
93c0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
93d0: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
93e0: 7d 0a 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20  }.        };.   
93f0: 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 73 65       function se
9400: 74 4f 75 74 62 6f 75 6e 64 43 6f 6f 6b 69 65 73  tOutboundCookies
9410: 28 63 6f 6e 6e 29 7b 0a 20 20 20 20 20 20 20 20  (conn){.        
9420: 20 20 20 20 69 66 28 21 73 65 6c 66 2e 63 6f 6f      if(!self.coo
9430: 6b 69 65 73 29 20 72 65 74 75 72 6e 3b 0a 20 20  kies) return;.  
9440: 20 20 20 20 20 20 20 20 20 20 76 61 72 20 6b 2c            var k,
9450: 20 76 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20   v;.            
9460: 66 6f 72 28 20 6b 20 69 6e 20 73 65 6c 66 2e 63  for( k in self.c
9470: 6f 6f 6b 69 65 73 20 29 7b 0a 20 20 20 20 20 20  ookies ){.      
9480: 20 20 20 20 20 20 20 20 20 20 69 66 28 21 73 65            if(!se
9490: 6c 66 2e 63 6f 6f 6b 69 65 73 2e 68 61 73 4f 77  lf.cookies.hasOw
94a0: 6e 50 72 6f 70 65 72 74 79 28 6b 29 29 20 63 6f  nProperty(k)) co
94b0: 6e 74 69 6e 75 65 20 2f 2a 6b 6c 75 64 67 65 20  ntinue /*kludge 
94c0: 66 6f 72 20 62 72 6f 6b 65 6e 20 4a 53 20 6c 69  for broken JS li
94d0: 62 73 2a 2f 3b 0a 20 20 20 20 20 20 20 20 20 20  bs*/;.          
94e0: 20 20 20 20 20 20 76 20 3d 20 73 65 6c 66 2e 63        v = self.c
94f0: 6f 6f 6b 69 65 73 5b 6b 5d 3b 0a 20 20 20 20 20  ookies[k];.     
9500: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 2e             conn.
9510: 61 64 64 52 65 71 75 65 73 74 50 72 6f 70 65 72  addRequestProper
9520: 74 79 28 22 43 6f 6f 6b 69 65 22 2c 20 65 6e 63  ty("Cookie", enc
9530: 6f 64 65 55 52 49 43 6f 6d 70 6f 6e 65 6e 74 28  odeURIComponent(
9540: 6b 29 2b 27 3d 27 2b 65 6e 63 6f 64 65 55 52 49  k)+'='+encodeURI
9550: 43 6f 6d 70 6f 6e 65 6e 74 28 76 29 29 3b 0a 20  Component(v));. 
9560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9570: 2f 70 72 69 6e 74 28 22 53 45 4e 44 49 4e 47 20  /print("SENDING 
9580: 43 4f 4f 4b 49 45 3a 20 22 2b 6b 2b 22 3d 22 2b  COOKIE: "+k+"="+
9590: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  v);.            
95a0: 7d 0a 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20  }.        };.   
95b0: 20 20 20 20 20 74 72 79 7b 0a 20 20 20 20 20 20       try{.      
95c0: 20 20 20 20 20 20 75 72 6c 20 3d 20 6e 65 77 20        url = new 
95d0: 6a 61 76 61 2e 6e 65 74 2e 55 52 4c 28 20 61 72  java.net.URL( ar
95e0: 67 73 2e 75 72 6c 20 29 0a 20 20 20 20 20 20 20  gs.url ).       
95f0: 20 20 20 20 20 63 6f 6e 20 3d 20 75 72 6c 2e 6f       con = url.o
9600: 70 65 6e 43 6f 6e 6e 65 63 74 69 6f 6e 28 2f 2a  penConnection(/*
9610: 46 49 58 4d 45 3a 20 61 64 64 20 70 72 6f 78 79  FIXME: add proxy
9620: 20 73 75 70 70 6f 72 74 21 2a 2f 29 3b 0a 20 20   support!*/);.  
9630: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 2e 73 65            con.se
9640: 74 52 65 71 75 65 73 74 50 72 6f 70 65 72 74 79  tRequestProperty
9650: 28 22 41 63 63 65 70 74 2d 43 68 61 72 73 65 74  ("Accept-Charset
9660: 22 2c 22 75 74 66 2d 38 22 29 3b 0a 20 20 20 20  ","utf-8");.    
9670: 20 20 20 20 20 20 20 20 73 65 74 4f 75 74 62 6f          setOutbo
9680: 75 6e 64 43 6f 6f 6b 69 65 73 28 63 6f 6e 29 3b  undCookies(con);
9690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28  .            if(
96a0: 64 61 74 61 29 7b 0a 20 20 20 20 20 20 20 20 20  data){.         
96b0: 20 20 20 20 20 20 20 63 6f 6e 2e 73 65 74 52 65         con.setRe
96c0: 71 75 65 73 74 50 72 6f 70 65 72 74 79 28 22 43  questProperty("C
96d0: 6f 6e 74 65 6e 74 2d 54 79 70 65 22 2c 22 61 70  ontent-Type","ap
96e0: 70 6c 69 63 61 74 69 6f 6e 2f 6a 73 6f 6e 3b 20  plication/json; 
96f0: 63 68 61 72 73 65 74 3d 75 74 66 2d 38 22 29 3b  charset=utf-8");
9700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9710: 20 63 6f 6e 2e 73 65 74 44 6f 4f 75 74 70 75 74   con.setDoOutput
9720: 28 20 74 72 75 65 20 29 3b 0a 20 20 20 20 20 20  ( true );.      
9730: 20 20 20 20 20 20 20 20 20 20 77 72 20 3d 20 6e            wr = n
9740: 65 77 20 49 4f 2e 4f 75 74 70 75 74 53 74 72 65  ew IO.OutputStre
9750: 61 6d 57 72 69 74 65 72 28 63 6f 6e 2e 67 65 74  amWriter(con.get
9760: 4f 75 74 70 75 74 53 74 72 65 61 6d 28 29 29 0a  OutputStream()).
9770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9780: 77 72 2e 77 72 69 74 65 28 64 61 74 61 29 3b 0a  wr.write(data);.
9790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97a0: 77 72 2e 66 6c 75 73 68 28 29 3b 0a 20 20 20 20  wr.flush();.    
97b0: 20 20 20 20 20 20 20 20 20 20 20 20 77 72 2e 63              wr.c
97c0: 6c 6f 73 65 28 29 3b 0a 20 20 20 20 20 20 20 20  lose();.        
97d0: 20 20 20 20 20 20 20 20 77 72 20 3d 20 6e 75 6c          wr = nul
97e0: 6c 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  l;.             
97f0: 20 20 20 2f 2f 70 72 69 6e 74 28 22 50 4f 53 54     //print("POST
9800: 45 44 3a 20 22 2b 64 61 74 61 29 3b 0a 20 20 20  ED: "+data);.   
9810: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
9820: 20 20 20 20 20 20 20 72 64 20 3d 20 6e 65 77 20         rd = new 
9830: 49 4f 2e 42 75 66 66 65 72 65 64 52 65 61 64 65  IO.BufferedReade
9840: 72 28 6e 65 77 20 49 4f 2e 49 6e 70 75 74 53 74  r(new IO.InputSt
9850: 72 65 61 6d 52 65 61 64 65 72 28 63 6f 6e 2e 67  reamReader(con.g
9860: 65 74 49 6e 70 75 74 53 74 72 65 61 6d 28 29 29  etInputStream())
9870: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  );.            /
9880: 2f 76 61 72 20 73 6b 69 70 70 65 64 48 65 61 64  /var skippedHead
9890: 65 72 73 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20  ers = false;.   
98a0: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28           while (
98b0: 28 6c 69 6e 65 20 3d 20 72 64 2e 72 65 61 64 4c  (line = rd.readL
98c0: 69 6e 65 28 29 29 20 21 3d 3d 20 6e 75 6c 6c 29  ine()) !== null)
98d0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
98e0: 20 20 20 2f 2f 70 72 69 6e 74 28 22 4c 49 4e 45     //print("LINE
98f0: 3a 20 22 2b 6c 69 6e 65 29 3b 0a 20 20 20 20 20  : "+line);.     
9900: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66 28             //if(
9910: 21 6c 69 6e 65 2e 6c 65 6e 67 74 68 20 26 26 20  !line.length && 
9920: 21 73 6b 69 70 70 65 64 48 65 61 64 65 72 73 29  !skippedHeaders)
9930: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
9940: 20 20 2f 2f 20 20 20 20 73 6b 69 70 70 65 64 48    //    skippedH
9950: 65 61 64 65 72 73 20 3d 20 74 72 75 65 3b 0a 20  eaders = true;. 
9960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9970: 2f 20 6a 73 6f 6e 20 3d 20 5b 5d 3b 0a 20 20 20  / json = [];.   
9980: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
9990: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20     continue;.   
99a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7d               //}
99b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
99c0: 20 6a 73 6f 6e 2e 70 75 73 68 28 6c 69 6e 65 29   json.push(line)
99d0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
99e0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 49              setI
99f0: 6e 63 6f 6d 69 6e 67 43 6f 6f 6b 69 65 73 28 63  ncomingCookies(c
9a00: 6f 6e 2e 67 65 74 48 65 61 64 65 72 46 69 65 6c  on.getHeaderFiel
9a10: 64 73 28 29 2e 67 65 74 28 22 53 65 74 2d 43 6f  ds().get("Set-Co
9a20: 6f 6b 69 65 22 29 29 3b 0a 20 20 20 20 20 20 20  okie"));.       
9a30: 20 7d 63 61 74 63 68 28 65 29 7b 0a 20 20 20 20   }catch(e){.    
9a40: 20 20 20 20 20 20 20 20 61 72 67 73 2e 65 72 72          args.err
9a50: 6f 72 4d 65 73 73 61 67 65 20 3d 20 65 2e 74 6f  orMessage = e.to
9a60: 53 74 72 69 6e 67 28 29 3b 0a 20 20 20 20 20 20  String();.      
9a70: 20 20 20 20 20 20 57 68 41 6a 61 6a 2e 43 6f 6e        WhAjaj.Con
9a80: 6e 65 63 74 6f 72 2e 73 65 6e 64 48 65 6c 70 65  nector.sendHelpe
9a90: 72 2e 6f 6e 53 65 6e 64 45 72 72 6f 72 2e 61 70  r.onSendError.ap
9aa0: 70 6c 79 28 20 73 65 6c 66 2c 20 5b 72 65 71 75  ply( self, [requ
9ab0: 65 73 74 2c 20 61 72 67 73 5d 20 29 3b 0a 20 20  est, args] );.  
9ac0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9ad0: 20 75 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20 20   undefined;.    
9ae0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 74 72      }.        tr
9af0: 79 20 7b 20 69 66 28 77 72 29 20 77 72 2e 63 6c  y { if(wr) wr.cl
9b00: 6f 73 65 28 29 3b 20 7d 20 63 61 74 63 68 28 65  ose(); } catch(e
9b10: 29 20 7b 20 2f 2a 69 67 6e 6f 72 65 2a 2f 7d 0a  ) { /*ignore*/}.
9b20: 20 20 20 20 20 20 20 20 74 72 79 20 7b 20 69 66          try { if
9b30: 28 72 64 29 20 72 64 2e 63 6c 6f 73 65 28 29 3b  (rd) rd.close();
9b40: 20 7d 20 63 61 74 63 68 28 65 29 20 7b 20 2f 2a   } catch(e) { /*
9b50: 69 67 6e 6f 72 65 2a 2f 7d 0a 20 20 20 20 20 20  ignore*/}.      
9b60: 20 20 6a 73 6f 6e 20 3d 20 6a 73 6f 6e 2e 6a 6f    json = json.jo
9b70: 69 6e 28 27 27 29 3b 0a 20 20 20 20 20 20 20 20  in('');.        
9b80: 2f 2f 70 72 69 6e 74 28 22 52 45 41 44 20 49 4e  //print("READ IN
9b90: 20 4a 53 4f 4e 3a 20 22 2b 6a 73 6f 6e 29 3b 0a   JSON: "+json);.
9ba0: 20 20 20 20 20 20 20 20 57 68 41 6a 61 6a 2e 43          WhAjaj.C
9bb0: 6f 6e 6e 65 63 74 6f 72 2e 73 65 6e 64 48 65 6c  onnector.sendHel
9bc0: 70 65 72 2e 6f 6e 53 65 6e 64 53 75 63 63 65 73  per.onSendSucces
9bd0: 73 2e 61 70 70 6c 79 28 20 73 65 6c 66 2c 20 5b  s.apply( self, [
9be0: 72 65 71 75 65 73 74 2c 20 6a 73 6f 6e 2c 20 61  request, json, a
9bf0: 72 67 73 5d 20 29 3b 0a 20 20 20 20 7d 2f 2a 72  rgs] );.    }/*r
9c00: 68 69 6e 6f 2a 2f 0a 7d 3b 0a 0a 2f 2a 2a 0a 20  hino*/.};../**. 
9c10: 20 20 20 41 6e 20 69 6e 74 65 72 6e 61 6c 20 66     An internal f
9c20: 75 6e 63 74 69 6f 6e 20 77 68 69 63 68 20 74 61  unction which ta
9c30: 6b 65 73 20 61 6e 20 6f 62 6a 65 63 74 20 63 6f  kes an object co
9c40: 6e 74 61 69 6e 69 6e 67 20 70 72 6f 70 65 72 74  ntaining propert
9c50: 69 65 73 20 0a 20 20 20 20 66 6f 72 20 61 20 57  ies .    for a W
9c60: 68 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72 20  hAjaj.Connector 
9c70: 6e 65 74 77 6f 72 6b 20 72 65 71 75 65 73 74 2e  network request.
9c80: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 63   This function c
9c90: 72 65 61 74 65 73 20 61 20 6e 65 77 20 0a 20 20  reates a new .  
9ca0: 20 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e    object contain
9cb0: 69 6e 67 20 61 20 73 75 70 65 72 73 65 74 20 6f  ing a superset o
9cc0: 66 20 74 68 65 20 70 72 6f 70 65 72 74 69 65 73  f the properties
9cd0: 20 66 72 6f 6d 3a 0a 0a 20 20 20 20 61 29 20 6f   from:..    a) o
9ce0: 70 74 0a 20 20 20 20 62 29 20 74 68 69 73 2e 6f  pt.    b) this.o
9cf0: 70 74 69 6f 6e 73 0a 20 20 20 20 63 29 20 57 68  ptions.    c) Wh
9d00: 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e 6f  Ajaj.Connector.o
9d10: 70 74 69 6f 6e 73 2e 61 6a 61 78 0a 0a 20 20 20  ptions.ajax..   
9d20: 20 69 6e 20 74 68 61 74 20 6f 72 64 65 72 2c 20   in that order, 
9d30: 75 73 69 6e 67 20 74 68 65 20 66 69 72 73 74 20  using the first 
9d40: 6f 6e 65 20 69 74 20 66 69 6e 64 73 2e 0a 0a 20  one it finds... 
9d50: 20 20 20 41 6c 6c 20 6e 6f 6e 2d 66 75 6e 63 74     All non-funct
9d60: 69 6f 6e 20 70 72 6f 70 65 72 74 69 65 73 20 61  ion properties a
9d70: 72 65 20 5f 64 65 65 70 6c 79 5f 20 63 6f 70 69  re _deeply_ copi
9d80: 65 64 20 76 69 61 20 4a 53 4f 4e 20 63 6c 6f 6e  ed via JSON clon
9d90: 69 6e 67 20 0a 20 20 20 20 69 6e 20 6f 72 64 65  ing .    in orde
9da0: 72 20 74 6f 20 70 72 65 76 65 6e 74 20 61 63 63  r to prevent acc
9db0: 69 64 65 6e 74 61 6c 20 22 63 72 6f 73 73 2d 72  idental "cross-r
9dc0: 65 71 75 65 73 74 20 70 6f 6c 6c 65 6e 61 74 69  equest pollenati
9dd0: 6f 6e 22 20 28 62 65 65 6e 20 0a 20 20 20 20 74  on" (been .    t
9de0: 68 65 72 65 2c 20 64 6f 6e 65 20 74 68 61 74 29  here, done that)
9df0: 2e 20 46 75 6e 63 74 69 6f 6e 73 20 63 61 6e 6e  . Functions cann
9e00: 6f 74 20 62 65 20 63 6c 6f 6e 65 64 20 61 6e 64  ot be cloned and
9e10: 20 61 72 65 20 73 69 6d 70 6c 79 20 0a 20 20 20   are simply .   
9e20: 20 63 6f 70 69 65 64 20 62 79 20 72 65 66 65 72   copied by refer
9e30: 65 6e 63 65 2e 0a 20 20 20 20 0a 20 20 20 20 54  ence..    .    T
9e40: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 74 68 72  his function thr
9e50: 6f 77 73 20 69 66 20 4a 53 4f 4e 2d 63 6f 70 79  ows if JSON-copy
9e60: 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68 65 20 6f  ing one of the o
9e70: 70 74 69 6f 6e 73 20 66 61 69 6c 73 0a 20 20 20  ptions fails.   
9e80: 20 28 65 2e 67 2e 20 64 75 65 20 74 6f 20 63 79   (e.g. due to cy
9e90: 63 6c 69 63 20 64 61 74 61 20 73 74 72 75 63 74  clic data struct
9ea0: 75 72 65 73 29 2e 0a 20 20 20 20 0a 20 20 20 20  ures)..    .    
9eb0: 52 65 6d 69 6e 64 65 72 20 74 6f 20 73 65 6c 66  Reminder to self
9ec0: 3a 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  : this function 
9ed0: 64 6f 65 73 20 6e 6f 74 20 22 6e 6f 72 6d 61 6c  does not "normal
9ee0: 69 7a 65 22 20 6f 70 74 2e 75 72 6c 50 61 72 61  ize" opt.urlPara
9ef0: 6d 0a 20 20 20 20 62 79 20 65 6e 63 6f 64 69 6e  m.    by encodin
9f00: 67 20 69 74 20 69 6e 74 6f 20 6f 70 74 2e 75 72  g it into opt.ur
9f10: 6c 2c 20 6d 61 69 6e 6c 79 20 66 6f 72 20 68 69  l, mainly for hi
9f20: 73 74 6f 72 69 63 61 6c 20 72 65 61 73 6f 6e 73  storical reasons
9f30: 2c 20 62 75 74 0a 20 20 20 20 61 6c 73 6f 20 62  , but.    also b
9f40: 65 63 61 75 73 65 20 74 68 61 74 20 62 65 68 61  ecause that beha
9f50: 76 69 6f 75 72 20 77 61 73 20 73 70 65 63 69 66  viour was specif
9f60: 69 63 61 6c 6c 79 20 75 6e 64 65 73 69 72 61 62  ically undesirab
9f70: 6c 65 20 69 6e 20 74 68 69 73 0a 20 20 20 20 63  le in this.    c
9f80: 6f 64 65 27 73 20 67 65 6e 65 74 69 63 20 66 61  ode's genetic fa
9f90: 74 68 65 72 2e 0a 2a 2f 0a 57 68 41 6a 61 6a 2e  ther..*/.WhAjaj.
9fa0: 43 6f 6e 6e 65 63 74 6f 72 2e 70 72 6f 74 6f 74  Connector.protot
9fb0: 79 70 65 2e 6e 6f 72 6d 61 6c 69 7a 65 41 6a 61  ype.normalizeAja
9fc0: 78 50 61 72 61 6d 65 74 65 72 73 20 3d 20 66 75  xParameters = fu
9fd0: 6e 63 74 69 6f 6e 20 28 6f 70 74 29 0a 7b 0a 20  nction (opt).{. 
9fe0: 20 20 20 76 61 72 20 72 63 20 3d 20 7b 7d 3b 0a     var rc = {};.
9ff0: 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6d 65 72      function mer
a000: 67 65 28 6b 2c 76 29 0a 20 20 20 20 7b 0a 20 20  ge(k,v).    {.  
a010: 20 20 20 20 20 20 69 66 28 20 72 63 2e 68 61 73        if( rc.has
a020: 4f 77 6e 50 72 6f 70 65 72 74 79 28 6b 29 20 29  OwnProperty(k) )
a030: 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20   return;.       
a040: 20 65 6c 73 65 20 69 66 28 20 57 68 41 6a 61 6a   else if( WhAjaj
a050: 2e 69 73 46 75 6e 63 74 69 6f 6e 28 76 29 20 29  .isFunction(v) )
a060: 20 7b 7d 0a 20 20 20 20 20 20 20 20 65 6c 73 65   {}.        else
a070: 20 69 66 28 20 57 68 41 6a 61 6a 2e 69 73 4f 62   if( WhAjaj.isOb
a080: 6a 65 63 74 28 76 29 20 29 20 76 20 3d 20 4a 53  ject(v) ) v = JS
a090: 4f 4e 2e 70 61 72 73 65 28 20 4a 53 4f 4e 2e 73  ON.parse( JSON.s
a0a0: 74 72 69 6e 67 69 66 79 28 76 29 20 29 3b 0a 20  tringify(v) );. 
a0b0: 20 20 20 20 20 20 20 72 63 5b 6b 5d 3d 76 3b 0a         rc[k]=v;.
a0c0: 20 20 20 20 7d 0a 20 20 20 20 66 75 6e 63 74 69      }.    functi
a0d0: 6f 6e 20 63 70 28 6f 62 6a 29 20 7b 0a 20 20 20  on cp(obj) {.   
a0e0: 20 20 20 20 20 69 66 28 20 21 20 57 68 41 6a 61       if( ! WhAja
a0f0: 6a 2e 69 73 4f 62 6a 65 63 74 28 6f 62 6a 29 20  j.isObject(obj) 
a100: 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  ) return;.      
a110: 20 20 76 61 72 20 6b 3b 0a 20 20 20 20 20 20 20    var k;.       
a120: 20 66 6f 72 28 20 6b 20 69 6e 20 6f 62 6a 20 29   for( k in obj )
a130: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69   {.            i
a140: 66 28 20 21 20 6f 62 6a 2e 68 61 73 4f 77 6e 50  f( ! obj.hasOwnP
a150: 72 6f 70 65 72 74 79 28 6b 29 20 29 20 63 6f 6e  roperty(k) ) con
a160: 74 69 6e 75 65 20 2f 2a 20 69 20 77 69 6c 6c 20  tinue /* i will 
a170: 61 6c 77 61 79 73 20 68 61 74 65 20 74 68 65 20  always hate the 
a180: 50 72 6f 74 6f 74 79 70 65 20 64 65 73 69 67 6e  Prototype design
a190: 65 72 73 20 66 6f 72 20 74 68 69 73 2e 20 2a 2f  ers for this. */
a1a0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 65  ;.            me
a1b0: 72 67 65 28 6b 2c 20 6f 62 6a 5b 6b 5d 29 3b 0a  rge(k, obj[k]);.
a1c0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a          }.    }.
a1d0: 20 20 20 20 63 70 28 20 6f 70 74 20 29 3b 0a 20      cp( opt );. 
a1e0: 20 20 20 63 70 28 20 74 68 69 73 2e 6f 70 74 69     cp( this.opti
a1f0: 6f 6e 73 20 29 3b 0a 20 20 20 20 63 70 28 20 57  ons );.    cp( W
a200: 68 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e  hAjaj.Connector.
a210: 6f 70 74 69 6f 6e 73 2e 61 6a 61 78 20 29 3b 0a  options.ajax );.
a220: 20 20 20 20 2f 2f 20 6e 6f 2c 20 6e 6f 74 20 68      // no, not h
a230: 65 72 65 3a 20 72 63 2e 75 72 6c 20 3d 20 57 68  ere: rc.url = Wh
a240: 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e 73  Ajaj.Connector.s
a250: 65 6e 64 48 65 6c 70 65 72 2e 6e 6f 72 6d 61 6c  endHelper.normal
a260: 69 7a 65 55 52 4c 28 72 63 29 3b 0a 20 20 20 20  izeURL(rc);.    
a270: 72 65 74 75 72 6e 20 72 63 3b 0a 7d 3b 0a 0a 2f  return rc;.};../
a280: 2a 2a 0a 20 20 20 20 54 68 69 73 20 69 73 20 74  **.    This is t
a290: 68 65 20 67 65 6e 65 72 69 63 20 69 6e 74 65 72  he generic inter
a2a0: 66 61 63 65 20 66 6f 72 20 6d 61 6b 69 6e 67 20  face for making 
a2b0: 63 61 6c 6c 73 20 74 6f 20 61 20 62 61 63 6b 2d  calls to a back-
a2c0: 65 6e 64 20 0a 20 20 20 20 4a 53 4f 4e 2d 70 72  end .    JSON-pr
a2d0: 6f 64 75 63 69 6e 67 20 72 65 71 75 65 73 74 20  oducing request 
a2e0: 68 61 6e 64 6c 65 72 2e 20 49 74 20 69 73 20 61  handler. It is a
a2f0: 20 73 69 6d 70 6c 65 20 77 72 61 70 70 65 72 20   simple wrapper 
a300: 61 72 6f 75 6e 64 20 0a 20 20 20 20 57 68 41 6a  around .    WhAj
a310: 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e 70 72 6f  aj.Connector.pro
a320: 74 6f 74 79 70 65 2e 73 65 6e 64 49 6d 70 6c 28  totype.sendImpl(
a330: 29 2c 20 77 68 69 63 68 20 6a 75 73 74 20 6e 6f  ), which just no
a340: 72 6d 61 6c 69 7a 65 73 20 74 68 65 20 0a 20 20  rmalizes the .  
a350: 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 70 74    connection opt
a360: 69 6f 6e 73 20 66 6f 72 20 73 65 6e 64 49 6d 70  ions for sendImp
a370: 6c 28 29 20 61 6e 64 20 6d 61 6b 65 73 20 73 75  l() and makes su
a380: 72 65 20 74 68 61 74 20 0a 20 20 20 20 6f 70 74  re that .    opt
a390: 2e 62 65 66 6f 72 65 53 65 6e 64 28 29 20 69 73  .beforeSend() is
a3a0: 20 28 70 6f 73 73 69 62 6c 79 29 20 63 61 6c 6c   (possibly) call
a3b0: 65 64 2e 0a 20 20 20 20 0a 20 20 20 20 54 68 65  ed..    .    The
a3c0: 20 72 65 71 75 65 73 74 20 70 61 72 61 6d 65 74   request paramet
a3d0: 65 72 20 6d 75 73 74 20 65 69 74 68 65 72 20 62  er must either b
a3e0: 65 20 66 61 6c 73 65 2f 6e 75 6c 6c 2f 65 6d 70  e false/null/emp
a3f0: 74 79 20 6f 72 20 61 20 0a 20 20 20 20 66 75 6c  ty or a .    ful
a400: 6c 79 2d 70 6f 70 75 6c 61 74 65 64 20 4a 53 4f  ly-populated JSO
a410: 4e 2d 61 62 6c 65 20 72 65 71 75 65 73 74 20 6f  N-able request o
a420: 62 6a 65 63 74 20 28 77 68 69 63 68 20 77 69 6c  bject (which wil
a430: 6c 20 62 65 20 73 65 6e 74 20 61 73 20 0a 20 20  l be sent as .  
a440: 20 20 75 6e 65 6e 63 6f 64 65 64 20 61 70 70 6c    unencoded appl
a450: 69 63 61 74 69 6f 6e 2f 6a 73 6f 6e 20 74 65 78  ication/json tex
a460: 74 29 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  t), depending on
a470: 20 74 68 65 20 74 79 70 65 20 6f 66 20 0a 20 20   the type of .  
a480: 20 20 72 65 71 75 65 73 74 20 62 65 69 6e 67 20    request being 
a490: 6d 61 64 65 2e 20 49 74 20 69 73 20 6e 65 76 65  made. It is neve
a4a0: 72 20 73 65 6d 61 6e 74 69 63 61 6c 6c 79 20 6c  r semantically l
a4b0: 65 67 61 6c 20 28 69 6e 20 74 68 69 73 20 41 50  egal (in this AP
a4c0: 49 29 20 0a 20 20 20 20 66 6f 72 20 72 65 71 75  I) .    for requ
a4d0: 65 73 74 20 74 6f 20 62 65 20 61 20 73 74 72 69  est to be a stri
a4e0: 6e 67 2f 6e 75 6d 62 65 72 2f 74 72 75 65 2f 61  ng/number/true/a
a4f0: 72 72 61 79 20 76 61 6c 75 65 2e 20 41 73 20 61  rray value. As a
a500: 20 72 75 6c 65 2c 20 0a 20 20 20 20 6f 6e 6c 79   rule, .    only
a510: 20 50 4f 53 54 20 72 65 71 75 65 73 74 73 20 75   POST requests u
a520: 73 65 20 74 68 65 20 72 65 71 75 65 73 74 20 64  se the request d
a530: 61 74 61 2e 20 47 45 54 20 72 65 71 75 65 73 74  ata. GET request
a540: 73 20 73 68 6f 75 6c 64 20 0a 20 20 20 20 65 6e  s should .    en
a550: 63 6f 64 65 20 74 68 65 69 72 20 64 61 74 61 20  code their data 
a560: 69 6e 20 6f 70 74 2e 75 72 6c 20 6f 72 20 6f 70  in opt.url or op
a570: 74 2e 75 72 6c 50 61 72 61 6d 20 28 73 65 65 20  t.urlParam (see 
a580: 62 65 6c 6f 77 29 2e 0a 20 20 20 20 0a 20 20 20  below)..    .   
a590: 20 6f 70 74 20 6d 75 73 74 20 63 6f 6e 74 61 69   opt must contai
a5a0: 6e 20 74 68 65 20 6e 65 74 77 6f 72 6b 2d 72 65  n the network-re
a5b0: 6c 61 74 65 64 20 70 61 72 61 6d 65 74 65 72 73  lated parameters
a5c0: 20 66 6f 72 20 74 68 65 20 72 65 71 75 65 73 74   for the request
a5d0: 2e 20 0a 20 20 20 20 50 61 72 61 6d 74 65 72 73  . .    Paramters
a5e0: 20 5f 6e 6f 74 5f 20 73 65 74 20 69 6e 20 6f 70   _not_ set in op
a5f0: 74 20 61 72 65 20 70 75 6c 6c 65 64 20 66 72 6f  t are pulled fro
a600: 6d 20 74 68 69 73 2e 6f 70 74 69 6f 6e 73 20 6f  m this.options o
a610: 72 20 0a 20 20 20 20 57 68 41 6a 61 6a 2e 43 6f  r .    WhAjaj.Co
a620: 6e 6e 65 63 74 6f 72 2e 6f 70 74 69 6f 6e 73 2e  nnector.options.
a630: 61 6a 61 78 20 28 69 6e 20 74 68 61 74 20 6f 72  ajax (in that or
a640: 64 65 72 2c 20 75 73 69 6e 67 20 74 68 65 20 66  der, using the f
a650: 69 72 73 74 20 0a 20 20 20 20 76 61 6c 75 65 20  irst .    value 
a660: 69 74 20 66 69 6e 64 73 29 2e 20 54 68 75 73 20  it finds). Thus 
a670: 74 68 65 20 73 65 74 20 6f 66 20 63 6f 6e 6e 65  the set of conne
a680: 63 74 69 6f 6e 2d 6c 65 76 65 6c 20 6f 70 74 69  ction-level opti
a690: 6f 6e 73 20 75 73 65 64 20 0a 20 20 20 20 66 6f  ons used .    fo
a6a0: 72 20 74 68 65 20 72 65 71 75 65 73 74 20 61 72  r the request ar
a6b0: 65 20 61 20 73 75 70 65 72 73 65 74 20 6f 66 20  e a superset of 
a6c0: 74 68 6f 73 65 20 76 61 72 69 6f 75 73 20 73 6f  those various so
a6d0: 75 72 63 65 73 2e 0a 20 20 20 20 0a 20 20 20 20  urces..    .    
a6e0: 54 68 65 20 22 6e 6f 72 6d 61 6c 69 7a 65 64 22  The "normalized"
a6f0: 20 28 6f 72 20 22 73 75 70 65 72 69 6d 70 6f 73   (or "superimpos
a700: 65 64 22 29 20 6f 70 74 20 6f 62 6a 65 63 74 27  ed") opt object'
a710: 73 20 55 52 4c 20 6d 61 79 20 62 65 20 0a 20 20  s URL may be .  
a720: 20 20 6d 6f 64 69 66 69 65 64 20 62 65 66 6f 72    modified befor
a730: 65 20 74 68 65 20 72 65 71 75 65 73 74 20 69 73  e the request is
a740: 20 73 65 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f 77   sent, as follow
a750: 73 3a 0a 0a 20 20 20 20 69 66 20 6f 70 74 2e 75  s:..    if opt.u
a760: 72 6c 50 61 72 61 6d 20 69 73 20 61 20 73 74 72  rlParam is a str
a770: 69 6e 67 20 74 68 65 6e 20 69 74 20 69 73 20 61  ing then it is a
a780: 73 73 75 6d 65 64 20 74 6f 20 62 65 20 70 72 6f  ssumed to be pro
a790: 70 65 72 6c 79 20 0a 20 20 20 20 55 52 4c 2d 65  perly .    URL-e
a7a0: 6e 63 6f 64 65 64 20 70 61 72 61 6d 65 74 65 72  ncoded parameter
a7b0: 73 20 61 6e 64 20 69 73 20 61 70 70 65 6e 64 65  s and is appende
a7c0: 64 20 74 6f 20 74 68 65 20 6f 70 74 2e 75 72 6c  d to the opt.url
a7d0: 2e 20 49 66 20 69 74 20 69 73 20 0a 20 20 20 20  . If it is .    
a7e0: 61 6e 20 4f 62 6a 65 63 74 20 74 68 65 6e 20 69  an Object then i
a7f0: 74 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20  t is assumed to 
a800: 62 65 20 61 20 6f 6e 65 2d 64 69 6d 65 6e 73 69  be a one-dimensi
a810: 6f 6e 61 6c 20 73 65 74 20 6f 66 20 0a 20 20 20  onal set of .   
a820: 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73   key/value pairs
a830: 20 77 69 74 68 20 73 69 6d 70 6c 65 20 76 61 6c   with simple val
a840: 75 65 73 20 28 6e 75 6d 62 65 72 73 2c 20 73 74  ues (numbers, st
a850: 72 69 6e 67 73 2c 20 62 6f 6f 6c 65 61 6e 73 2c  rings, booleans,
a860: 20 0a 20 20 20 20 6e 75 6c 6c 2c 20 61 6e 64 20   .    null, and 
a870: 4e 4f 54 20 6f 62 6a 65 63 74 73 2f 61 72 72 61  NOT objects/arra
a880: 79 73 29 2e 20 54 68 65 20 6b 65 79 73 2f 76 61  ys). The keys/va
a890: 6c 75 65 73 20 61 72 65 20 55 52 4c 2d 65 6e 63  lues are URL-enc
a8a0: 6f 64 65 64 20 0a 20 20 20 20 61 6e 64 20 61 70  oded .    and ap
a8b0: 70 65 6e 64 65 64 20 74 6f 20 74 68 65 20 55 52  pended to the UR
a8c0: 4c 2e 0a 0a 20 20 20 20 54 68 65 20 62 65 66 6f  L...    The befo
a8d0: 72 65 53 65 6e 64 28 29 20 63 61 6c 6c 62 61 63  reSend() callbac
a8e0: 6b 20 28 73 65 65 20 62 65 6c 6f 77 29 20 63 61  k (see below) ca
a8f0: 6e 20 6d 6f 64 69 66 79 20 74 68 65 20 6f 70 74  n modify the opt
a900: 69 6f 6e 73 0a 20 20 20 20 6f 62 6a 65 63 74 20  ions.    object 
a910: 62 65 66 6f 72 65 20 74 68 65 20 72 65 71 75 65  before the reque
a920: 73 74 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  st attempt is ma
a930: 64 65 2e 0a 20 20 20 0a 20 20 20 20 54 68 65 20  de..   .    The 
a940: 63 61 6c 6c 62 61 63 6b 73 20 69 6e 20 74 68 65  callbacks in the
a950: 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 6f 70 74 20   normalized opt 
a960: 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 20 74  object will be t
a970: 72 69 67 67 65 72 65 64 20 61 73 0a 20 20 20 20  riggered as.    
a980: 66 6f 6c 6c 6f 77 73 20 28 69 66 20 74 68 65 79  follows (if they
a990: 20 61 72 65 20 73 65 74 20 74 6f 20 46 75 6e 63   are set to Func
a9a0: 74 69 6f 6e 20 76 61 6c 75 65 73 29 3a 0a 20 20  tion values):.  
a9b0: 20 20 0a 20 20 20 20 2d 20 62 65 66 6f 72 65 53    .    - beforeS
a9c0: 65 6e 64 28 72 65 71 75 65 73 74 2c 6f 70 74 29  end(request,opt)
a9d0: 20 77 69 6c 6c 20 62 65 20 63 61 6c 6c 65 64 20   will be called 
a9e0: 62 65 66 6f 72 65 20 61 6e 79 20 6e 65 74 77 6f  before any netwo
a9f0: 72 6b 20 0a 20 20 20 20 70 72 6f 63 65 73 73 69  rk .    processi
aa00: 6e 67 20 73 74 61 72 74 73 2e 20 49 66 20 62 65  ng starts. If be
aa10: 66 6f 72 65 53 65 6e 64 28 29 20 74 68 72 6f 77  foreSend() throw
aa20: 73 20 74 68 65 6e 20 6e 6f 20 6f 74 68 65 72 20  s then no other 
aa30: 0a 20 20 20 20 63 61 6c 6c 62 61 63 6b 73 20 61  .    callbacks a
aa40: 72 65 20 74 72 69 67 67 65 72 65 64 20 61 6e 64  re triggered and
aa50: 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 70   this function p
aa60: 72 6f 70 61 67 61 74 65 73 20 74 68 65 20 0a 20  ropagates the . 
aa70: 20 20 20 65 78 63 65 70 74 69 6f 6e 2e 20 54 68     exception. Th
aa80: 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 70  is function is p
aa90: 61 73 73 65 64 20 6e 6f 72 6d 61 6c 69 7a 65 64  assed normalized
aaa0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 70 74 69   connection opti
aab0: 6f 6e 73 0a 20 20 20 20 61 73 20 69 74 73 20 73  ons.    as its s
aac0: 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 2c  econd parameter,
aad0: 20 61 6e 64 20 63 68 61 6e 67 65 73 20 74 68 69   and changes thi
aae0: 73 20 66 75 6e 63 74 69 6f 6e 20 6d 61 6b 65 73  s function makes
aaf0: 20 74 6f 20 74 68 61 74 0a 20 20 20 20 6f 62 6a   to that.    obj
ab00: 65 63 74 20 5f 77 69 6c 6c 5f 20 62 65 20 75 73  ect _will_ be us
ab10: 65 64 20 66 6f 72 20 74 68 65 20 70 65 6e 64 69  ed for the pendi
ab20: 6e 67 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 74  ng connection at
ab30: 74 65 6d 70 74 2e 0a 20 20 20 20 0a 20 20 20 20  tempt..    .    
ab40: 2d 20 6f 6e 45 72 72 6f 72 28 72 65 71 75 65 73  - onError(reques
ab50: 74 2c 6f 70 74 29 20 77 69 6c 6c 20 62 65 20 63  t,opt) will be c
ab60: 61 6c 6c 65 64 20 69 66 20 61 20 63 6f 6e 6e 65  alled if a conne
ab70: 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 0a 20 20  ction to the .  
ab80: 20 20 62 61 63 6b 2d 65 6e 64 20 63 61 6e 6e 6f    back-end canno
ab90: 74 20 62 65 20 65 73 74 61 62 6c 69 73 68 65 64  t be established
aba0: 2e 20 49 74 20 77 69 6c 6c 20 62 65 20 70 61 73  . It will be pas
abb0: 73 65 64 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  sed the original
abc0: 20 0a 20 20 20 20 72 65 71 75 65 73 74 20 6f 62   .    request ob
abd0: 6a 65 63 74 20 28 77 68 69 63 68 20 6d 69 67 68  ject (which migh
abe0: 74 20 62 65 20 6e 75 6c 6c 2c 20 64 65 70 65 6e  t be null, depen
abf0: 64 69 6e 67 20 6f 6e 20 74 68 65 20 72 65 71 75  ding on the requ
ac00: 65 73 74 20 0a 20 20 20 20 74 79 70 65 29 20 61  est .    type) a
ac10: 6e 64 20 74 68 65 20 6e 6f 72 6d 61 6c 69 7a 65  nd the normalize
ac20: 64 20 6f 70 74 69 6f 6e 73 20 6f 62 6a 65 63 74  d options object
ac30: 2e 20 49 6e 20 74 68 65 20 65 72 72 6f 72 20 63  . In the error c
ac40: 61 73 65 2c 20 74 68 65 20 0a 20 20 20 20 6f 70  ase, the .    op
ac50: 74 20 6f 62 6a 65 63 74 20 70 61 73 73 65 64 20  t object passed 
ac60: 74 6f 20 6f 6e 45 72 72 6f 72 28 29 20 22 73 68  to onError() "sh
ac70: 6f 75 6c 64 22 20 68 61 76 65 20 61 20 70 72 6f  ould" have a pro
ac80: 70 65 72 74 79 20 63 61 6c 6c 65 64 20 0a 20 20  perty called .  
ac90: 20 20 22 65 72 72 6f 72 4d 65 73 73 61 67 65 22    "errorMessage"
aca0: 20 77 68 69 63 68 20 63 6f 6e 74 61 69 6e 73 20   which contains 
acb0: 61 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66  a description of
acc0: 20 74 68 65 20 70 72 6f 62 6c 65 6d 2e 0a 20 20   the problem..  
acd0: 20 20 0a 20 20 20 20 2d 20 6f 6e 45 72 72 6f 72    .    - onError
ace0: 28 72 65 71 75 65 73 74 2c 6f 70 74 29 20 77 69  (request,opt) wi
acf0: 6c 6c 20 61 6c 73 6f 20 62 65 20 63 61 6c 6c 65  ll also be calle
ad00: 64 20 69 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  d if connection 
ad10: 0a 20 20 20 20 73 75 63 63 65 65 64 73 20 62 75  .    succeeds bu
ad20: 74 20 74 68 65 20 72 65 73 70 6f 6e 73 65 20 69  t the response i
ad30: 73 20 6e 6f 74 20 4a 53 4f 4e 20 64 61 74 61 2e  s not JSON data.
ad40: 0a 20 20 20 20 0a 20 20 20 20 2d 20 6f 6e 52 65  .    .    - onRe
ad50: 73 70 6f 6e 73 65 28 72 65 73 70 6f 6e 73 65 2c  sponse(response,
ad60: 72 65 71 75 65 73 74 29 20 77 69 6c 6c 20 62 65  request) will be
ad70: 20 63 61 6c 6c 65 64 20 69 66 20 74 68 65 20 72   called if the r
ad80: 65 73 70 6f 6e 73 65 20 0a 20 20 20 20 72 65 74  esponse .    ret
ad90: 75 72 6e 73 20 4a 53 4f 4e 20 64 61 74 61 2e 20  urns JSON data. 
ada0: 54 68 61 74 20 64 61 74 61 20 6d 69 67 68 74 20  That data might 
adb0: 68 6f 6c 64 20 61 6e 20 65 72 72 6f 72 20 72 65  hold an error re
adc0: 73 70 6f 6e 73 65 20 63 6f 64 65 20 2d 20 0a 20  sponse code - . 
add0: 20 20 20 63 6c 69 65 6e 74 73 20 6e 65 65 64 20     clients need 
ade0: 74 6f 20 63 68 65 63 6b 20 66 6f 72 20 74 68 61  to check for tha
adf0: 74 2e 20 49 74 20 69 73 20 70 61 73 73 65 64 20  t. It is passed 
ae00: 74 68 65 20 72 65 73 70 6f 6e 73 65 20 6f 62 6a  the response obj
ae10: 65 63 74 20 0a 20 20 20 20 28 61 20 70 6c 61 69  ect .    (a plai
ae20: 6e 20 6f 62 6a 65 63 74 29 20 61 6e 64 20 74 68  n object) and th
ae30: 65 20 6f 72 69 67 69 6e 61 6c 20 72 65 71 75 65  e original reque
ae40: 73 74 20 6f 62 6a 65 63 74 2e 0a 20 20 20 20 0a  st object..    .
ae50: 20 20 20 20 2d 20 61 66 74 65 72 53 65 6e 64 28      - afterSend(
ae60: 72 65 71 75 65 73 74 2c 6f 70 74 29 20 77 69 6c  request,opt) wil
ae70: 6c 20 62 65 20 63 61 6c 6c 65 64 20 64 69 72 65  l be called dire
ae80: 63 74 6c 79 20 61 66 74 65 72 20 74 68 65 0a 20  ctly after the. 
ae90: 20 20 20 41 4a 41 58 20 72 65 71 75 65 73 74 20     AJAX request 
aea0: 69 73 20 66 69 6e 69 73 68 65 64 2c 20 62 65 66  is finished, bef
aeb0: 6f 72 65 20 6f 6e 45 72 72 6f 72 28 29 20 6f 72  ore onError() or
aec0: 20 6f 6e 52 65 73 6f 6e 73 65 28 29 20 61 72 65   onResonse() are
aed0: 0a 20 20 20 20 63 61 6c 6c 65 64 2e 20 50 6f 73  .    called. Pos
aee0: 73 69 62 6c 65 20 54 4f 44 4f 3a 20 77 65 20 65  sible TODO: we e
aef0: 78 70 6c 69 63 69 74 6c 79 20 64 6f 20 4e 4f 54  xplicitly do NOT
af00: 20 70 61 73 73 20 74 68 65 20 72 65 73 70 6f 6e   pass the respon
af10: 73 65 20 74 6f 0a 20 20 20 20 74 68 69 73 20 66  se to.    this f
af20: 75 6e 63 74 69 6f 6e 20 69 6e 20 6f 72 64 65 72  unction in order
af30: 20 74 6f 20 6b 65 65 70 20 74 68 65 20 6c 69 6e   to keep the lin
af40: 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 72 65  e between the re
af50: 73 70 6f 6e 73 69 62 69 6c 69 74 69 65 73 0a 20  sponsibilities. 
af60: 20 20 20 6f 66 20 74 68 65 20 76 61 72 69 6f 75     of the variou
af70: 73 20 63 61 6c 6c 62 61 63 6b 20 63 6c 65 61 72  s callback clear
af80: 20 28 6f 74 68 65 72 77 69 73 65 20 74 68 69 73   (otherwise this
af90: 20 63 6f 75 6c 64 20 62 65 20 75 73 65 64 20 74   could be used t
afa0: 68 65 20 73 61 6d 65 0a 20 20 20 20 61 73 20 6f  he same.    as o
afb0: 6e 52 65 73 70 6f 6e 73 65 28 29 29 2e 20 49 6e  nResponse()). In
afc0: 20 70 72 61 63 74 69 63 65 20 69 74 20 77 6f 75   practice it wou
afd0: 6c 64 20 73 6f 6d 65 74 69 6d 65 73 20 62 65 20  ld sometimes be 
afe0: 75 73 65 66 75 6c 20 68 61 76 65 20 74 68 65 0a  useful have the.
aff0: 20 20 20 20 72 65 73 70 6f 6e 73 65 20 70 61 73      response pas
b000: 73 65 64 20 74 6f 20 74 68 69 73 20 66 75 6e 63  sed to this func
b010: 74 69 6f 6e 2c 20 6d 61 69 6e 6c 79 20 66 6f 72  tion, mainly for
b020: 20 6c 6f 67 67 69 6e 67 2f 64 65 62 75 67 67 69   logging/debuggi
b030: 6e 67 0a 20 20 20 20 70 75 72 70 6f 73 65 73 2e  ng.    purposes.
b040: 0a 0a 20 20 20 20 54 68 65 20 72 65 74 75 72 6e  ..    The return
b050: 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 69 73   value from this
b060: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6d 65 61   function is mea
b070: 6e 69 6e 67 6c 65 73 73 20 62 65 63 61 75 73 65  ningless because
b080: 0a 20 20 20 20 41 4a 41 58 20 6f 70 65 72 61 74  .    AJAX operat
b090: 69 6f 6e 73 20 74 65 6e 64 20 74 6f 20 74 61 6b  ions tend to tak
b0a0: 65 20 70 6c 61 63 65 20 61 73 79 6e 63 68 72 6f  e place asynchro
b0b0: 6e 6f 75 73 6c 79 2e 0a 0a 2a 2f 0a 57 68 41 6a  nously...*/.WhAj
b0c0: 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e 70 72 6f  aj.Connector.pro
b0d0: 74 6f 74 79 70 65 2e 73 65 6e 64 52 65 71 75 65  totype.sendReque
b0e0: 73 74 20 3d 20 66 75 6e 63 74 69 6f 6e 28 72 65  st = function(re
b0f0: 71 75 65 73 74 2c 6f 70 74 29 0a 7b 0a 20 20 20  quest,opt).{.   
b100: 20 69 66 28 20 21 57 68 41 6a 61 6a 2e 69 73 46   if( !WhAjaj.isF
b110: 75 6e 63 74 69 6f 6e 28 74 68 69 73 2e 73 65 6e  unction(this.sen
b120: 64 49 6d 70 6c 29 20 29 0a 20 20 20 20 7b 0a 20  dImpl) ).    {. 
b130: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
b140: 20 45 72 72 6f 72 28 22 54 68 69 73 20 6f 62 6a   Error("This obj
b150: 65 63 74 20 68 61 73 20 6e 6f 20 73 65 6e 64 49  ect has no sendI
b160: 6d 70 6c 28 29 20 6d 65 6d 62 65 72 20 66 75 6e  mpl() member fun
b170: 63 74 69 6f 6e 21 20 49 20 64 6f 6e 27 74 20 6b  ction! I don't k
b180: 6e 6f 77 20 68 6f 77 20 74 6f 20 73 65 6e 64 20  now how to send 
b190: 74 68 65 20 72 65 71 75 65 73 74 21 22 29 3b 0a  the request!");.
b1a0: 20 20 20 20 7d 0a 20 20 20 20 76 61 72 20 65 78      }.    var ex
b1b0: 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20 76 61   = false;.    va
b1c0: 72 20 61 76 20 3d 20 41 72 72 61 79 2e 70 72 6f  r av = Array.pro
b1d0: 74 6f 74 79 70 65 2e 73 6c 69 63 65 2e 61 70 70  totype.slice.app
b1e0: 6c 79 28 20 61 72 67 75 6d 65 6e 74 73 2c 20 5b  ly( arguments, [
b1f0: 30 5d 20 29 3b 0a 20 20 20 20 0a 20 20 20 20 2f  0] );.    .    /
b200: 2a 2a 0a 20 20 20 20 20 20 20 20 46 49 58 4d 45  **.        FIXME
b210: 3a 20 68 6f 77 20 74 6f 20 68 61 6e 64 6c 65 20  : how to handle 
b220: 74 68 65 20 65 72 72 6f 72 2c 20 76 69 73 2d 61  the error, vis-a
b230: 2d 76 69 73 2d 20 74 68 65 20 63 61 6c 6c 62 61  -vis- the callba
b240: 63 6b 73 2c 20 69 66 20 0a 20 20 20 20 20 20 20  cks, if .       
b250: 20 6e 6f 72 6d 61 6c 69 7a 65 41 6a 61 78 50 61   normalizeAjaxPa
b260: 72 61 6d 65 74 65 72 73 28 29 20 74 68 72 6f 77  rameters() throw
b270: 73 3f 20 49 74 20 63 61 6e 20 74 68 72 6f 77 20  s? It can throw 
b280: 69 66 20 0a 20 20 20 20 20 20 20 20 28 64 65 29  if .        (de)
b290: 4a 53 4f 4e 2d 69 7a 69 6e 67 20 66 61 69 6c 73  JSON-izing fails
b2a0: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 76 61 72  ..    */.    var
b2b0: 20 6e 6f 72 6d 20 3d 20 74 68 69 73 2e 6e 6f 72   norm = this.nor
b2c0: 6d 61 6c 69 7a 65 41 6a 61 78 50 61 72 61 6d 65  malizeAjaxParame
b2d0: 74 65 72 73 28 20 57 68 41 6a 61 6a 2e 69 73 4f  ters( WhAjaj.isO
b2e0: 62 6a 65 63 74 28 6f 70 74 29 20 3f 20 6f 70 74  bject(opt) ? opt
b2f0: 20 3a 20 7b 7d 20 29 3b 0a 20 20 20 20 6e 6f 72   : {} );.    nor
b300: 6d 2e 75 72 6c 20 3d 20 57 68 41 6a 61 6a 2e 43  m.url = WhAjaj.C
b310: 6f 6e 6e 65 63 74 6f 72 2e 73 65 6e 64 48 65 6c  onnector.sendHel
b320: 70 65 72 2e 6e 6f 72 6d 61 6c 69 7a 65 55 52 4c  per.normalizeURL
b330: 28 6e 6f 72 6d 29 3b 0a 20 20 20 20 69 66 28 20  (norm);.    if( 
b340: 21 20 72 65 71 75 65 73 74 20 29 20 6e 6f 72 6d  ! request ) norm
b350: 2e 6d 65 74 68 6f 64 20 3d 20 27 47 45 54 27 3b  .method = 'GET';
b360: 0a 20 20 20 20 76 61 72 20 63 62 20 3d 20 74 68  .    var cb = th
b370: 69 73 2e 63 61 6c 6c 62 61 63 6b 73 20 7c 7c 20  is.callbacks || 
b380: 7b 7d 3b 0a 20 20 20 20 69 66 28 20 74 68 69 73  {};.    if( this
b390: 2e 63 61 6c 6c 62 61 63 6b 73 20 26 26 20 57 68  .callbacks && Wh
b3a0: 41 6a 61 6a 2e 69 73 46 75 6e 63 74 69 6f 6e 28  Ajaj.isFunction(
b3b0: 74 68 69 73 2e 63 61 6c 6c 62 61 63 6b 73 2e 62  this.callbacks.b
b3c0: 65 66 6f 72 65 53 65 6e 64 29 20 29 20 7b 0a 20  eforeSend) ) {. 
b3d0: 20 20 20 20 20 20 20 74 68 69 73 2e 63 61 6c 6c         this.call
b3e0: 62 61 63 6b 73 2e 62 65 66 6f 72 65 53 65 6e 64  backs.beforeSend
b3f0: 28 20 72 65 71 75 65 73 74 2c 20 6e 6f 72 6d 20  ( request, norm 
b400: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
b410: 20 57 68 41 6a 61 6a 2e 69 73 46 75 6e 63 74 69   WhAjaj.isFuncti
b420: 6f 6e 28 6e 6f 72 6d 2e 62 65 66 6f 72 65 53 65  on(norm.beforeSe
b430: 6e 64 29 20 29 7b 0a 20 20 20 20 20 20 20 20 6e  nd) ){.        n
b440: 6f 72 6d 2e 62 65 66 6f 72 65 53 65 6e 64 28 20  orm.beforeSend( 
b450: 72 65 71 75 65 73 74 2c 20 6e 6f 72 6d 20 29 3b  request, norm );
b460: 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2f 61 6c 65  .    }.    //ale
b470: 72 74 28 20 57 68 41 6a 61 6a 2e 73 74 72 69 6e  rt( WhAjaj.strin
b480: 67 69 66 79 28 72 65 71 75 65 73 74 29 2b 27 5c  gify(request)+'\
b490: 6e 27 2b 57 68 41 6a 61 6a 2e 73 74 72 69 6e 67  n'+WhAjaj.string
b4a0: 69 66 79 28 6e 6f 72 6d 29 29 3b 0a 20 20 20 20  ify(norm));.    
b4b0: 74 72 79 20 7b 20 74 68 69 73 2e 73 65 6e 64 49  try { this.sendI
b4c0: 6d 70 6c 28 20 72 65 71 75 65 73 74 2c 20 6e 6f  mpl( request, no
b4d0: 72 6d 20 29 3b 20 7d 0a 20 20 20 20 63 61 74 63  rm ); }.    catc
b4e0: 68 28 65 29 20 7b 20 65 78 20 3d 20 65 3b 20 7d  h(e) { ex = e; }
b4f0: 0a 20 20 20 20 69 66 28 65 78 29 20 74 68 72 6f  .    if(ex) thro
b500: 77 20 65 78 3b 0a 7d 3b 0a 0a 2f 2a 2a 0a 20 20  w ex;.};../**.  
b510: 20 20 73 65 6e 64 49 6d 70 6c 28 29 20 68 6f 6c    sendImpl() hol
b520: 64 73 20 61 20 63 6f 6e 63 72 65 74 65 20 62 61  ds a concrete ba
b530: 63 6b 2d 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f  ck-end connectio
b540: 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  n implementation
b550: 2e 20 49 74 0a 20 20 20 20 63 61 6e 20 62 65 20  . It.    can be 
b560: 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 61 20  replaced with a 
b570: 63 75 73 74 6f 6d 20 69 6d 70 6c 65 6d 65 6e 74  custom implement
b580: 61 74 69 6f 6e 20 69 66 20 6f 6e 65 20 66 6f 6c  ation if one fol
b590: 6c 6f 77 73 20 74 68 65 20 72 75 6c 65 73 0a 20  lows the rules. 
b5a0: 20 20 20 64 65 73 63 72 69 62 65 64 20 74 68 72     described thr
b5b0: 6f 75 67 68 6f 75 74 20 74 68 69 73 20 41 50 49  oughout this API
b5c0: 2e 20 53 65 65 20 57 68 41 6a 61 6a 2e 43 6f 6e  . See WhAjaj.Con
b5d0: 6e 65 63 74 6f 72 2e 73 65 6e 64 49 6d 70 6c 73  nector.sendImpls
b5e0: 20 66 6f 72 0a 20 20 20 20 74 68 65 20 63 6f 6e   for.    the con
b5f0: 63 72 65 74 65 20 69 6d 70 6c 65 6d 65 6e 74 61  crete implementa
b600: 74 69 6f 6e 73 20 69 6e 63 6c 75 64 65 64 20 77  tions included w
b610: 69 74 68 20 74 68 69 73 20 41 50 49 2e 0a 2a 2f  ith this API..*/
b620: 0a 2f 2f 57 68 41 6a 61 6a 2e 43 6f 6e 6e 65 63  .//WhAjaj.Connec
b630: 74 6f 72 2e 70 72 6f 74 6f 74 79 70 65 2e 73 65  tor.prototype.se
b640: 6e 64 49 6d 70 6c 20 3d 20 57 68 41 6a 61 6a 2e  ndImpl = WhAjaj.
b650: 43 6f 6e 6e 65 63 74 6f 72 2e 73 65 6e 64 49 6d  Connector.sendIm
b660: 70 6c 73 2e 58 4d 4c 48 74 74 70 52 65 71 75 65  pls.XMLHttpReque
b670: 73 74 3b 0a 2f 2f 57 68 41 6a 61 6a 2e 43 6f 6e  st;.//WhAjaj.Con
b680: 6e 65 63 74 6f 72 2e 70 72 6f 74 6f 74 79 70 65  nector.prototype
b690: 2e 73 65 6e 64 49 6d 70 6c 20 3d 20 57 68 41 6a  .sendImpl = WhAj
b6a0: 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e 73 65 6e  aj.Connector.sen
b6b0: 64 49 6d 70 6c 73 2e 72 68 69 6e 6f 3b 0a 2f 2f  dImpls.rhino;.//
b6c0: 57 68 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72  WhAjaj.Connector
b6d0: 2e 70 72 6f 74 6f 74 79 70 65 2e 73 65 6e 64 49  .prototype.sendI
b6e0: 6d 70 6c 20 3d 20 57 68 41 6a 61 6a 2e 43 6f 6e  mpl = WhAjaj.Con
b6f0: 6e 65 63 74 6f 72 2e 73 65 6e 64 49 6d 70 6c 73  nector.sendImpls
b700: 2e 6a 51 75 65 72 79 3b 0a 0a 69 66 28 20 27 75  .jQuery;..if( 'u
b710: 6e 64 65 66 69 6e 65 64 27 20 21 3d 3d 20 74 79  ndefined' !== ty
b720: 70 65 6f 66 20 6a 51 75 65 72 79 20 29 7b 0a 20  peof jQuery ){. 
b730: 20 20 20 57 68 41 6a 61 6a 2e 43 6f 6e 6e 65 63     WhAjaj.Connec
b740: 74 6f 72 2e 70 72 6f 74 6f 74 79 70 65 2e 73 65  tor.prototype.se
b750: 6e 64 49 6d 70 6c 20 3d 20 57 68 41 6a 61 6a 2e  ndImpl = WhAjaj.
b760: 43 6f 6e 6e 65 63 74 6f 72 2e 73 65 6e 64 49 6d  Connector.sendIm
b770: 70 6c 73 2e 6a 51 75 65 72 79 3b 0a 7d 0a 65 6c  pls.jQuery;.}.el
b780: 73 65 20 7b 0a 20 20 20 20 57 68 41 6a 61 6a 2e  se {.    WhAjaj.
b790: 43 6f 6e 6e 65 63 74 6f 72 2e 70 72 6f 74 6f 74  Connector.protot
b7a0: 79 70 65 2e 73 65 6e 64 49 6d 70 6c 20 3d 20 57  ype.sendImpl = W
b7b0: 68 41 6a 61 6a 2e 43 6f 6e 6e 65 63 74 6f 72 2e  hAjaj.Connector.
b7c0: 73 65 6e 64 49 6d 70 6c 73 2e 58 4d 4c 48 74 74  sendImpls.XMLHtt
b7d0: 70 52 65 71 75 65 73 74 3b 0a 7d 0a              pRequest;.}.