web/privatedoc/js/prototype.js
author cavaliet@caf4f556-3d62-0410-8435-a86758001935
Mon, 25 May 2009 16:23:48 +0000
changeset 35 a07144f3d8e4
parent 7 7a5d38af0e65
permissions -rw-r--r--
maj du lien vers le séminaire Création et Territoires, et favicon.ico sur accueils
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
     1
/*  Prototype JavaScript framework, version 1.5.0_rc1
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
     2
 *  (c) 2005 Sam Stephenson <sam@conio.net>
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
     3
 *
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
     4
 *  Prototype is freely distributable under the terms of an MIT-style license.
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
     5
 *  For details, see the Prototype web site: http://prototype.conio.net/
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
     6
 *
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
     7
/*--------------------------------------------------------------------------*/
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
     8
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
     9
var Prototype = {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    10
  Version: '1.5.0_rc1',
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    11
  ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    12
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    13
  emptyFunction: function() {},
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    14
  K: function(x) {return x}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    15
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    16
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    17
var Class = {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    18
  create: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    19
    return function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    20
      this.initialize.apply(this, arguments);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    21
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    22
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    23
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    24
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    25
var Abstract = new Object();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    26
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    27
Object.extend = function(destination, source) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    28
  for (var property in source) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    29
    destination[property] = source[property];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    30
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    31
  return destination;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    32
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    33
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    34
Object.extend(Object, {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    35
  inspect: function(object) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    36
    try {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    37
      if (object == undefined) return 'undefined';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    38
      if (object == null) return 'null';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    39
      return object.inspect ? object.inspect() : object.toString();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    40
    } catch (e) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    41
      if (e instanceof RangeError) return '...';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    42
      throw e;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    43
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    44
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    45
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    46
  keys: function(object) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    47
    var keys = [];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    48
    for (var property in object)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    49
      keys.push(property);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    50
    return keys;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    51
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    52
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    53
  values: function(object) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    54
    var values = [];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    55
    for (var property in object)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    56
      values.push(object[property]);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    57
    return values;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    58
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    59
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    60
  clone: function(object) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    61
    return Object.extend({}, object);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    62
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    63
});
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    64
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    65
Function.prototype.bind = function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    66
  var __method = this, args = $A(arguments), object = args.shift();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    67
  return function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    68
    return __method.apply(object, args.concat($A(arguments)));
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    69
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    70
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    71
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    72
Function.prototype.bindAsEventListener = function(object) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    73
  var __method = this, args = $A(arguments), object = args.shift();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    74
  return function(event) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    75
    return __method.apply(object, [( event || window.event)].concat(args).concat($A(arguments)));
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    76
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    77
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    78
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    79
Object.extend(Number.prototype, {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    80
  toColorPart: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    81
    var digits = this.toString(16);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    82
    if (this < 16) return '0' + digits;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    83
    return digits;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    84
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    85
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    86
  succ: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    87
    return this + 1;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    88
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    89
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    90
  times: function(iterator) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    91
    $R(0, this, true).each(iterator);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    92
    return this;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    93
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    94
});
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    95
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    96
var Try = {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    97
  these: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    98
    var returnValue;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
    99
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   100
    for (var i = 0; i < arguments.length; i++) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   101
      var lambda = arguments[i];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   102
      try {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   103
        returnValue = lambda();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   104
        break;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   105
      } catch (e) {}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   106
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   107
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   108
    return returnValue;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   109
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   110
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   111
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   112
/*--------------------------------------------------------------------------*/
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   113
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   114
var PeriodicalExecuter = Class.create();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   115
PeriodicalExecuter.prototype = {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   116
  initialize: function(callback, frequency) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   117
    this.callback = callback;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   118
    this.frequency = frequency;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   119
    this.currentlyExecuting = false;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   120
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   121
    this.registerCallback();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   122
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   123
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   124
  registerCallback: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   125
    this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   126
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   127
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   128
  stop: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   129
    if (!this.timer) return;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   130
    clearInterval(this.timer);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   131
    this.timer = null;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   132
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   133
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   134
  onTimerEvent: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   135
    if (!this.currentlyExecuting) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   136
      try {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   137
        this.currentlyExecuting = true;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   138
        this.callback(this);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   139
      } finally {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   140
        this.currentlyExecuting = false;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   141
      }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   142
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   143
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   144
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   145
Object.extend(String.prototype, {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   146
  gsub: function(pattern, replacement) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   147
    var result = '', source = this, match;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   148
    replacement = arguments.callee.prepareReplacement(replacement);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   149
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   150
    while (source.length > 0) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   151
      if (match = source.match(pattern)) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   152
        result += source.slice(0, match.index);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   153
        result += (replacement(match) || '').toString();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   154
        source  = source.slice(match.index + match[0].length);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   155
      } else {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   156
        result += source, source = '';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   157
      }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   158
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   159
    return result;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   160
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   161
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   162
  sub: function(pattern, replacement, count) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   163
    replacement = this.gsub.prepareReplacement(replacement);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   164
    count = count === undefined ? 1 : count;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   165
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   166
    return this.gsub(pattern, function(match) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   167
      if (--count < 0) return match[0];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   168
      return replacement(match);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   169
    });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   170
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   171
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   172
  scan: function(pattern, iterator) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   173
    this.gsub(pattern, iterator);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   174
    return this;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   175
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   176
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   177
  truncate: function(length, truncation) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   178
    length = length || 30;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   179
    truncation = truncation === undefined ? '...' : truncation;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   180
    return this.length > length ?
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   181
      this.slice(0, length - truncation.length) + truncation : this;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   182
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   183
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   184
  strip: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   185
    return this.replace(/^\s+/, '').replace(/\s+$/, '');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   186
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   187
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   188
  stripTags: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   189
    return this.replace(/<\/?[^>]+>/gi, '');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   190
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   191
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   192
  stripScripts: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   193
    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   194
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   195
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   196
  extractScripts: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   197
    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   198
    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   199
    return (this.match(matchAll) || []).map(function(scriptTag) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   200
      return (scriptTag.match(matchOne) || ['', ''])[1];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   201
    });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   202
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   203
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   204
  evalScripts: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   205
    return this.extractScripts().map(function(script) { return eval(script) });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   206
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   207
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   208
  escapeHTML: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   209
    var div = document.createElement('div');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   210
    var text = document.createTextNode(this);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   211
    div.appendChild(text);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   212
    return div.innerHTML;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   213
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   214
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   215
  unescapeHTML: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   216
    var div = document.createElement('div');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   217
    div.innerHTML = this.stripTags();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   218
    return div.childNodes[0] ? div.childNodes[0].nodeValue : '';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   219
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   220
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   221
  toQueryParams: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   222
    var pairs = this.match(/^\??(.*)$/)[1].split('&');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   223
    return pairs.inject({}, function(params, pairString) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   224
      var pair  = pairString.split('=');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   225
      var value = pair[1] ? decodeURIComponent(pair[1]) : undefined;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   226
      params[decodeURIComponent(pair[0])] = value;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   227
      return params;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   228
    });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   229
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   230
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   231
  toArray: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   232
    return this.split('');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   233
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   234
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   235
  camelize: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   236
    var oStringList = this.split('-');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   237
    if (oStringList.length == 1) return oStringList[0];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   238
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   239
    var camelizedString = this.indexOf('-') == 0
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   240
      ? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   241
      : oStringList[0];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   242
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   243
    for (var i = 1, len = oStringList.length; i < len; i++) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   244
      var s = oStringList[i];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   245
      camelizedString += s.charAt(0).toUpperCase() + s.substring(1);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   246
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   247
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   248
    return camelizedString;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   249
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   250
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   251
  inspect: function(useDoubleQuotes) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   252
    var escapedString = this.replace(/\\/g, '\\\\');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   253
    if (useDoubleQuotes)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   254
      return '"' + escapedString.replace(/"/g, '\\"') + '"';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   255
    else
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   256
      return "'" + escapedString.replace(/'/g, '\\\'') + "'";
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   257
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   258
});
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   259
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   260
String.prototype.gsub.prepareReplacement = function(replacement) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   261
  if (typeof replacement == 'function') return replacement;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   262
  var template = new Template(replacement);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   263
  return function(match) { return template.evaluate(match) };
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   264
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   265
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   266
String.prototype.parseQuery = String.prototype.toQueryParams;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   267
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   268
var Template = Class.create();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   269
Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   270
Template.prototype = {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   271
  initialize: function(template, pattern) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   272
    this.template = template.toString();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   273
    this.pattern  = pattern || Template.Pattern;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   274
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   275
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   276
  evaluate: function(object) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   277
    return this.template.gsub(this.pattern, function(match) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   278
      var before = match[1];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   279
      if (before == '\\') return match[2];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   280
      return before + (object[match[3]] || '').toString();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   281
    });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   282
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   283
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   284
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   285
var $break    = new Object();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   286
var $continue = new Object();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   287
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   288
var Enumerable = {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   289
  each: function(iterator) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   290
    var index = 0;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   291
    try {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   292
      this._each(function(value) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   293
        try {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   294
          iterator(value, index++);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   295
        } catch (e) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   296
          if (e != $continue) throw e;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   297
        }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   298
      });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   299
    } catch (e) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   300
      if (e != $break) throw e;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   301
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   302
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   303
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   304
  all: function(iterator) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   305
    var result = true;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   306
    this.each(function(value, index) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   307
      result = result && !!(iterator || Prototype.K)(value, index);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   308
      if (!result) throw $break;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   309
    });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   310
    return result;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   311
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   312
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   313
  any: function(iterator) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   314
    var result = false;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   315
    this.each(function(value, index) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   316
      if (result = !!(iterator || Prototype.K)(value, index))
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   317
        throw $break;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   318
    });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   319
    return result;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   320
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   321
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   322
  collect: function(iterator) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   323
    var results = [];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   324
    this.each(function(value, index) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   325
      results.push(iterator(value, index));
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   326
    });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   327
    return results;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   328
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   329
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   330
  detect: function (iterator) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   331
    var result;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   332
    this.each(function(value, index) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   333
      if (iterator(value, index)) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   334
        result = value;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   335
        throw $break;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   336
      }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   337
    });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   338
    return result;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   339
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   340
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   341
  findAll: function(iterator) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   342
    var results = [];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   343
    this.each(function(value, index) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   344
      if (iterator(value, index))
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   345
        results.push(value);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   346
    });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   347
    return results;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   348
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   349
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   350
  grep: function(pattern, iterator) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   351
    var results = [];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   352
    this.each(function(value, index) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   353
      var stringValue = value.toString();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   354
      if (stringValue.match(pattern))
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   355
        results.push((iterator || Prototype.K)(value, index));
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   356
    })
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   357
    return results;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   358
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   359
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   360
  include: function(object) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   361
    var found = false;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   362
    this.each(function(value) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   363
      if (value == object) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   364
        found = true;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   365
        throw $break;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   366
      }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   367
    });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   368
    return found;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   369
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   370
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   371
  inject: function(memo, iterator) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   372
    this.each(function(value, index) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   373
      memo = iterator(memo, value, index);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   374
    });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   375
    return memo;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   376
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   377
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   378
  invoke: function(method) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   379
    var args = $A(arguments).slice(1);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   380
    return this.collect(function(value) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   381
      return value[method].apply(value, args);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   382
    });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   383
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   384
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   385
  max: function(iterator) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   386
    var result;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   387
    this.each(function(value, index) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   388
      value = (iterator || Prototype.K)(value, index);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   389
      if (result == undefined || value >= result)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   390
        result = value;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   391
    });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   392
    return result;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   393
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   394
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   395
  min: function(iterator) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   396
    var result;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   397
    this.each(function(value, index) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   398
      value = (iterator || Prototype.K)(value, index);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   399
      if (result == undefined || value < result)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   400
        result = value;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   401
    });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   402
    return result;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   403
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   404
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   405
  partition: function(iterator) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   406
    var trues = [], falses = [];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   407
    this.each(function(value, index) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   408
      ((iterator || Prototype.K)(value, index) ?
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   409
        trues : falses).push(value);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   410
    });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   411
    return [trues, falses];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   412
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   413
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   414
  pluck: function(property) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   415
    var results = [];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   416
    this.each(function(value, index) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   417
      results.push(value[property]);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   418
    });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   419
    return results;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   420
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   421
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   422
  reject: function(iterator) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   423
    var results = [];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   424
    this.each(function(value, index) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   425
      if (!iterator(value, index))
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   426
        results.push(value);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   427
    });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   428
    return results;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   429
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   430
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   431
  sortBy: function(iterator) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   432
    return this.collect(function(value, index) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   433
      return {value: value, criteria: iterator(value, index)};
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   434
    }).sort(function(left, right) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   435
      var a = left.criteria, b = right.criteria;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   436
      return a < b ? -1 : a > b ? 1 : 0;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   437
    }).pluck('value');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   438
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   439
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   440
  toArray: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   441
    return this.collect(Prototype.K);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   442
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   443
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   444
  zip: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   445
    var iterator = Prototype.K, args = $A(arguments);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   446
    if (typeof args.last() == 'function')
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   447
      iterator = args.pop();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   448
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   449
    var collections = [this].concat(args).map($A);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   450
    return this.map(function(value, index) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   451
      return iterator(collections.pluck(index));
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   452
    });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   453
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   454
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   455
  inspect: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   456
    return '#<Enumerable:' + this.toArray().inspect() + '>';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   457
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   458
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   459
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   460
Object.extend(Enumerable, {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   461
  map:     Enumerable.collect,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   462
  find:    Enumerable.detect,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   463
  select:  Enumerable.findAll,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   464
  member:  Enumerable.include,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   465
  entries: Enumerable.toArray
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   466
});
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   467
var $A = Array.from = function(iterable) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   468
  if (!iterable) return [];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   469
  if (iterable.toArray) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   470
    return iterable.toArray();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   471
  } else {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   472
    var results = [];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   473
    for (var i = 0; i < iterable.length; i++)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   474
      results.push(iterable[i]);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   475
    return results;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   476
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   477
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   478
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   479
Object.extend(Array.prototype, Enumerable);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   480
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   481
if (!Array.prototype._reverse)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   482
  Array.prototype._reverse = Array.prototype.reverse;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   483
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   484
Object.extend(Array.prototype, {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   485
  _each: function(iterator) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   486
    for (var i = 0; i < this.length; i++)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   487
      iterator(this[i]);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   488
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   489
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   490
  clear: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   491
    this.length = 0;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   492
    return this;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   493
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   494
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   495
  first: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   496
    return this[0];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   497
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   498
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   499
  last: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   500
    return this[this.length - 1];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   501
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   502
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   503
  compact: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   504
    return this.select(function(value) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   505
      return value != undefined || value != null;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   506
    });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   507
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   508
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   509
  flatten: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   510
    return this.inject([], function(array, value) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   511
      return array.concat(value && value.constructor == Array ?
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   512
        value.flatten() : [value]);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   513
    });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   514
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   515
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   516
  without: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   517
    var values = $A(arguments);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   518
    return this.select(function(value) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   519
      return !values.include(value);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   520
    });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   521
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   522
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   523
  indexOf: function(object) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   524
    for (var i = 0; i < this.length; i++)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   525
      if (this[i] == object) return i;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   526
    return -1;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   527
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   528
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   529
  reverse: function(inline) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   530
    return (inline !== false ? this : this.toArray())._reverse();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   531
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   532
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   533
  reduce: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   534
    return this.length > 1 ? this : this[0];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   535
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   536
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   537
  uniq: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   538
    return this.inject([], function(array, value) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   539
      return array.include(value) ? array : array.concat([value]);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   540
    });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   541
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   542
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   543
  inspect: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   544
    return '[' + this.map(Object.inspect).join(', ') + ']';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   545
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   546
});
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   547
var Hash = {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   548
  _each: function(iterator) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   549
    for (var key in this) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   550
      var value = this[key];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   551
      if (typeof value == 'function') continue;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   552
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   553
      var pair = [key, value];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   554
      pair.key = key;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   555
      pair.value = value;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   556
      iterator(pair);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   557
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   558
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   559
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   560
  keys: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   561
    return this.pluck('key');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   562
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   563
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   564
  values: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   565
    return this.pluck('value');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   566
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   567
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   568
  merge: function(hash) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   569
    return $H(hash).inject($H(this), function(mergedHash, pair) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   570
      mergedHash[pair.key] = pair.value;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   571
      return mergedHash;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   572
    });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   573
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   574
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   575
  toQueryString: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   576
    return this.map(function(pair) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   577
      return pair.map(encodeURIComponent).join('=');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   578
    }).join('&');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   579
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   580
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   581
  inspect: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   582
    return '#<Hash:{' + this.map(function(pair) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   583
      return pair.map(Object.inspect).join(': ');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   584
    }).join(', ') + '}>';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   585
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   586
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   587
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   588
function $H(object) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   589
  var hash = Object.extend({}, object || {});
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   590
  Object.extend(hash, Enumerable);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   591
  Object.extend(hash, Hash);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   592
  return hash;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   593
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   594
ObjectRange = Class.create();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   595
Object.extend(ObjectRange.prototype, Enumerable);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   596
Object.extend(ObjectRange.prototype, {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   597
  initialize: function(start, end, exclusive) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   598
    this.start = start;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   599
    this.end = end;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   600
    this.exclusive = exclusive;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   601
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   602
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   603
  _each: function(iterator) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   604
    var value = this.start;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   605
    while (this.include(value)) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   606
      iterator(value);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   607
      value = value.succ();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   608
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   609
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   610
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   611
  include: function(value) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   612
    if (value < this.start)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   613
      return false;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   614
    if (this.exclusive)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   615
      return value < this.end;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   616
    return value <= this.end;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   617
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   618
});
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   619
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   620
var $R = function(start, end, exclusive) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   621
  return new ObjectRange(start, end, exclusive);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   622
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   623
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   624
var Ajax = {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   625
  getTransport: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   626
    return Try.these(
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   627
      function() {return new XMLHttpRequest()},
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   628
      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   629
      function() {return new ActiveXObject('Microsoft.XMLHTTP')}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   630
    ) || false;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   631
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   632
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   633
  activeRequestCount: 0
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   634
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   635
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   636
Ajax.Responders = {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   637
  responders: [],
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   638
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   639
  _each: function(iterator) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   640
    this.responders._each(iterator);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   641
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   642
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   643
  register: function(responderToAdd) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   644
    if (!this.include(responderToAdd))
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   645
      this.responders.push(responderToAdd);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   646
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   647
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   648
  unregister: function(responderToRemove) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   649
    this.responders = this.responders.without(responderToRemove);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   650
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   651
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   652
  dispatch: function(callback, request, transport, json) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   653
    this.each(function(responder) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   654
      if (responder[callback] && typeof responder[callback] == 'function') {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   655
        try {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   656
          responder[callback].apply(responder, [request, transport, json]);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   657
        } catch (e) {}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   658
      }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   659
    });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   660
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   661
};
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   662
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   663
Object.extend(Ajax.Responders, Enumerable);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   664
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   665
Ajax.Responders.register({
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   666
  onCreate: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   667
    Ajax.activeRequestCount++;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   668
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   669
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   670
  onComplete: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   671
    Ajax.activeRequestCount--;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   672
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   673
});
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   674
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   675
Ajax.Base = function() {};
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   676
Ajax.Base.prototype = {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   677
  setOptions: function(options) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   678
    this.options = {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   679
      method:       'post',
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   680
      asynchronous: true,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   681
      contentType:  'application/x-www-form-urlencoded',
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   682
      parameters:   ''
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   683
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   684
    Object.extend(this.options, options || {});
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   685
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   686
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   687
  responseIsSuccess: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   688
    return this.transport.status == undefined
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   689
        || this.transport.status == 0
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   690
        || (this.transport.status >= 200 && this.transport.status < 300);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   691
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   692
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   693
  responseIsFailure: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   694
    return !this.responseIsSuccess();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   695
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   696
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   697
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   698
Ajax.Request = Class.create();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   699
Ajax.Request.Events =
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   700
  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   701
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   702
Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   703
  initialize: function(url, options) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   704
    this.transport = Ajax.getTransport();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   705
    this.setOptions(options);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   706
    this.request(url);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   707
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   708
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   709
  request: function(url) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   710
    var parameters = this.options.parameters || '';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   711
    if (parameters.length > 0) parameters += '&_=';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   712
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   713
    /* Simulate other verbs over post */
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   714
    if (this.options.method != 'get' && this.options.method != 'post') {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   715
      parameters += (parameters.length > 0 ? '&' : '') + '_method=' + this.options.method;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   716
      this.options.method = 'post';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   717
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   718
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   719
    try {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   720
      this.url = url;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   721
      if (this.options.method == 'get' && parameters.length > 0)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   722
        this.url += (this.url.match(/\?/) ? '&' : '?') + parameters;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   723
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   724
      Ajax.Responders.dispatch('onCreate', this, this.transport);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   725
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   726
      this.transport.open(this.options.method, this.url,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   727
        this.options.asynchronous);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   728
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   729
      if (this.options.asynchronous)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   730
        setTimeout(function() { this.respondToReadyState(1) }.bind(this), 10);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   731
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   732
      this.transport.onreadystatechange = this.onStateChange.bind(this);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   733
      this.setRequestHeaders();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   734
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   735
      var body = this.options.postBody ? this.options.postBody : parameters;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   736
      this.transport.send(this.options.method == 'post' ? body : null);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   737
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   738
      /* Force Firefox to handle ready state 4 for synchronous requests */
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   739
      if (!this.options.asynchronous && this.transport.overrideMimeType)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   740
        this.onStateChange();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   741
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   742
    } catch (e) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   743
      this.dispatchException(e);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   744
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   745
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   746
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   747
  setRequestHeaders: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   748
    var requestHeaders =
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   749
      ['X-Requested-With', 'XMLHttpRequest',
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   750
       'X-Prototype-Version', Prototype.Version,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   751
       'Accept', 'text/javascript, text/html, application/xml, text/xml, */*'];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   752
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   753
    if (this.options.method == 'post') {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   754
      requestHeaders.push('Content-type', this.options.contentType);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   755
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   756
      /* Force "Connection: close" for Mozilla browsers to work around
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   757
       * a bug where XMLHttpReqeuest sends an incorrect Content-length
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   758
       * header. See Mozilla Bugzilla #246651.
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   759
       */
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   760
      if (this.transport.overrideMimeType)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   761
        requestHeaders.push('Connection', 'close');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   762
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   763
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   764
    if (this.options.requestHeaders)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   765
      requestHeaders.push.apply(requestHeaders, this.options.requestHeaders);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   766
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   767
    for (var i = 0; i < requestHeaders.length; i += 2)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   768
      this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   769
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   770
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   771
  onStateChange: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   772
    var readyState = this.transport.readyState;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   773
    if (readyState != 1)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   774
      this.respondToReadyState(this.transport.readyState);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   775
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   776
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   777
  header: function(name) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   778
    try {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   779
      return this.transport.getResponseHeader(name);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   780
    } catch (e) {}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   781
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   782
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   783
  evalJSON: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   784
    try {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   785
      return eval('(' + this.header('X-JSON') + ')');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   786
    } catch (e) {}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   787
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   788
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   789
  evalResponse: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   790
    try {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   791
      return eval(this.transport.responseText);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   792
    } catch (e) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   793
      this.dispatchException(e);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   794
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   795
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   796
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   797
  respondToReadyState: function(readyState) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   798
    var event = Ajax.Request.Events[readyState];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   799
    var transport = this.transport, json = this.evalJSON();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   800
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   801
    if (event == 'Complete') {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   802
      try {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   803
        (this.options['on' + this.transport.status]
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   804
         || this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')]
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   805
         || Prototype.emptyFunction)(transport, json);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   806
      } catch (e) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   807
        this.dispatchException(e);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   808
      }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   809
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   810
      if ((this.header('Content-type') || '').match(/^text\/javascript/i))
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   811
        this.evalResponse();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   812
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   813
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   814
    try {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   815
      (this.options['on' + event] || Prototype.emptyFunction)(transport, json);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   816
      Ajax.Responders.dispatch('on' + event, this, transport, json);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   817
    } catch (e) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   818
      this.dispatchException(e);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   819
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   820
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   821
    /* Avoid memory leak in MSIE: clean up the oncomplete event handler */
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   822
    if (event == 'Complete')
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   823
      this.transport.onreadystatechange = Prototype.emptyFunction;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   824
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   825
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   826
  dispatchException: function(exception) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   827
    (this.options.onException || Prototype.emptyFunction)(this, exception);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   828
    Ajax.Responders.dispatch('onException', this, exception);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   829
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   830
});
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   831
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   832
Ajax.Updater = Class.create();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   833
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   834
Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   835
  initialize: function(container, url, options) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   836
    this.containers = {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   837
      success: container.success ? $(container.success) : $(container),
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   838
      failure: container.failure ? $(container.failure) :
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   839
        (container.success ? null : $(container))
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   840
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   841
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   842
    this.transport = Ajax.getTransport();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   843
    this.setOptions(options);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   844
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   845
    var onComplete = this.options.onComplete || Prototype.emptyFunction;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   846
    this.options.onComplete = (function(transport, object) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   847
      this.updateContent();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   848
      onComplete(transport, object);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   849
    }).bind(this);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   850
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   851
    this.request(url);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   852
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   853
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   854
  updateContent: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   855
    var receiver = this.responseIsSuccess() ?
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   856
      this.containers.success : this.containers.failure;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   857
    var response = this.transport.responseText;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   858
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   859
    if (!this.options.evalScripts)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   860
      response = response.stripScripts();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   861
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   862
    if (receiver) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   863
      if (this.options.insertion) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   864
        new this.options.insertion(receiver, response);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   865
      } else {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   866
        Element.update(receiver, response);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   867
      }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   868
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   869
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   870
    if (this.responseIsSuccess()) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   871
      if (this.onComplete)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   872
        setTimeout(this.onComplete.bind(this), 10);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   873
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   874
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   875
});
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   876
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   877
Ajax.PeriodicalUpdater = Class.create();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   878
Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   879
  initialize: function(container, url, options) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   880
    this.setOptions(options);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   881
    this.onComplete = this.options.onComplete;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   882
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   883
    this.frequency = (this.options.frequency || 2);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   884
    this.decay = (this.options.decay || 1);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   885
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   886
    this.updater = {};
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   887
    this.container = container;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   888
    this.url = url;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   889
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   890
    this.start();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   891
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   892
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   893
  start: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   894
    this.options.onComplete = this.updateComplete.bind(this);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   895
    this.onTimerEvent();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   896
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   897
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   898
  stop: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   899
    this.updater.options.onComplete = undefined;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   900
    clearTimeout(this.timer);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   901
    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   902
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   903
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   904
  updateComplete: function(request) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   905
    if (this.options.decay) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   906
      this.decay = (request.responseText == this.lastText ?
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   907
        this.decay * this.options.decay : 1);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   908
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   909
      this.lastText = request.responseText;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   910
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   911
    this.timer = setTimeout(this.onTimerEvent.bind(this),
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   912
      this.decay * this.frequency * 1000);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   913
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   914
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   915
  onTimerEvent: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   916
    this.updater = new Ajax.Updater(this.container, this.url, this.options);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   917
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   918
});
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   919
function $() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   920
  var results = [], element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   921
  for (var i = 0; i < arguments.length; i++) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   922
    element = arguments[i];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   923
    if (typeof element == 'string')
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   924
      element = document.getElementById(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   925
    results.push(Element.extend(element));
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   926
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   927
  return results.reduce();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   928
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   929
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   930
document.getElementsByClassName = function(className, parentElement) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   931
  var children = ($(parentElement) || document.body).getElementsByTagName('*');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   932
  return $A(children).inject([], function(elements, child) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   933
    if (child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   934
      elements.push(Element.extend(child));
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   935
    return elements;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   936
  });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   937
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   938
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   939
/*--------------------------------------------------------------------------*/
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   940
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   941
if (!window.Element)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   942
  var Element = new Object();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   943
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   944
Element.extend = function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   945
  if (!element) return;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   946
  if (_nativeExtensions || element.nodeType == 3) return element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   947
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   948
  if (!element._extended && element.tagName && element != window) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   949
    var methods = Object.clone(Element.Methods), cache = Element.extend.cache;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   950
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   951
    if (element.tagName == 'FORM')
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   952
      Object.extend(methods, Form.Methods);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   953
    if (['INPUT', 'TEXTAREA', 'SELECT'].include(element.tagName))
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   954
      Object.extend(methods, Form.Element.Methods);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   955
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   956
    for (var property in methods) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   957
      var value = methods[property];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   958
      if (typeof value == 'function')
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   959
        element[property] = cache.findOrStore(value);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   960
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   961
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   962
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   963
  element._extended = true;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   964
  return element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   965
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   966
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   967
Element.extend.cache = {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   968
  findOrStore: function(value) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   969
    return this[value] = this[value] || function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   970
      return value.apply(null, [this].concat($A(arguments)));
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   971
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   972
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   973
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   974
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   975
Element.Methods = {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   976
  visible: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   977
    return $(element).style.display != 'none';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   978
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   979
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   980
  toggle: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   981
    element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   982
    Element[Element.visible(element) ? 'hide' : 'show'](element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   983
    return element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   984
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   985
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   986
  hide: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   987
    $(element).style.display = 'none';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   988
    return element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   989
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   990
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   991
  show: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   992
    $(element).style.display = '';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   993
    return element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   994
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   995
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   996
  remove: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   997
    element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   998
    element.parentNode.removeChild(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
   999
    return element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1000
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1001
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1002
  update: function(element, html) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1003
    $(element).innerHTML = html.stripScripts();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1004
    setTimeout(function() {html.evalScripts()}, 10);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1005
    return element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1006
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1007
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1008
  replace: function(element, html) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1009
    element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1010
    if (element.outerHTML) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1011
      element.outerHTML = html.stripScripts();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1012
    } else {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1013
      var range = element.ownerDocument.createRange();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1014
      range.selectNodeContents(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1015
      element.parentNode.replaceChild(
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1016
        range.createContextualFragment(html.stripScripts()), element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1017
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1018
    setTimeout(function() {html.evalScripts()}, 10);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1019
    return element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1020
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1021
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1022
  inspect: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1023
    element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1024
    var result = '<' + element.tagName.toLowerCase();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1025
    $H({'id': 'id', 'className': 'class'}).each(function(pair) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1026
      var property = pair.first(), attribute = pair.last();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1027
      var value = (element[property] || '').toString();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1028
      if (value) result += ' ' + attribute + '=' + value.inspect(true);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1029
    });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1030
    return result + '>';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1031
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1032
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1033
  recursivelyCollect: function(element, property) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1034
    element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1035
    var elements = [];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1036
    while (element = element[property])
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1037
      if (element.nodeType == 1)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1038
        elements.push(Element.extend(element));
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1039
    return elements;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1040
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1041
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1042
  ancestors: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1043
    return $(element).recursivelyCollect('parentNode');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1044
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1045
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1046
  descendants: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1047
    element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1048
    return $A(element.getElementsByTagName('*'));
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1049
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1050
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1051
  previousSiblings: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1052
    return $(element).recursivelyCollect('previousSibling');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1053
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1054
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1055
  nextSiblings: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1056
    return $(element).recursivelyCollect('nextSibling');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1057
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1058
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1059
  siblings: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1060
    element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1061
    return element.previousSiblings().reverse().concat(element.nextSiblings());
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1062
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1063
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1064
  match: function(element, selector) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1065
    element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1066
    if (typeof selector == 'string')
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1067
      selector = new Selector(selector);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1068
    return selector.match(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1069
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1070
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1071
  up: function(element, expression, index) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1072
    return Selector.findElement($(element).ancestors(), expression, index);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1073
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1074
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1075
  down: function(element, expression, index) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1076
    return Selector.findElement($(element).descendants(), expression, index);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1077
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1078
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1079
  previous: function(element, expression, index) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1080
    return Selector.findElement($(element).previousSiblings(), expression, index);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1081
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1082
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1083
  next: function(element, expression, index) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1084
    return Selector.findElement($(element).nextSiblings(), expression, index);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1085
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1086
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1087
  getElementsBySelector: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1088
    var args = $A(arguments), element = $(args.shift());
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1089
    return Selector.findChildElements(element, args);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1090
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1091
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1092
  getElementsByClassName: function(element, className) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1093
    element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1094
    return document.getElementsByClassName(className, element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1095
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1096
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1097
  getHeight: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1098
    element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1099
    return element.offsetHeight;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1100
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1101
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1102
  classNames: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1103
    return new Element.ClassNames(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1104
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1105
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1106
  hasClassName: function(element, className) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1107
    if (!(element = $(element))) return;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1108
    return Element.classNames(element).include(className);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1109
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1110
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1111
  addClassName: function(element, className) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1112
    if (!(element = $(element))) return;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1113
    Element.classNames(element).add(className);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1114
    return element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1115
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1116
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1117
  removeClassName: function(element, className) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1118
    if (!(element = $(element))) return;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1119
    Element.classNames(element).remove(className);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1120
    return element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1121
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1122
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1123
  observe: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1124
    Event.observe.apply(Event, arguments);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1125
    return $A(arguments).first();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1126
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1127
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1128
  stopObserving: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1129
    Event.stopObserving.apply(Event, arguments);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1130
    return $A(arguments).first();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1131
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1132
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1133
  // removes whitespace-only text node children
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1134
  cleanWhitespace: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1135
    element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1136
    var node = element.firstChild;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1137
    while (node) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1138
      var nextNode = node.nextSibling;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1139
      if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1140
        element.removeChild(node);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1141
      node = nextNode;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1142
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1143
    return element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1144
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1145
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1146
  empty: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1147
    return $(element).innerHTML.match(/^\s*$/);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1148
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1149
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1150
  childOf: function(element, ancestor) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1151
    element = $(element), ancestor = $(ancestor);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1152
    while (element = element.parentNode)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1153
      if (element == ancestor) return true;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1154
    return false;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1155
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1156
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1157
  scrollTo: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1158
    element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1159
    var x = element.x ? element.x : element.offsetLeft,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1160
        y = element.y ? element.y : element.offsetTop;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1161
    window.scrollTo(x, y);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1162
    return element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1163
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1164
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1165
  getStyle: function(element, style) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1166
    element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1167
    var value = element.style[style.camelize()];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1168
    if (!value) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1169
      if (document.defaultView && document.defaultView.getComputedStyle) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1170
        var css = document.defaultView.getComputedStyle(element, null);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1171
        value = css ? css.getPropertyValue(style) : null;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1172
      } else if (element.currentStyle) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1173
        value = element.currentStyle[style.camelize()];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1174
      }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1175
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1176
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1177
    if (window.opera && ['left', 'top', 'right', 'bottom'].include(style))
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1178
      if (Element.getStyle(element, 'position') == 'static') value = 'auto';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1179
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1180
    return value == 'auto' ? null : value;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1181
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1182
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1183
  setStyle: function(element, style) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1184
    element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1185
    for (var name in style)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1186
      element.style[name.camelize()] = style[name];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1187
    return element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1188
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1189
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1190
  getDimensions: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1191
    element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1192
    if (Element.getStyle(element, 'display') != 'none')
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1193
      return {width: element.offsetWidth, height: element.offsetHeight};
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1194
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1195
    // All *Width and *Height properties give 0 on elements with display none,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1196
    // so enable the element temporarily
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1197
    var els = element.style;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1198
    var originalVisibility = els.visibility;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1199
    var originalPosition = els.position;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1200
    els.visibility = 'hidden';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1201
    els.position = 'absolute';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1202
    els.display = '';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1203
    var originalWidth = element.clientWidth;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1204
    var originalHeight = element.clientHeight;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1205
    els.display = 'none';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1206
    els.position = originalPosition;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1207
    els.visibility = originalVisibility;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1208
    return {width: originalWidth, height: originalHeight};
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1209
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1210
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1211
  makePositioned: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1212
    element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1213
    var pos = Element.getStyle(element, 'position');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1214
    if (pos == 'static' || !pos) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1215
      element._madePositioned = true;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1216
      element.style.position = 'relative';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1217
      // Opera returns the offset relative to the positioning context, when an
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1218
      // element is position relative but top and left have not been defined
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1219
      if (window.opera) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1220
        element.style.top = 0;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1221
        element.style.left = 0;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1222
      }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1223
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1224
    return element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1225
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1226
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1227
  undoPositioned: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1228
    element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1229
    if (element._madePositioned) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1230
      element._madePositioned = undefined;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1231
      element.style.position =
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1232
        element.style.top =
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1233
        element.style.left =
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1234
        element.style.bottom =
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1235
        element.style.right = '';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1236
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1237
    return element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1238
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1239
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1240
  makeClipping: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1241
    element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1242
    if (element._overflow) return;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1243
    element._overflow = element.style.overflow || 'auto';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1244
    if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1245
      element.style.overflow = 'hidden';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1246
    return element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1247
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1248
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1249
  undoClipping: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1250
    element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1251
    if (!element._overflow) return;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1252
    element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1253
    element._overflow = null;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1254
    return element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1255
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1256
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1257
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1258
// IE is missing .innerHTML support for TABLE-related elements
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1259
if(document.all){
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1260
  Element.Methods.update = function(element, html) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1261
    element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1262
    var tagName = element.tagName.toUpperCase();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1263
    if (['THEAD','TBODY','TR','TD'].indexOf(tagName) > -1) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1264
      var div = document.createElement('div');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1265
      switch (tagName) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1266
        case 'THEAD':
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1267
        case 'TBODY':
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1268
          div.innerHTML = '<table><tbody>' +  html.stripScripts() + '</tbody></table>';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1269
          depth = 2;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1270
          break;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1271
        case 'TR':
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1272
          div.innerHTML = '<table><tbody><tr>' +  html.stripScripts() + '</tr></tbody></table>';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1273
          depth = 3;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1274
          break;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1275
        case 'TD':
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1276
          div.innerHTML = '<table><tbody><tr><td>' +  html.stripScripts() + '</td></tr></tbody></table>';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1277
          depth = 4;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1278
      }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1279
      $A(element.childNodes).each(function(node){
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1280
        element.removeChild(node)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1281
      });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1282
      depth.times(function(){ div = div.firstChild });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1283
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1284
      $A(div.childNodes).each(
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1285
        function(node){ element.appendChild(node) });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1286
    } else {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1287
      element.innerHTML = html.stripScripts();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1288
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1289
    setTimeout(function() {html.evalScripts()}, 10);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1290
    return element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1291
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1292
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1293
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1294
Object.extend(Element, Element.Methods);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1295
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1296
var _nativeExtensions = false;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1297
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1298
if (!window.HTMLElement && /Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1299
  /* Emulate HTMLElement, HTMLFormElement, HTMLInputElement, HTMLTextAreaElement,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1300
     and HTMLSelectElement in Safari */
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1301
  ['', 'Form', 'Input', 'TextArea', 'Select'].each(function(tag) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1302
    var klass = window['HTML' + tag + 'Element'] = {};
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1303
    klass.prototype = document.createElement(tag ? tag.toLowerCase() : 'div').__proto__;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1304
  });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1305
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1306
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1307
Element.addMethods = function(methods) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1308
  Object.extend(Element.Methods, methods || {});
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1309
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1310
  function copy(methods, destination) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1311
    var cache = Element.extend.cache;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1312
    for (var property in methods) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1313
      var value = methods[property];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1314
      destination[property] = cache.findOrStore(value);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1315
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1316
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1317
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1318
  if (typeof HTMLElement != 'undefined') {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1319
    copy(Element.Methods, HTMLElement.prototype);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1320
    copy(Form.Methods, HTMLFormElement.prototype);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1321
    [HTMLInputElement, HTMLTextAreaElement, HTMLSelectElement].each(function(klass) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1322
      copy(Form.Element.Methods, klass.prototype);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1323
    });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1324
    _nativeExtensions = true;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1325
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1326
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1327
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1328
var Toggle = new Object();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1329
Toggle.display = Element.toggle;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1330
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1331
/*--------------------------------------------------------------------------*/
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1332
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1333
Abstract.Insertion = function(adjacency) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1334
  this.adjacency = adjacency;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1335
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1336
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1337
Abstract.Insertion.prototype = {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1338
  initialize: function(element, content) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1339
    this.element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1340
    this.content = content.stripScripts();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1341
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1342
    if (this.adjacency && this.element.insertAdjacentHTML) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1343
      try {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1344
        this.element.insertAdjacentHTML(this.adjacency, this.content);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1345
      } catch (e) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1346
        var tagName = this.element.tagName.toLowerCase();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1347
        if (tagName == 'tbody' || tagName == 'tr') {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1348
          this.insertContent(this.contentFromAnonymousTable());
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1349
        } else {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1350
          throw e;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1351
        }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1352
      }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1353
    } else {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1354
      this.range = this.element.ownerDocument.createRange();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1355
      if (this.initializeRange) this.initializeRange();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1356
      this.insertContent([this.range.createContextualFragment(this.content)]);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1357
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1358
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1359
    setTimeout(function() {content.evalScripts()}, 10);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1360
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1361
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1362
  contentFromAnonymousTable: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1363
    var div = document.createElement('div');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1364
    div.innerHTML = '<table><tbody>' + this.content + '</tbody></table>';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1365
    return $A(div.childNodes[0].childNodes[0].childNodes);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1366
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1367
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1368
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1369
var Insertion = new Object();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1370
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1371
Insertion.Before = Class.create();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1372
Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1373
  initializeRange: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1374
    this.range.setStartBefore(this.element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1375
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1376
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1377
  insertContent: function(fragments) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1378
    fragments.each((function(fragment) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1379
      this.element.parentNode.insertBefore(fragment, this.element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1380
    }).bind(this));
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1381
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1382
});
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1383
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1384
Insertion.Top = Class.create();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1385
Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1386
  initializeRange: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1387
    this.range.selectNodeContents(this.element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1388
    this.range.collapse(true);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1389
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1390
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1391
  insertContent: function(fragments) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1392
    fragments.reverse(false).each((function(fragment) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1393
      this.element.insertBefore(fragment, this.element.firstChild);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1394
    }).bind(this));
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1395
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1396
});
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1397
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1398
Insertion.Bottom = Class.create();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1399
Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1400
  initializeRange: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1401
    this.range.selectNodeContents(this.element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1402
    this.range.collapse(this.element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1403
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1404
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1405
  insertContent: function(fragments) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1406
    fragments.each((function(fragment) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1407
      this.element.appendChild(fragment);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1408
    }).bind(this));
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1409
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1410
});
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1411
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1412
Insertion.After = Class.create();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1413
Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1414
  initializeRange: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1415
    this.range.setStartAfter(this.element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1416
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1417
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1418
  insertContent: function(fragments) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1419
    fragments.each((function(fragment) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1420
      this.element.parentNode.insertBefore(fragment,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1421
        this.element.nextSibling);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1422
    }).bind(this));
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1423
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1424
});
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1425
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1426
/*--------------------------------------------------------------------------*/
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1427
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1428
Element.ClassNames = Class.create();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1429
Element.ClassNames.prototype = {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1430
  initialize: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1431
    this.element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1432
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1433
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1434
  _each: function(iterator) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1435
    this.element.className.split(/\s+/).select(function(name) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1436
      return name.length > 0;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1437
    })._each(iterator);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1438
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1439
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1440
  set: function(className) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1441
    this.element.className = className;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1442
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1443
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1444
  add: function(classNameToAdd) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1445
    if (this.include(classNameToAdd)) return;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1446
    this.set(this.toArray().concat(classNameToAdd).join(' '));
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1447
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1448
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1449
  remove: function(classNameToRemove) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1450
    if (!this.include(classNameToRemove)) return;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1451
    this.set(this.select(function(className) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1452
      return className != classNameToRemove;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1453
    }).join(' '));
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1454
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1455
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1456
  toString: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1457
    return this.toArray().join(' ');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1458
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1459
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1460
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1461
Object.extend(Element.ClassNames.prototype, Enumerable);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1462
var Selector = Class.create();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1463
Selector.prototype = {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1464
  initialize: function(expression) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1465
    this.params = {classNames: []};
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1466
    this.expression = expression.toString().strip();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1467
    this.parseExpression();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1468
    this.compileMatcher();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1469
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1470
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1471
  parseExpression: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1472
    function abort(message) { throw 'Parse error in selector: ' + message; }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1473
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1474
    if (this.expression == '')  abort('empty expression');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1475
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1476
    var params = this.params, expr = this.expression, match, modifier, clause, rest;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1477
    while (match = expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1478
      params.attributes = params.attributes || [];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1479
      params.attributes.push({name: match[2], operator: match[3], value: match[4] || match[5] || ''});
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1480
      expr = match[1];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1481
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1482
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1483
    if (expr == '*') return this.params.wildcard = true;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1484
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1485
    while (match = expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1486
      modifier = match[1], clause = match[2], rest = match[3];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1487
      switch (modifier) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1488
        case '#':       params.id = clause; break;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1489
        case '.':       params.classNames.push(clause); break;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1490
        case '':
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1491
        case undefined: params.tagName = clause.toUpperCase(); break;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1492
        default:        abort(expr.inspect());
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1493
      }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1494
      expr = rest;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1495
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1496
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1497
    if (expr.length > 0) abort(expr.inspect());
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1498
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1499
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1500
  buildMatchExpression: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1501
    var params = this.params, conditions = [], clause;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1502
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1503
    if (params.wildcard)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1504
      conditions.push('true');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1505
    if (clause = params.id)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1506
      conditions.push('element.id == ' + clause.inspect());
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1507
    if (clause = params.tagName)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1508
      conditions.push('element.tagName.toUpperCase() == ' + clause.inspect());
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1509
    if ((clause = params.classNames).length > 0)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1510
      for (var i = 0; i < clause.length; i++)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1511
        conditions.push('Element.hasClassName(element, ' + clause[i].inspect() + ')');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1512
    if (clause = params.attributes) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1513
      clause.each(function(attribute) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1514
        var value = 'element.getAttribute(' + attribute.name.inspect() + ')';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1515
        var splitValueBy = function(delimiter) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1516
          return value + ' && ' + value + '.split(' + delimiter.inspect() + ')';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1517
        }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1518
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1519
        switch (attribute.operator) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1520
          case '=':       conditions.push(value + ' == ' + attribute.value.inspect()); break;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1521
          case '~=':      conditions.push(splitValueBy(' ') + '.include(' + attribute.value.inspect() + ')'); break;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1522
          case '|=':      conditions.push(
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1523
                            splitValueBy('-') + '.first().toUpperCase() == ' + attribute.value.toUpperCase().inspect()
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1524
                          ); break;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1525
          case '!=':      conditions.push(value + ' != ' + attribute.value.inspect()); break;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1526
          case '':
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1527
          case undefined: conditions.push(value + ' != null'); break;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1528
          default:        throw 'Unknown operator ' + attribute.operator + ' in selector';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1529
        }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1530
      });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1531
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1532
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1533
    return conditions.join(' && ');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1534
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1535
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1536
  compileMatcher: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1537
    this.match = new Function('element', 'if (!element.tagName) return false; \
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1538
      return ' + this.buildMatchExpression());
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1539
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1540
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1541
  findElements: function(scope) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1542
    var element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1543
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1544
    if (element = $(this.params.id))
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1545
      if (this.match(element))
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1546
        if (!scope || Element.childOf(element, scope))
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1547
          return [element];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1548
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1549
    scope = (scope || document).getElementsByTagName(this.params.tagName || '*');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1550
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1551
    var results = [];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1552
    for (var i = 0; i < scope.length; i++)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1553
      if (this.match(element = scope[i]))
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1554
        results.push(Element.extend(element));
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1555
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1556
    return results;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1557
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1558
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1559
  toString: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1560
    return this.expression;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1561
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1562
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1563
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1564
Object.extend(Selector, {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1565
  matchElements: function(elements, expression) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1566
    var selector = new Selector(expression);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1567
    return elements.select(selector.match.bind(selector));
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1568
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1569
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1570
  findElement: function(elements, expression, index) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1571
    if (typeof expression == 'number') index = expression, expression = false;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1572
    return Selector.matchElements(elements, expression || '*')[index || 0];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1573
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1574
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1575
  findChildElements: function(element, expressions) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1576
    return expressions.map(function(expression) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1577
      return expression.strip().split(/\s+/).inject([null], function(results, expr) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1578
        var selector = new Selector(expr);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1579
        return results.inject([], function(elements, result) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1580
          return elements.concat(selector.findElements(result || element));
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1581
        });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1582
      });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1583
    }).flatten();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1584
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1585
});
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1586
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1587
function $$() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1588
  return Selector.findChildElements(document, $A(arguments));
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1589
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1590
var Form = {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1591
  reset: function(form) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1592
    $(form).reset();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1593
    return form;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1594
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1595
};
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1596
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1597
Form.Methods = {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1598
  serialize: function(form) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1599
    var elements = Form.getElements($(form));
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1600
    var queryComponents = new Array();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1601
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1602
    for (var i = 0; i < elements.length; i++) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1603
      var queryComponent = Form.Element.serialize(elements[i]);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1604
      if (queryComponent)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1605
        queryComponents.push(queryComponent);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1606
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1607
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1608
    return queryComponents.join('&');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1609
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1610
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1611
  getElements: function(form) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1612
    form = $(form);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1613
    var elements = new Array();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1614
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1615
    for (var tagName in Form.Element.Serializers) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1616
      var tagElements = form.getElementsByTagName(tagName);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1617
      for (var j = 0; j < tagElements.length; j++)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1618
        elements.push(tagElements[j]);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1619
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1620
    return elements;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1621
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1622
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1623
  getInputs: function(form, typeName, name) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1624
    form = $(form);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1625
    var inputs = form.getElementsByTagName('input');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1626
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1627
    if (!typeName && !name)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1628
      return inputs;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1629
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1630
    var matchingInputs = new Array();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1631
    for (var i = 0; i < inputs.length; i++) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1632
      var input = inputs[i];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1633
      if ((typeName && input.type != typeName) ||
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1634
          (name && input.name != name))
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1635
        continue;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1636
      matchingInputs.push(input);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1637
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1638
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1639
    return matchingInputs;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1640
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1641
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1642
  disable: function(form) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1643
    form = $(form);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1644
    var elements = Form.getElements(form);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1645
    for (var i = 0; i < elements.length; i++) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1646
      var element = elements[i];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1647
      element.blur();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1648
      element.disabled = 'true';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1649
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1650
    return form;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1651
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1652
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1653
  enable: function(form) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1654
    form = $(form);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1655
    var elements = Form.getElements(form);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1656
    for (var i = 0; i < elements.length; i++) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1657
      var element = elements[i];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1658
      element.disabled = '';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1659
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1660
    return form;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1661
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1662
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1663
  findFirstElement: function(form) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1664
    return Form.getElements(form).find(function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1665
      return element.type != 'hidden' && !element.disabled &&
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1666
        ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1667
    });
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1668
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1669
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1670
  focusFirstElement: function(form) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1671
    form = $(form);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1672
    Field.activate(Form.findFirstElement(form));
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1673
    return form;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1674
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1675
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1676
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1677
Object.extend(Form, Form.Methods);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1678
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1679
/*--------------------------------------------------------------------------*/
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1680
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1681
Form.Element = {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1682
  focus: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1683
    $(element).focus();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1684
    return element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1685
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1686
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1687
  select: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1688
    $(element).select();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1689
    return element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1690
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1691
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1692
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1693
Form.Element.Methods = {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1694
  serialize: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1695
    element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1696
    var method = element.tagName.toLowerCase();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1697
    var parameter = Form.Element.Serializers[method](element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1698
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1699
    if (parameter) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1700
      var key = encodeURIComponent(parameter[0]);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1701
      if (key.length == 0) return;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1702
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1703
      if (parameter[1].constructor != Array)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1704
        parameter[1] = [parameter[1]];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1705
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1706
      return parameter[1].map(function(value) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1707
        return key + '=' + encodeURIComponent(value);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1708
      }).join('&');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1709
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1710
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1711
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1712
  getValue: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1713
    element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1714
    var method = element.tagName.toLowerCase();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1715
    var parameter = Form.Element.Serializers[method](element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1716
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1717
    if (parameter)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1718
      return parameter[1];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1719
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1720
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1721
  clear: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1722
    $(element).value = '';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1723
    return element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1724
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1725
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1726
  present: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1727
    return $(element).value != '';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1728
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1729
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1730
  activate: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1731
    element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1732
    element.focus();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1733
    if (element.select)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1734
      element.select();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1735
    return element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1736
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1737
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1738
  disable: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1739
    element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1740
    element.disabled = '';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1741
    return element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1742
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1743
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1744
  enable: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1745
    element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1746
    element.blur();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1747
    element.disabled = 'true';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1748
    return element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1749
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1750
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1751
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1752
Object.extend(Form.Element, Form.Element.Methods);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1753
var Field = Form.Element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1754
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1755
/*--------------------------------------------------------------------------*/
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1756
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1757
Form.Element.Serializers = {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1758
  input: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1759
    switch (element.type.toLowerCase()) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1760
      case 'checkbox':
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1761
      case 'radio':
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1762
        return Form.Element.Serializers.inputSelector(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1763
      default:
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1764
        return Form.Element.Serializers.textarea(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1765
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1766
    return false;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1767
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1768
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1769
  inputSelector: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1770
    if (element.checked)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1771
      return [element.name, element.value];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1772
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1773
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1774
  textarea: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1775
    return [element.name, element.value];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1776
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1777
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1778
  select: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1779
    return Form.Element.Serializers[element.type == 'select-one' ?
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1780
      'selectOne' : 'selectMany'](element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1781
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1782
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1783
  selectOne: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1784
    var value = '', opt, index = element.selectedIndex;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1785
    if (index >= 0) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1786
      opt = element.options[index];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1787
      value = opt.value || opt.text;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1788
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1789
    return [element.name, value];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1790
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1791
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1792
  selectMany: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1793
    var value = [];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1794
    for (var i = 0; i < element.length; i++) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1795
      var opt = element.options[i];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1796
      if (opt.selected)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1797
        value.push(opt.value || opt.text);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1798
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1799
    return [element.name, value];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1800
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1801
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1802
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1803
/*--------------------------------------------------------------------------*/
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1804
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1805
var $F = Form.Element.getValue;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1806
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1807
/*--------------------------------------------------------------------------*/
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1808
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1809
Abstract.TimedObserver = function() {}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1810
Abstract.TimedObserver.prototype = {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1811
  initialize: function(element, frequency, callback) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1812
    this.frequency = frequency;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1813
    this.element   = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1814
    this.callback  = callback;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1815
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1816
    this.lastValue = this.getValue();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1817
    this.registerCallback();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1818
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1819
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1820
  registerCallback: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1821
    setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1822
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1823
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1824
  onTimerEvent: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1825
    var value = this.getValue();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1826
    if (this.lastValue != value) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1827
      this.callback(this.element, value);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1828
      this.lastValue = value;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1829
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1830
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1831
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1832
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1833
Form.Element.Observer = Class.create();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1834
Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1835
  getValue: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1836
    return Form.Element.getValue(this.element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1837
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1838
});
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1839
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1840
Form.Observer = Class.create();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1841
Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1842
  getValue: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1843
    return Form.serialize(this.element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1844
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1845
});
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1846
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1847
/*--------------------------------------------------------------------------*/
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1848
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1849
Abstract.EventObserver = function() {}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1850
Abstract.EventObserver.prototype = {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1851
  initialize: function(element, callback) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1852
    this.element  = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1853
    this.callback = callback;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1854
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1855
    this.lastValue = this.getValue();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1856
    if (this.element.tagName.toLowerCase() == 'form')
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1857
      this.registerFormCallbacks();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1858
    else
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1859
      this.registerCallback(this.element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1860
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1861
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1862
  onElementEvent: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1863
    var value = this.getValue();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1864
    if (this.lastValue != value) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1865
      this.callback(this.element, value);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1866
      this.lastValue = value;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1867
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1868
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1869
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1870
  registerFormCallbacks: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1871
    var elements = Form.getElements(this.element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1872
    for (var i = 0; i < elements.length; i++)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1873
      this.registerCallback(elements[i]);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1874
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1875
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1876
  registerCallback: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1877
    if (element.type) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1878
      switch (element.type.toLowerCase()) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1879
        case 'checkbox':
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1880
        case 'radio':
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1881
          Event.observe(element, 'click', this.onElementEvent.bind(this));
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1882
          break;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1883
        default:
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1884
          Event.observe(element, 'change', this.onElementEvent.bind(this));
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1885
          break;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1886
      }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1887
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1888
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1889
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1890
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1891
Form.Element.EventObserver = Class.create();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1892
Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1893
  getValue: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1894
    return Form.Element.getValue(this.element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1895
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1896
});
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1897
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1898
Form.EventObserver = Class.create();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1899
Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1900
  getValue: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1901
    return Form.serialize(this.element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1902
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1903
});
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1904
if (!window.Event) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1905
  var Event = new Object();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1906
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1907
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1908
Object.extend(Event, {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1909
  KEY_BACKSPACE: 8,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1910
  KEY_TAB:       9,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1911
  KEY_RETURN:   13,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1912
  KEY_ESC:      27,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1913
  KEY_LEFT:     37,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1914
  KEY_UP:       38,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1915
  KEY_RIGHT:    39,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1916
  KEY_DOWN:     40,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1917
  KEY_DELETE:   46,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1918
  KEY_HOME:     36,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1919
  KEY_END:      35,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1920
  KEY_PAGEUP:   33,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1921
  KEY_PAGEDOWN: 34,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1922
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1923
  element: function(event) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1924
    return event.target || event.srcElement;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1925
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1926
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1927
  isLeftClick: function(event) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1928
    return (((event.which) && (event.which == 1)) ||
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1929
            ((event.button) && (event.button == 1)));
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1930
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1931
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1932
  pointerX: function(event) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1933
    return event.pageX || (event.clientX +
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1934
      (document.documentElement.scrollLeft || document.body.scrollLeft));
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1935
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1936
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1937
  pointerY: function(event) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1938
    return event.pageY || (event.clientY +
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1939
      (document.documentElement.scrollTop || document.body.scrollTop));
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1940
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1941
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1942
  stop: function(event) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1943
    if (event.preventDefault) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1944
      event.preventDefault();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1945
      event.stopPropagation();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1946
    } else {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1947
      event.returnValue = false;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1948
      event.cancelBubble = true;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1949
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1950
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1951
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1952
  // find the first node with the given tagName, starting from the
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1953
  // node the event was triggered on; traverses the DOM upwards
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1954
  findElement: function(event, tagName) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1955
    var element = Event.element(event);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1956
    while (element.parentNode && (!element.tagName ||
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1957
        (element.tagName.toUpperCase() != tagName.toUpperCase())))
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1958
      element = element.parentNode;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1959
    return element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1960
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1961
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1962
  observers: false,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1963
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1964
  _observeAndCache: function(element, name, observer, useCapture) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1965
    if (!this.observers) this.observers = [];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1966
    if (element.addEventListener) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1967
      this.observers.push([element, name, observer, useCapture]);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1968
      element.addEventListener(name, observer, useCapture);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1969
    } else if (element.attachEvent) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1970
      this.observers.push([element, name, observer, useCapture]);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1971
      element.attachEvent('on' + name, observer);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1972
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1973
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1974
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1975
  unloadCache: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1976
    if (!Event.observers) return;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1977
    for (var i = 0; i < Event.observers.length; i++) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1978
      Event.stopObserving.apply(this, Event.observers[i]);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1979
      Event.observers[i][0] = null;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1980
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1981
    Event.observers = false;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1982
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1983
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1984
  observe: function(element, name, observer, useCapture) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1985
    element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1986
    useCapture = useCapture || false;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1987
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1988
    if (name == 'keypress' &&
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1989
        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1990
        || element.attachEvent))
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1991
      name = 'keydown';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1992
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1993
    Event._observeAndCache(element, name, observer, useCapture);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1994
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1995
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1996
  stopObserving: function(element, name, observer, useCapture) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1997
    element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1998
    useCapture = useCapture || false;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  1999
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2000
    if (name == 'keypress' &&
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2001
        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2002
        || element.detachEvent))
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2003
      name = 'keydown';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2004
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2005
    if (element.removeEventListener) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2006
      element.removeEventListener(name, observer, useCapture);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2007
    } else if (element.detachEvent) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2008
      try {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2009
        element.detachEvent('on' + name, observer);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2010
      } catch (e) {}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2011
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2012
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2013
});
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2014
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2015
/* prevent memory leaks in IE */
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2016
if (navigator.appVersion.match(/\bMSIE\b/))
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2017
  Event.observe(window, 'unload', Event.unloadCache, false);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2018
var Position = {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2019
  // set to true if needed, warning: firefox performance problems
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2020
  // NOT neeeded for page scrolling, only if draggable contained in
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2021
  // scrollable elements
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2022
  includeScrollOffsets: false,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2023
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2024
  // must be called before calling withinIncludingScrolloffset, every time the
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2025
  // page is scrolled
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2026
  prepare: function() {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2027
    this.deltaX =  window.pageXOffset
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2028
                || document.documentElement.scrollLeft
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2029
                || document.body.scrollLeft
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2030
                || 0;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2031
    this.deltaY =  window.pageYOffset
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2032
                || document.documentElement.scrollTop
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2033
                || document.body.scrollTop
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2034
                || 0;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2035
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2036
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2037
  realOffset: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2038
    var valueT = 0, valueL = 0;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2039
    do {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2040
      valueT += element.scrollTop  || 0;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2041
      valueL += element.scrollLeft || 0;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2042
      element = element.parentNode;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2043
    } while (element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2044
    return [valueL, valueT];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2045
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2046
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2047
  cumulativeOffset: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2048
    var valueT = 0, valueL = 0;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2049
    do {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2050
      valueT += element.offsetTop  || 0;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2051
      valueL += element.offsetLeft || 0;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2052
      element = element.offsetParent;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2053
    } while (element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2054
    return [valueL, valueT];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2055
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2056
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2057
  positionedOffset: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2058
    var valueT = 0, valueL = 0;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2059
    do {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2060
      valueT += element.offsetTop  || 0;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2061
      valueL += element.offsetLeft || 0;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2062
      element = element.offsetParent;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2063
      if (element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2064
        p = Element.getStyle(element, 'position');
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2065
        if (p == 'relative' || p == 'absolute') break;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2066
      }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2067
    } while (element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2068
    return [valueL, valueT];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2069
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2070
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2071
  offsetParent: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2072
    if (element.offsetParent) return element.offsetParent;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2073
    if (element == document.body) return element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2074
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2075
    while ((element = element.parentNode) && element != document.body)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2076
      if (Element.getStyle(element, 'position') != 'static')
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2077
        return element;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2078
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2079
    return document.body;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2080
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2081
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2082
  // caches x/y coordinate pair to use with overlap
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2083
  within: function(element, x, y) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2084
    if (this.includeScrollOffsets)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2085
      return this.withinIncludingScrolloffsets(element, x, y);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2086
    this.xcomp = x;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2087
    this.ycomp = y;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2088
    this.offset = this.cumulativeOffset(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2089
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2090
    return (y >= this.offset[1] &&
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2091
            y <  this.offset[1] + element.offsetHeight &&
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2092
            x >= this.offset[0] &&
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2093
            x <  this.offset[0] + element.offsetWidth);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2094
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2095
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2096
  withinIncludingScrolloffsets: function(element, x, y) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2097
    var offsetcache = this.realOffset(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2098
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2099
    this.xcomp = x + offsetcache[0] - this.deltaX;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2100
    this.ycomp = y + offsetcache[1] - this.deltaY;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2101
    this.offset = this.cumulativeOffset(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2102
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2103
    return (this.ycomp >= this.offset[1] &&
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2104
            this.ycomp <  this.offset[1] + element.offsetHeight &&
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2105
            this.xcomp >= this.offset[0] &&
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2106
            this.xcomp <  this.offset[0] + element.offsetWidth);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2107
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2108
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2109
  // within must be called directly before
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2110
  overlap: function(mode, element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2111
    if (!mode) return 0;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2112
    if (mode == 'vertical')
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2113
      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2114
        element.offsetHeight;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2115
    if (mode == 'horizontal')
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2116
      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2117
        element.offsetWidth;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2118
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2119
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2120
  page: function(forElement) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2121
    var valueT = 0, valueL = 0;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2122
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2123
    var element = forElement;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2124
    do {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2125
      valueT += element.offsetTop  || 0;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2126
      valueL += element.offsetLeft || 0;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2127
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2128
      // Safari fix
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2129
      if (element.offsetParent==document.body)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2130
        if (Element.getStyle(element,'position')=='absolute') break;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2131
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2132
    } while (element = element.offsetParent);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2133
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2134
    element = forElement;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2135
    do {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2136
      if (!window.opera || element.tagName=='BODY') {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2137
        valueT -= element.scrollTop  || 0;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2138
        valueL -= element.scrollLeft || 0;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2139
      }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2140
    } while (element = element.parentNode);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2141
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2142
    return [valueL, valueT];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2143
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2144
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2145
  clone: function(source, target) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2146
    var options = Object.extend({
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2147
      setLeft:    true,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2148
      setTop:     true,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2149
      setWidth:   true,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2150
      setHeight:  true,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2151
      offsetTop:  0,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2152
      offsetLeft: 0
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2153
    }, arguments[2] || {})
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2154
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2155
    // find page position of source
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2156
    source = $(source);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2157
    var p = Position.page(source);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2158
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2159
    // find coordinate system to use
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2160
    target = $(target);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2161
    var delta = [0, 0];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2162
    var parent = null;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2163
    // delta [0,0] will do fine with position: fixed elements,
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2164
    // position:absolute needs offsetParent deltas
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2165
    if (Element.getStyle(target,'position') == 'absolute') {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2166
      parent = Position.offsetParent(target);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2167
      delta = Position.page(parent);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2168
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2169
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2170
    // correct by body offsets (fixes Safari)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2171
    if (parent == document.body) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2172
      delta[0] -= document.body.offsetLeft;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2173
      delta[1] -= document.body.offsetTop;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2174
    }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2175
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2176
    // set position
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2177
    if(options.setLeft)   target.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2178
    if(options.setTop)    target.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2179
    if(options.setWidth)  target.style.width = source.offsetWidth + 'px';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2180
    if(options.setHeight) target.style.height = source.offsetHeight + 'px';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2181
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2182
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2183
  absolutize: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2184
    element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2185
    if (element.style.position == 'absolute') return;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2186
    Position.prepare();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2187
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2188
    var offsets = Position.positionedOffset(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2189
    var top     = offsets[1];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2190
    var left    = offsets[0];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2191
    var width   = element.clientWidth;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2192
    var height  = element.clientHeight;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2193
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2194
    element._originalLeft   = left - parseFloat(element.style.left  || 0);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2195
    element._originalTop    = top  - parseFloat(element.style.top || 0);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2196
    element._originalWidth  = element.style.width;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2197
    element._originalHeight = element.style.height;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2198
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2199
    element.style.position = 'absolute';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2200
    element.style.top    = top + 'px';;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2201
    element.style.left   = left + 'px';;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2202
    element.style.width  = width + 'px';;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2203
    element.style.height = height + 'px';;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2204
  },
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2205
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2206
  relativize: function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2207
    element = $(element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2208
    if (element.style.position == 'relative') return;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2209
    Position.prepare();
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2210
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2211
    element.style.position = 'relative';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2212
    var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2213
    var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2214
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2215
    element.style.top    = top + 'px';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2216
    element.style.left   = left + 'px';
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2217
    element.style.height = element._originalHeight;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2218
    element.style.width  = element._originalWidth;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2219
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2220
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2221
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2222
// Safari returns margins on body which is incorrect if the child is absolutely
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2223
// positioned.  For performance reasons, redefine Position.cumulativeOffset for
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2224
// KHTML/WebKit only.
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2225
if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2226
  Position.cumulativeOffset = function(element) {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2227
    var valueT = 0, valueL = 0;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2228
    do {
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2229
      valueT += element.offsetTop  || 0;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2230
      valueL += element.offsetLeft || 0;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2231
      if (element.offsetParent == document.body)
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2232
        if (Element.getStyle(element, 'position') == 'absolute') break;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2233
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2234
      element = element.offsetParent;
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2235
    } while (element);
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2236
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2237
    return [valueL, valueT];
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2238
  }
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2239
}
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2240
7a5d38af0e65 add privtae docs to site
ymh@caf4f556-3d62-0410-8435-a86758001935
parents:
diff changeset
  2241
Element.addMethods();