]> err.no Git - sope/blob - sope-appserver/WEPrototype/WEPrototypeScript.jsm
fixed (all?) gcc 4.0 warnings
[sope] / sope-appserver / WEPrototype / WEPrototypeScript.jsm
1 /* automatically generated from prototype/prototype.js, do not edit ! */
2 @"/*  Prototype JavaScript framework, version 1.3.1\n"
3 @" *  (c) 2005 Sam Stephenson <sam@conio.net>\n"
4 @" *\n"
5 @" *  THIS FILE IS AUTOMATICALLY GENERATED. When sending patches, please diff\n"
6 @" *  against the source tree, available from the Prototype darcs repository. \n"
7 @" *\n"
8 @" *  Prototype is freely distributable under the terms of an MIT-style license.\n"
9 @" *\n"
10 @" *  For details, see the Prototype web site: http://prototype.conio.net/\n"
11 @" *\n"
12 @"/*--------------------------------------------------------------------------*/\n"
13 @"var Prototype = {\n"
14 @"  Version: '1.3.1',\n"
15 @"  emptyFunction: function() {}\n"
16 @"}\n"
17 @"var Class = {\n"
18 @"  create: function() {\n"
19 @"    return function() { \n"
20 @"      this.initialize.apply(this, arguments);\n"
21 @"    }\n"
22 @"  }\n"
23 @"}\n"
24 @"var Abstract = new Object();\n"
25 @"Object.extend = function(destination, source) {\n"
26 @"  for (property in source) {\n"
27 @"    destination[property] = source[property];\n"
28 @"  }\n"
29 @"  return destination;\n"
30 @"}\n"
31 @"Object.prototype.extend = function(object) {\n"
32 @"  return Object.extend.apply(this, [this, object]);\n"
33 @"}\n"
34 @"Function.prototype.bind = function(object) {\n"
35 @"  var __method = this;\n"
36 @"  return function() {\n"
37 @"    __method.apply(object, arguments);\n"
38 @"  }\n"
39 @"}\n"
40 @"Function.prototype.bindAsEventListener = function(object) {\n"
41 @"  var __method = this;\n"
42 @"  return function(event) {\n"
43 @"    __method.call(object, event || window.event);\n"
44 @"  }\n"
45 @"}\n"
46 @"Number.prototype.toColorPart = function() {\n"
47 @"  var digits = this.toString(16);\n"
48 @"  if (this < 16) return '0' + digits;\n"
49 @"  return digits;\n"
50 @"}\n"
51 @"var Try = {\n"
52 @"  these: function() {\n"
53 @"    var returnValue;\n"
54 @"    for (var i = 0; i < arguments.length; i++) {\n"
55 @"      var lambda = arguments[i];\n"
56 @"      try {\n"
57 @"        returnValue = lambda();\n"
58 @"        break;\n"
59 @"      } catch (e) {}\n"
60 @"    }\n"
61 @"    return returnValue;\n"
62 @"  }\n"
63 @"}\n"
64 @"/*--------------------------------------------------------------------------*/\n"
65 @"var PeriodicalExecuter = Class.create();\n"
66 @"PeriodicalExecuter.prototype = {\n"
67 @"  initialize: function(callback, frequency) {\n"
68 @"    this.callback = callback;\n"
69 @"    this.frequency = frequency;\n"
70 @"    this.currentlyExecuting = false;\n"
71 @"    this.registerCallback();\n"
72 @"  },\n"
73 @"  registerCallback: function() {\n"
74 @"    setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);\n"
75 @"  },\n"
76 @"  onTimerEvent: function() {\n"
77 @"    if (!this.currentlyExecuting) {\n"
78 @"      try { \n"
79 @"        this.currentlyExecuting = true;\n"
80 @"        this.callback(); \n"
81 @"      } finally { \n"
82 @"        this.currentlyExecuting = false;\n"
83 @"      }\n"
84 @"    }\n"
85 @"  }\n"
86 @"}\n"
87 @"/*--------------------------------------------------------------------------*/\n"
88 @"function $() {\n"
89 @"  var elements = new Array();\n"
90 @"  for (var i = 0; i < arguments.length; i++) {\n"
91 @"    var element = arguments[i];\n"
92 @"    if (typeof element == 'string')\n"
93 @"      element = document.getElementById(element);\n"
94 @"    if (arguments.length == 1) \n"
95 @"      return element;\n"
96 @"    elements.push(element);\n"
97 @"  }\n"
98 @"  return elements;\n"
99 @"}\n"
100 @"if (!Array.prototype.push) {\n"
101 @"  Array.prototype.push = function() {\n"
102 @"              var startLength = this.length;\n"
103 @"              for (var i = 0; i < arguments.length; i++)\n"
104 @"      this[startLength + i] = arguments[i];\n"
105 @"        return this.length;\n"
106 @"  }\n"
107 @"}\n"
108 @"if (!Function.prototype.apply) {\n"
109 @"  // Based on code from http://www.youngpup.net/\n"
110 @"  Function.prototype.apply = function(object, parameters) {\n"
111 @"    var parameterStrings = new Array();\n"
112 @"    if (!object)     object = window;\n"
113 @"    if (!parameters) parameters = new Array();\n"
114 @"    \n"
115 @"    for (var i = 0; i < parameters.length; i++)\n"
116 @"      parameterStrings[i] = 'parameters[' + i + ']';\n"
117 @"    \n"
118 @"    object.__apply__ = this;\n"
119 @"    var result = eval('object.__apply__(' + \n"
120 @"      parameterStrings[i].join(', ') + ')');\n"
121 @"    object.__apply__ = null;\n"
122 @"    \n"
123 @"    return result;\n"
124 @"  }\n"
125 @"}\n"
126 @"String.prototype.extend({\n"
127 @"  stripTags: function() {\n"
128 @"    return this.replace(/<\\/?[^>]+>/gi, '');\n"
129 @"  },\n"
130 @"  escapeHTML: function() {\n"
131 @"    var div = document.createElement('div');\n"
132 @"    var text = document.createTextNode(this);\n"
133 @"    div.appendChild(text);\n"
134 @"    return div.innerHTML;\n"
135 @"  },\n"
136 @"  unescapeHTML: function() {\n"
137 @"    var div = document.createElement('div');\n"
138 @"    div.innerHTML = this.stripTags();\n"
139 @"    return div.childNodes[0].nodeValue;\n"
140 @"  }\n"
141 @"});\n"
142 @"var Ajax = {\n"
143 @"  getTransport: function() {\n"
144 @"    return Try.these(\n"
145 @"      function() {return new ActiveXObject('Msxml2.XMLHTTP')},\n"
146 @"      function() {return new ActiveXObject('Microsoft.XMLHTTP')},\n"
147 @"      function() {return new XMLHttpRequest()}\n"
148 @"    ) || false;\n"
149 @"  }\n"
150 @"}\n"
151 @"Ajax.Base = function() {};\n"
152 @"Ajax.Base.prototype = {\n"
153 @"  setOptions: function(options) {\n"
154 @"    this.options = {\n"
155 @"      method:       'post',\n"
156 @"      asynchronous: true,\n"
157 @"      parameters:   ''\n"
158 @"    }.extend(options || {});\n"
159 @"  },\n"
160 @"  responseIsSuccess: function() {\n"
161 @"    return this.transport.status == undefined\n"
162 @"        || this.transport.status == 0 \n"
163 @"        || (this.transport.status >= 200 && this.transport.status < 300);\n"
164 @"  },\n"
165 @"  responseIsFailure: function() {\n"
166 @"    return !this.responseIsSuccess();\n"
167 @"  }\n"
168 @"}\n"
169 @"Ajax.Request = Class.create();\n"
170 @"Ajax.Request.Events = \n"
171 @"  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];\n"
172 @"Ajax.Request.prototype = (new Ajax.Base()).extend({\n"
173 @"  initialize: function(url, options) {\n"
174 @"    this.transport = Ajax.getTransport();\n"
175 @"    this.setOptions(options);\n"
176 @"    this.request(url);\n"
177 @"  },\n"
178 @"  request: function(url) {\n"
179 @"    var parameters = this.options.parameters || '';\n"
180 @"    if (parameters.length > 0) parameters += '&_=';\n"
181 @"    try {\n"
182 @"      if (this.options.method == 'get')\n"
183 @"        url += '?' + parameters;\n"
184 @"      this.transport.open(this.options.method, url,\n"
185 @"        this.options.asynchronous);\n"
186 @"      if (this.options.asynchronous) {\n"
187 @"        this.transport.onreadystatechange = this.onStateChange.bind(this);\n"
188 @"        setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10);\n"
189 @"      }\n"
190 @"      this.setRequestHeaders();\n"
191 @"      var body = this.options.postBody ? this.options.postBody : parameters;\n"
192 @"      this.transport.send(this.options.method == 'post' ? body : null);\n"
193 @"    } catch (e) {\n"
194 @"    }\n"
195 @"  },\n"
196 @"  setRequestHeaders: function() {\n"
197 @"    var requestHeaders = \n"
198 @"      ['X-Requested-With', 'XMLHttpRequest',\n"
199 @"       'X-Prototype-Version', Prototype.Version];\n"
200 @"    if (this.options.method == 'post') {\n"
201 @"      requestHeaders.push('Content-type', \n"
202 @"        'application/x-www-form-urlencoded');\n"
203 @"      /* Force \"Connection: close\" for Mozilla browsers to work around\n"
204 @"       * a bug where XMLHttpReqeuest sends an incorrect Content-length\n"
205 @"       * header. See Mozilla Bugzilla #246651. \n"
206 @"       */\n"
207 @"      if (this.transport.overrideMimeType)\n"
208 @"        requestHeaders.push('Connection', 'close');\n"
209 @"    }\n"
210 @"    if (this.options.requestHeaders)\n"
211 @"      requestHeaders.push.apply(requestHeaders, this.options.requestHeaders);\n"
212 @"    for (var i = 0; i < requestHeaders.length; i += 2)\n"
213 @"      this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]);\n"
214 @"  },\n"
215 @"  onStateChange: function() {\n"
216 @"    var readyState = this.transport.readyState;\n"
217 @"    if (readyState != 1)\n"
218 @"      this.respondToReadyState(this.transport.readyState);\n"
219 @"  },\n"
220 @"  respondToReadyState: function(readyState) {\n"
221 @"    var event = Ajax.Request.Events[readyState];\n"
222 @"    if (event == 'Complete')\n"
223 @"      (this.options['on' + this.transport.status]\n"
224 @"       || this.options['on' + this.responseIsSuccess() ? 'Success' : 'Failure']\n"
225 @"       || Prototype.emptyFunction)(this.transport);\n"
226 @"    (this.options['on' + event] || Prototype.emptyFunction)(this.transport);\n"
227 @"    /* Avoid memory leak in MSIE: clean up the oncomplete event handler */\n"
228 @"    if (event == 'Complete')\n"
229 @"      this.transport.onreadystatechange = Prototype.emptyFunction;\n"
230 @"  }\n"
231 @"});\n"
232 @"Ajax.Updater = Class.create();\n"
233 @"Ajax.Updater.ScriptFragment = '(?:<script.*?>)((\\n|.)*?)(?:<\\/script>)';\n"
234 @"Ajax.Updater.prototype.extend(Ajax.Request.prototype).extend({\n"
235 @"  initialize: function(container, url, options) {\n"
236 @"    this.containers = {\n"
237 @"      success: container.success ? $(container.success) : $(container),\n"
238 @"      failure: container.failure ? $(container.failure) :\n"
239 @"        (container.success ? null : $(container))\n"
240 @"    }\n"
241 @"    this.transport = Ajax.getTransport();\n"
242 @"    this.setOptions(options);\n"
243 @"    var onComplete = this.options.onComplete || Prototype.emptyFunction;\n"
244 @"    this.options.onComplete = (function() {\n"
245 @"      this.updateContent();\n"
246 @"      onComplete(this.transport);\n"
247 @"    }).bind(this);\n"
248 @"    this.request(url);\n"
249 @"  },\n"
250 @"  updateContent: function() {\n"
251 @"    var receiver = this.responseIsSuccess() ?\n"
252 @"      this.containers.success : this.containers.failure;\n"
253 @"    var match    = new RegExp(Ajax.Updater.ScriptFragment, 'img');\n"
254 @"    var response = this.transport.responseText.replace(match, '');\n"
255 @"    var scripts  = this.transport.responseText.match(match);\n"
256 @"    if (receiver) {\n"
257 @"      if (this.options.insertion) {\n"
258 @"        new this.options.insertion(receiver, response);\n"
259 @"      } else {\n"
260 @"        receiver.innerHTML = response;\n"
261 @"      }\n"
262 @"    }\n"
263 @"    if (this.responseIsSuccess()) {\n"
264 @"      if (this.onComplete)\n"
265 @"        setTimeout((function() {this.onComplete(\n"
266 @"          this.transport)}).bind(this), 10);\n"
267 @"    }\n"
268 @"    if (this.options.evalScripts && scripts) {\n"
269 @"      match = new RegExp(Ajax.Updater.ScriptFragment, 'im');\n"
270 @"      setTimeout((function() {\n"
271 @"        for (var i = 0; i < scripts.length; i++)\n"
272 @"          eval(scripts[i].match(match)[1]);\n"
273 @"      }).bind(this), 10);\n"
274 @"    }\n"
275 @"  }\n"
276 @"});\n"
277 @"Ajax.PeriodicalUpdater = Class.create();\n"
278 @"Ajax.PeriodicalUpdater.prototype = (new Ajax.Base()).extend({\n"
279 @"  initialize: function(container, url, options) {\n"
280 @"    this.setOptions(options);\n"
281 @"    this.onComplete = this.options.onComplete;\n"
282 @"    this.frequency = (this.options.frequency || 2);\n"
283 @"    this.decay = 1;\n"
284 @"    this.updater = {};\n"
285 @"    this.container = container;\n"
286 @"    this.url = url;\n"
287 @"    this.start();\n"
288 @"  },\n"
289 @"  start: function() {\n"
290 @"    this.options.onComplete = this.updateComplete.bind(this);\n"
291 @"    this.onTimerEvent();\n"
292 @"  },\n"
293 @"  stop: function() {\n"
294 @"    this.updater.onComplete = undefined;\n"
295 @"    clearTimeout(this.timer);\n"
296 @"    (this.onComplete || Ajax.emptyFunction).apply(this, arguments);\n"
297 @"  },\n"
298 @"  updateComplete: function(request) {\n"
299 @"    if (this.options.decay) {\n"
300 @"      this.decay = (request.responseText == this.lastText ? \n"
301 @"        this.decay * this.options.decay : 1);\n"
302 @"      this.lastText = request.responseText;\n"
303 @"    }\n"
304 @"    this.timer = setTimeout(this.onTimerEvent.bind(this), \n"
305 @"      this.decay * this.frequency * 1000);\n"
306 @"  },\n"
307 @"  onTimerEvent: function() {\n"
308 @"    this.updater = new Ajax.Updater(this.container, this.url, this.options);\n"
309 @"  }\n"
310 @"});\n"
311 @"document.getElementsByClassName = function(className) {\n"
312 @"  var children = document.getElementsByTagName('*') || document.all;\n"
313 @"  var elements = new Array();\n"
314 @"  \n"
315 @"  for (var i = 0; i < children.length; i++) {\n"
316 @"    var child = children[i];\n"
317 @"    var classNames = child.className.split(' ');\n"
318 @"    for (var j = 0; j < classNames.length; j++) {\n"
319 @"      if (classNames[j] == className) {\n"
320 @"        elements.push(child);\n"
321 @"        break;\n"
322 @"      }\n"
323 @"    }\n"
324 @"  }\n"
325 @"  \n"
326 @"  return elements;\n"
327 @"}\n"
328 @"/*--------------------------------------------------------------------------*/\n"
329 @"if (!window.Element) {\n"
330 @"  var Element = new Object();\n"
331 @"}\n"
332 @"Object.extend(Element, {\n"
333 @"  toggle: function() {\n"
334 @"    for (var i = 0; i < arguments.length; i++) {\n"
335 @"      var element = $(arguments[i]);\n"
336 @"      element.style.display = \n"
337 @"        (element.style.display == 'none' ? '' : 'none');\n"
338 @"    }\n"
339 @"  },\n"
340 @"  hide: function() {\n"
341 @"    for (var i = 0; i < arguments.length; i++) {\n"
342 @"      var element = $(arguments[i]);\n"
343 @"      element.style.display = 'none';\n"
344 @"    }\n"
345 @"  },\n"
346 @"  show: function() {\n"
347 @"    for (var i = 0; i < arguments.length; i++) {\n"
348 @"      var element = $(arguments[i]);\n"
349 @"      element.style.display = '';\n"
350 @"    }\n"
351 @"  },\n"
352 @"  remove: function(element) {\n"
353 @"    element = $(element);\n"
354 @"    element.parentNode.removeChild(element);\n"
355 @"  },\n"
356 @"   \n"
357 @"  getHeight: function(element) {\n"
358 @"    element = $(element);\n"
359 @"    return element.offsetHeight; \n"
360 @"  },\n"
361 @"  hasClassName: function(element, className) {\n"
362 @"    element = $(element);\n"
363 @"    if (!element)\n"
364 @"      return;\n"
365 @"    var a = element.className.split(' ');\n"
366 @"    for (var i = 0; i < a.length; i++) {\n"
367 @"      if (a[i] == className)\n"
368 @"        return true;\n"
369 @"    }\n"
370 @"    return false;\n"
371 @"  },\n"
372 @"  addClassName: function(element, className) {\n"
373 @"    element = $(element);\n"
374 @"    Element.removeClassName(element, className);\n"
375 @"    element.className += ' ' + className;\n"
376 @"  },\n"
377 @"  removeClassName: function(element, className) {\n"
378 @"    element = $(element);\n"
379 @"    if (!element)\n"
380 @"      return;\n"
381 @"    var newClassName = '';\n"
382 @"    var a = element.className.split(' ');\n"
383 @"    for (var i = 0; i < a.length; i++) {\n"
384 @"      if (a[i] != className) {\n"
385 @"        if (i > 0)\n"
386 @"          newClassName += ' ';\n"
387 @"        newClassName += a[i];\n"
388 @"      }\n"
389 @"    }\n"
390 @"    element.className = newClassName;\n"
391 @"  },\n"
392 @"  \n"
393 @"  // removes whitespace-only text node children\n"
394 @"  cleanWhitespace: function(element) {\n"
395 @"    var element = $(element);\n"
396 @"    for (var i = 0; i < element.childNodes.length; i++) {\n"
397 @"      var node = element.childNodes[i];\n"
398 @"      if (node.nodeType == 3 && !/\\S/.test(node.nodeValue)) \n"
399 @"        Element.remove(node);\n"
400 @"    }\n"
401 @"  }\n"
402 @"});\n"
403 @"var Toggle = new Object();\n"
404 @"Toggle.display = Element.toggle;\n"
405 @"/*--------------------------------------------------------------------------*/\n"
406 @"Abstract.Insertion = function(adjacency) {\n"
407 @"  this.adjacency = adjacency;\n"
408 @"}\n"
409 @"Abstract.Insertion.prototype = {\n"
410 @"  initialize: function(element, content) {\n"
411 @"    this.element = $(element);\n"
412 @"    this.content = content;\n"
413 @"    \n"
414 @"    if (this.adjacency && this.element.insertAdjacentHTML) {\n"
415 @"      this.element.insertAdjacentHTML(this.adjacency, this.content);\n"
416 @"    } else {\n"
417 @"      this.range = this.element.ownerDocument.createRange();\n"
418 @"      if (this.initializeRange) this.initializeRange();\n"
419 @"      this.fragment = this.range.createContextualFragment(this.content);\n"
420 @"      this.insertContent();\n"
421 @"    }\n"
422 @"  }\n"
423 @"}\n"
424 @"var Insertion = new Object();\n"
425 @"Insertion.Before = Class.create();\n"
426 @"Insertion.Before.prototype = (new Abstract.Insertion('beforeBegin')).extend({\n"
427 @"  initializeRange: function() {\n"
428 @"    this.range.setStartBefore(this.element);\n"
429 @"  },\n"
430 @"  \n"
431 @"  insertContent: function() {\n"
432 @"    this.element.parentNode.insertBefore(this.fragment, this.element);\n"
433 @"  }\n"
434 @"});\n"
435 @"Insertion.Top = Class.create();\n"
436 @"Insertion.Top.prototype = (new Abstract.Insertion('afterBegin')).extend({\n"
437 @"  initializeRange: function() {\n"
438 @"    this.range.selectNodeContents(this.element);\n"
439 @"    this.range.collapse(true);\n"
440 @"  },\n"
441 @"  \n"
442 @"  insertContent: function() {  \n"
443 @"    this.element.insertBefore(this.fragment, this.element.firstChild);\n"
444 @"  }\n"
445 @"});\n"
446 @"Insertion.Bottom = Class.create();\n"
447 @"Insertion.Bottom.prototype = (new Abstract.Insertion('beforeEnd')).extend({\n"
448 @"  initializeRange: function() {\n"
449 @"    this.range.selectNodeContents(this.element);\n"
450 @"    this.range.collapse(this.element);\n"
451 @"  },\n"
452 @"  \n"
453 @"  insertContent: function() {\n"
454 @"    this.element.appendChild(this.fragment);\n"
455 @"  }\n"
456 @"});\n"
457 @"Insertion.After = Class.create();\n"
458 @"Insertion.After.prototype = (new Abstract.Insertion('afterEnd')).extend({\n"
459 @"  initializeRange: function() {\n"
460 @"    this.range.setStartAfter(this.element);\n"
461 @"  },\n"
462 @"  \n"
463 @"  insertContent: function() {\n"
464 @"    this.element.parentNode.insertBefore(this.fragment, \n"
465 @"      this.element.nextSibling);\n"
466 @"  }\n"
467 @"});\n"
468 @"var Field = {\n"
469 @"  clear: function() {\n"
470 @"    for (var i = 0; i < arguments.length; i++)\n"
471 @"      $(arguments[i]).value = '';\n"
472 @"  },\n"
473 @"  focus: function(element) {\n"
474 @"    $(element).focus();\n"
475 @"  },\n"
476 @"  \n"
477 @"  present: function() {\n"
478 @"    for (var i = 0; i < arguments.length; i++)\n"
479 @"      if ($(arguments[i]).value == '') return false;\n"
480 @"    return true;\n"
481 @"  },\n"
482 @"  \n"
483 @"  select: function(element) {\n"
484 @"    $(element).select();\n"
485 @"  },\n"
486 @"   \n"
487 @"  activate: function(element) {\n"
488 @"    $(element).focus();\n"
489 @"    $(element).select();\n"
490 @"  }\n"
491 @"}\n"
492 @"/*--------------------------------------------------------------------------*/\n"
493 @"var Form = {\n"
494 @"  serialize: function(form) {\n"
495 @"    var elements = Form.getElements($(form));\n"
496 @"    var queryComponents = new Array();\n"
497 @"    \n"
498 @"    for (var i = 0; i < elements.length; i++) {\n"
499 @"      var queryComponent = Form.Element.serialize(elements[i]);\n"
500 @"      if (queryComponent)\n"
501 @"        queryComponents.push(queryComponent);\n"
502 @"    }\n"
503 @"    \n"
504 @"    return queryComponents.join('&');\n"
505 @"  },\n"
506 @"  \n"
507 @"  getElements: function(form) {\n"
508 @"    var form = $(form);\n"
509 @"    var elements = new Array();\n"
510 @"    for (tagName in Form.Element.Serializers) {\n"
511 @"      var tagElements = form.getElementsByTagName(tagName);\n"
512 @"      for (var j = 0; j < tagElements.length; j++)\n"
513 @"        elements.push(tagElements[j]);\n"
514 @"    }\n"
515 @"    return elements;\n"
516 @"  },\n"
517 @"  \n"
518 @"  getInputs: function(form, typeName, name) {\n"
519 @"    var form = $(form);\n"
520 @"    var inputs = form.getElementsByTagName('input');\n"
521 @"    \n"
522 @"    if (!typeName && !name)\n"
523 @"      return inputs;\n"
524 @"      \n"
525 @"    var matchingInputs = new Array();\n"
526 @"    for (var i = 0; i < inputs.length; i++) {\n"
527 @"      var input = inputs[i];\n"
528 @"      if ((typeName && input.type != typeName) ||\n"
529 @"          (name && input.name != name)) \n"
530 @"        continue;\n"
531 @"      matchingInputs.push(input);\n"
532 @"    }\n"
533 @"    return matchingInputs;\n"
534 @"  },\n"
535 @"  disable: function(form) {\n"
536 @"    var elements = Form.getElements(form);\n"
537 @"    for (var i = 0; i < elements.length; i++) {\n"
538 @"      var element = elements[i];\n"
539 @"      element.blur();\n"
540 @"      element.disabled = 'true';\n"
541 @"    }\n"
542 @"  },\n"
543 @"  enable: function(form) {\n"
544 @"    var elements = Form.getElements(form);\n"
545 @"    for (var i = 0; i < elements.length; i++) {\n"
546 @"      var element = elements[i];\n"
547 @"      element.disabled = '';\n"
548 @"    }\n"
549 @"  },\n"
550 @"  focusFirstElement: function(form) {\n"
551 @"    var form = $(form);\n"
552 @"    var elements = Form.getElements(form);\n"
553 @"    for (var i = 0; i < elements.length; i++) {\n"
554 @"      var element = elements[i];\n"
555 @"      if (element.type != 'hidden' && !element.disabled) {\n"
556 @"        Field.activate(element);\n"
557 @"        break;\n"
558 @"      }\n"
559 @"    }\n"
560 @"  },\n"
561 @"  reset: function(form) {\n"
562 @"    $(form).reset();\n"
563 @"  }\n"
564 @"}\n"
565 @"Form.Element = {\n"
566 @"  serialize: function(element) {\n"
567 @"    var element = $(element);\n"
568 @"    var method = element.tagName.toLowerCase();\n"
569 @"    var parameter = Form.Element.Serializers[method](element);\n"
570 @"    \n"
571 @"    if (parameter)\n"
572 @"      return encodeURIComponent(parameter[0]) + '=' + \n"
573 @"        encodeURIComponent(parameter[1]);                   \n"
574 @"  },\n"
575 @"  \n"
576 @"  getValue: function(element) {\n"
577 @"    var element = $(element);\n"
578 @"    var method = element.tagName.toLowerCase();\n"
579 @"    var parameter = Form.Element.Serializers[method](element);\n"
580 @"    \n"
581 @"    if (parameter) \n"
582 @"      return parameter[1];\n"
583 @"  }\n"
584 @"}\n"
585 @"Form.Element.Serializers = {\n"
586 @"  input: function(element) {\n"
587 @"    switch (element.type.toLowerCase()) {\n"
588 @"      case 'submit':\n"
589 @"      case 'hidden':\n"
590 @"      case 'password':\n"
591 @"      case 'text':\n"
592 @"        return Form.Element.Serializers.textarea(element);\n"
593 @"      case 'checkbox':  \n"
594 @"      case 'radio':\n"
595 @"        return Form.Element.Serializers.inputSelector(element);\n"
596 @"    }\n"
597 @"    return false;\n"
598 @"  },\n"
599 @"  inputSelector: function(element) {\n"
600 @"    if (element.checked)\n"
601 @"      return [element.name, element.value];\n"
602 @"  },\n"
603 @"  textarea: function(element) {\n"
604 @"    return [element.name, element.value];\n"
605 @"  },\n"
606 @"  select: function(element) {\n"
607 @"    var value = '';\n"
608 @"    if (element.type == 'select-one') {\n"
609 @"      var index = element.selectedIndex;\n"
610 @"      if (index >= 0)\n"
611 @"        value = element.options[index].value || element.options[index].text;\n"
612 @"    } else {\n"
613 @"      value = new Array();\n"
614 @"      for (var i = 0; i < element.length; i++) {\n"
615 @"        var opt = element.options[i];\n"
616 @"        if (opt.selected)\n"
617 @"          value.push(opt.value || opt.text);\n"
618 @"      }\n"
619 @"    }\n"
620 @"    return [element.name, value];\n"
621 @"  }\n"
622 @"}\n"
623 @"/*--------------------------------------------------------------------------*/\n"
624 @"var $F = Form.Element.getValue;\n"
625 @"/*--------------------------------------------------------------------------*/\n"
626 @"Abstract.TimedObserver = function() {}\n"
627 @"Abstract.TimedObserver.prototype = {\n"
628 @"  initialize: function(element, frequency, callback) {\n"
629 @"    this.frequency = frequency;\n"
630 @"    this.element   = $(element);\n"
631 @"    this.callback  = callback;\n"
632 @"    \n"
633 @"    this.lastValue = this.getValue();\n"
634 @"    this.registerCallback();\n"
635 @"  },\n"
636 @"  \n"
637 @"  registerCallback: function() {\n"
638 @"    setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);\n"
639 @"  },\n"
640 @"  \n"
641 @"  onTimerEvent: function() {\n"
642 @"    var value = this.getValue();\n"
643 @"    if (this.lastValue != value) {\n"
644 @"      this.callback(this.element, value);\n"
645 @"      this.lastValue = value;\n"
646 @"    }\n"
647 @"  }\n"
648 @"}\n"
649 @"Form.Element.Observer = Class.create();\n"
650 @"Form.Element.Observer.prototype = (new Abstract.TimedObserver()).extend({\n"
651 @"  getValue: function() {\n"
652 @"    return Form.Element.getValue(this.element);\n"
653 @"  }\n"
654 @"});\n"
655 @"Form.Observer = Class.create();\n"
656 @"Form.Observer.prototype = (new Abstract.TimedObserver()).extend({\n"
657 @"  getValue: function() {\n"
658 @"    return Form.serialize(this.element);\n"
659 @"  }\n"
660 @"});\n"
661 @"/*--------------------------------------------------------------------------*/\n"
662 @"Abstract.EventObserver = function() {}\n"
663 @"Abstract.EventObserver.prototype = {\n"
664 @"  initialize: function(element, callback) {\n"
665 @"    this.element  = $(element);\n"
666 @"    this.callback = callback;\n"
667 @"    \n"
668 @"    this.lastValue = this.getValue();\n"
669 @"    if (this.element.tagName.toLowerCase() == 'form')\n"
670 @"      this.registerFormCallbacks();\n"
671 @"    else\n"
672 @"      this.registerCallback(this.element);\n"
673 @"  },\n"
674 @"  \n"
675 @"  onElementEvent: function() {\n"
676 @"    var value = this.getValue();\n"
677 @"    if (this.lastValue != value) {\n"
678 @"      this.callback(this.element, value);\n"
679 @"      this.lastValue = value;\n"
680 @"    }\n"
681 @"  },\n"
682 @"  \n"
683 @"  registerFormCallbacks: function() {\n"
684 @"    var elements = Form.getElements(this.element);\n"
685 @"    for (var i = 0; i < elements.length; i++)\n"
686 @"      this.registerCallback(elements[i]);\n"
687 @"  },\n"
688 @"  \n"
689 @"  registerCallback: function(element) {\n"
690 @"    if (element.type) {\n"
691 @"      switch (element.type.toLowerCase()) {\n"
692 @"        case 'checkbox':  \n"
693 @"        case 'radio':\n"
694 @"          element.target = this;\n"
695 @"          element.prev_onclick = element.onclick || Prototype.emptyFunction;\n"
696 @"          element.onclick = function() {\n"
697 @"            this.prev_onclick(); \n"
698 @"            this.target.onElementEvent();\n"
699 @"          }\n"
700 @"          break;\n"
701 @"        case 'password':\n"
702 @"        case 'text':\n"
703 @"        case 'textarea':\n"
704 @"        case 'select-one':\n"
705 @"        case 'select-multiple':\n"
706 @"          element.target = this;\n"
707 @"          element.prev_onchange = element.onchange || Prototype.emptyFunction;\n"
708 @"          element.onchange = function() {\n"
709 @"            this.prev_onchange(); \n"
710 @"            this.target.onElementEvent();\n"
711 @"          }\n"
712 @"          break;\n"
713 @"      }\n"
714 @"    }    \n"
715 @"  }\n"
716 @"}\n"
717 @"Form.Element.EventObserver = Class.create();\n"
718 @"Form.Element.EventObserver.prototype = (new Abstract.EventObserver()).extend({\n"
719 @"  getValue: function() {\n"
720 @"    return Form.Element.getValue(this.element);\n"
721 @"  }\n"
722 @"});\n"
723 @"Form.EventObserver = Class.create();\n"
724 @"Form.EventObserver.prototype = (new Abstract.EventObserver()).extend({\n"
725 @"  getValue: function() {\n"
726 @"    return Form.serialize(this.element);\n"
727 @"  }\n"
728 @"});\n"
729 @"if (!window.Event) {\n"
730 @"  var Event = new Object();\n"
731 @"}\n"
732 @"Object.extend(Event, {\n"
733 @"  KEY_BACKSPACE: 8,\n"
734 @"  KEY_TAB:       9,\n"
735 @"  KEY_RETURN:   13,\n"
736 @"  KEY_ESC:      27,\n"
737 @"  KEY_LEFT:     37,\n"
738 @"  KEY_UP:       38,\n"
739 @"  KEY_RIGHT:    39,\n"
740 @"  KEY_DOWN:     40,\n"
741 @"  KEY_DELETE:   46,\n"
742 @"  element: function(event) {\n"
743 @"    return event.target || event.srcElement;\n"
744 @"  },\n"
745 @"  isLeftClick: function(event) {\n"
746 @"    return (((event.which) && (event.which == 1)) ||\n"
747 @"            ((event.button) && (event.button == 1)));\n"
748 @"  },\n"
749 @"  pointerX: function(event) {\n"
750 @"    return event.pageX || (event.clientX + \n"
751 @"      (document.documentElement.scrollLeft || document.body.scrollLeft));\n"
752 @"  },\n"
753 @"  pointerY: function(event) {\n"
754 @"    return event.pageY || (event.clientY + \n"
755 @"      (document.documentElement.scrollTop || document.body.scrollTop));\n"
756 @"  },\n"
757 @"  stop: function(event) {\n"
758 @"    if (event.preventDefault) { \n"
759 @"      event.preventDefault(); \n"
760 @"      event.stopPropagation(); \n"
761 @"    } else {\n"
762 @"      event.returnValue = false;\n"
763 @"    }\n"
764 @"  },\n"
765 @"  // find the first node with the given tagName, starting from the\n"
766 @"  // node the event was triggered on; traverses the DOM upwards\n"
767 @"  findElement: function(event, tagName) {\n"
768 @"    var element = Event.element(event);\n"
769 @"    while (element.parentNode && (!element.tagName ||\n"
770 @"        (element.tagName.toUpperCase() != tagName.toUpperCase())))\n"
771 @"      element = element.parentNode;\n"
772 @"    return element;\n"
773 @"  },\n"
774 @"  observers: false,\n"
775 @"  \n"
776 @"  _observeAndCache: function(element, name, observer, useCapture) {\n"
777 @"    if (!this.observers) this.observers = [];\n"
778 @"    if (element.addEventListener) {\n"
779 @"      this.observers.push([element, name, observer, useCapture]);\n"
780 @"      element.addEventListener(name, observer, useCapture);\n"
781 @"    } else if (element.attachEvent) {\n"
782 @"      this.observers.push([element, name, observer, useCapture]);\n"
783 @"      element.attachEvent('on' + name, observer);\n"
784 @"    }\n"
785 @"  },\n"
786 @"  \n"
787 @"  unloadCache: function() {\n"
788 @"    if (!Event.observers) return;\n"
789 @"    for (var i = 0; i < Event.observers.length; i++) {\n"
790 @"      Event.stopObserving.apply(this, Event.observers[i]);\n"
791 @"      Event.observers[i][0] = null;\n"
792 @"    }\n"
793 @"    Event.observers = false;\n"
794 @"  },\n"
795 @"  observe: function(element, name, observer, useCapture) {\n"
796 @"    var element = $(element);\n"
797 @"    useCapture = useCapture || false;\n"
798 @"    \n"
799 @"    if (name == 'keypress' &&\n"
800 @"        ((navigator.appVersion.indexOf('AppleWebKit') > 0) \n"
801 @"        || element.attachEvent))\n"
802 @"      name = 'keydown';\n"
803 @"    \n"
804 @"    this._observeAndCache(element, name, observer, useCapture);\n"
805 @"  },\n"
806 @"  stopObserving: function(element, name, observer, useCapture) {\n"
807 @"    var element = $(element);\n"
808 @"    useCapture = useCapture || false;\n"
809 @"    \n"
810 @"    if (name == 'keypress' &&\n"
811 @"        ((navigator.appVersion.indexOf('AppleWebKit') > 0) \n"
812 @"        || element.detachEvent))\n"
813 @"      name = 'keydown';\n"
814 @"    \n"
815 @"    if (element.removeEventListener) {\n"
816 @"      element.removeEventListener(name, observer, useCapture);\n"
817 @"    } else if (element.detachEvent) {\n"
818 @"      element.detachEvent('on' + name, observer);\n"
819 @"    }\n"
820 @"  }\n"
821 @"});\n"
822 @"/* prevent memory leaks in IE */\n"
823 @"Event.observe(window, 'unload', Event.unloadCache, false);\n"
824 @"var Position = {\n"
825 @"  // set to true if needed, warning: firefox performance problems\n"
826 @"  // NOT neeeded for page scrolling, only if draggable contained in\n"
827 @"  // scrollable elements\n"
828 @"  includeScrollOffsets: false, \n"
829 @"  // must be called before calling withinIncludingScrolloffset, every time the\n"
830 @"  // page is scrolled\n"
831 @"  prepare: function() {\n"
832 @"    this.deltaX =  window.pageXOffset \n"
833 @"                || document.documentElement.scrollLeft \n"
834 @"                || document.body.scrollLeft \n"
835 @"                || 0;\n"
836 @"    this.deltaY =  window.pageYOffset \n"
837 @"                || document.documentElement.scrollTop \n"
838 @"                || document.body.scrollTop \n"
839 @"                || 0;\n"
840 @"  },\n"
841 @"  realOffset: function(element) {\n"
842 @"    var valueT = 0, valueL = 0;\n"
843 @"    do {\n"
844 @"      valueT += element.scrollTop  || 0;\n"
845 @"      valueL += element.scrollLeft || 0; \n"
846 @"      element = element.parentNode;\n"
847 @"    } while (element);\n"
848 @"    return [valueL, valueT];\n"
849 @"  },\n"
850 @"  cumulativeOffset: function(element) {\n"
851 @"    var valueT = 0, valueL = 0;\n"
852 @"    do {\n"
853 @"      valueT += element.offsetTop  || 0;\n"
854 @"      valueL += element.offsetLeft || 0;\n"
855 @"      element = element.offsetParent;\n"
856 @"    } while (element);\n"
857 @"    return [valueL, valueT];\n"
858 @"  },\n"
859 @"  // caches x/y coordinate pair to use with overlap\n"
860 @"  within: function(element, x, y) {\n"
861 @"    if (this.includeScrollOffsets)\n"
862 @"      return this.withinIncludingScrolloffsets(element, x, y);\n"
863 @"    this.xcomp = x;\n"
864 @"    this.ycomp = y;\n"
865 @"    this.offset = this.cumulativeOffset(element);\n"
866 @"    return (y >= this.offset[1] &&\n"
867 @"            y <  this.offset[1] + element.offsetHeight &&\n"
868 @"            x >= this.offset[0] && \n"
869 @"            x <  this.offset[0] + element.offsetWidth);\n"
870 @"  },\n"
871 @"  withinIncludingScrolloffsets: function(element, x, y) {\n"
872 @"    var offsetcache = this.realOffset(element);\n"
873 @"    this.xcomp = x + offsetcache[0] - this.deltaX;\n"
874 @"    this.ycomp = y + offsetcache[1] - this.deltaY;\n"
875 @"    this.offset = this.cumulativeOffset(element);\n"
876 @"    return (this.ycomp >= this.offset[1] &&\n"
877 @"            this.ycomp <  this.offset[1] + element.offsetHeight &&\n"
878 @"            this.xcomp >= this.offset[0] && \n"
879 @"            this.xcomp <  this.offset[0] + element.offsetWidth);\n"
880 @"  },\n"
881 @"  // within must be called directly before\n"
882 @"  overlap: function(mode, element) {  \n"
883 @"    if (!mode) return 0;  \n"
884 @"    if (mode == 'vertical') \n"
885 @"      return ((this.offset[1] + element.offsetHeight) - this.ycomp) / \n"
886 @"        element.offsetHeight;\n"
887 @"    if (mode == 'horizontal')\n"
888 @"      return ((this.offset[0] + element.offsetWidth) - this.xcomp) / \n"
889 @"        element.offsetWidth;\n"
890 @"  },\n"
891 @"  clone: function(source, target) {\n"
892 @"    source = $(source);\n"
893 @"    target = $(target);\n"
894 @"    target.style.position = 'absolute';\n"
895 @"    var offsets = this.cumulativeOffset(source);\n"
896 @"    target.style.top    = offsets[1] + 'px';\n"
897 @"    target.style.left   = offsets[0] + 'px';\n"
898 @"    target.style.width  = source.offsetWidth + 'px';\n"
899 @"    target.style.height = source.offsetHeight + 'px';\n"
900 @"  }\n"
901 @"}\n"