]> err.no Git - sope/blob - sope-appserver/WEPrototype/WEPrototypeScript.jsm
Added WEPrototype and bumped framework versions. WEPrototype hasn't been tested very...
[sope] / sope-appserver / WEPrototype / WEPrototypeScript.jsm
1 /* automatically generated from prototype/prototype.js, do not edit ! */
2 @"/*  Prototype: an object-oriented Javascript library, version 1.2.0\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.2.0'\n"
15 @"}\n"
16 @"var Class = {\n"
17 @"  create: function() {\n"
18 @"    return function() { \n"
19 @"      this.initialize.apply(this, arguments);\n"
20 @"    }\n"
21 @"  }\n"
22 @"}\n"
23 @"var Abstract = new Object();\n"
24 @"Object.prototype.extend = function(object) {\n"
25 @"  for (property in object) {\n"
26 @"    this[property] = object[property];\n"
27 @"  }\n"
28 @"  return this;\n"
29 @"}\n"
30 @"Function.prototype.bind = function(object) {\n"
31 @"  var method = this;\n"
32 @"  return function() {\n"
33 @"    method.apply(object, arguments);\n"
34 @"  }\n"
35 @"}\n"
36 @"Function.prototype.bindAsEventListener = function(object) {\n"
37 @"  var method = this;\n"
38 @"  return function(event) {\n"
39 @"    method.call(object, event || window.event);\n"
40 @"  }\n"
41 @"}\n"
42 @"Number.prototype.toColorPart = function() {\n"
43 @"  var digits = this.toString(16);\n"
44 @"  if (this < 16) return '0' + digits;\n"
45 @"  return digits;\n"
46 @"}\n"
47 @"var Try = {\n"
48 @"  these: function() {\n"
49 @"    var returnValue;\n"
50 @"    \n"
51 @"    for (var i = 0; i < arguments.length; i++) {\n"
52 @"      var lambda = arguments[i];\n"
53 @"      try {\n"
54 @"        returnValue = lambda();\n"
55 @"        break;\n"
56 @"      } catch (e) {}\n"
57 @"    }\n"
58 @"    \n"
59 @"    return returnValue;\n"
60 @"  }\n"
61 @"}\n"
62 @"/*--------------------------------------------------------------------------*/\n"
63 @"var PeriodicalExecuter = Class.create();\n"
64 @"PeriodicalExecuter.prototype = {\n"
65 @"  initialize: function(callback, frequency) {\n"
66 @"    this.callback = callback;\n"
67 @"    this.frequency = frequency;\n"
68 @"    this.currentlyExecuting = false;\n"
69 @"    \n"
70 @"    this.registerCallback();\n"
71 @"  },\n"
72 @"  \n"
73 @"  registerCallback: function() {\n"
74 @"    setTimeout(this.onTimerEvent.bind(this), this.frequency * 1000);\n"
75 @"  },\n"
76 @"  \n"
77 @"  onTimerEvent: function() {\n"
78 @"    if (!this.currentlyExecuting) {\n"
79 @"      try { \n"
80 @"        this.currentlyExecuting = true;\n"
81 @"        this.callback(); \n"
82 @"      } finally { \n"
83 @"        this.currentlyExecuting = false;\n"
84 @"      }\n"
85 @"    }\n"
86 @"    \n"
87 @"    this.registerCallback();\n"
88 @"  }\n"
89 @"}\n"
90 @"/*--------------------------------------------------------------------------*/\n"
91 @"function $() {\n"
92 @"  var elements = new Array();\n"
93 @"  \n"
94 @"  for (var i = 0; i < arguments.length; i++) {\n"
95 @"    var element = arguments[i];\n"
96 @"    if (typeof element == 'string')\n"
97 @"      element = document.getElementById(element);\n"
98 @"    if (arguments.length == 1) \n"
99 @"      return element;\n"
100 @"      \n"
101 @"    elements.push(element);\n"
102 @"  }\n"
103 @"  \n"
104 @"  return elements;\n"
105 @"}\n"
106 @"/*--------------------------------------------------------------------------*/\n"
107 @"if (!Array.prototype.push) {\n"
108 @"  Array.prototype.push = function() {\n"
109 @"              var startLength = this.length;\n"
110 @"              for (var i = 0; i < arguments.length; i++)\n"
111 @"      this[startLength + i] = arguments[i];\n"
112 @"        return this.length;\n"
113 @"  }\n"
114 @"}\n"
115 @"if (!Function.prototype.apply) {\n"
116 @"  // Based on code from http://www.youngpup.net/\n"
117 @"  Function.prototype.apply = function(object, parameters) {\n"
118 @"    var parameterStrings = new Array();\n"
119 @"    if (!object)     object = window;\n"
120 @"    if (!parameters) parameters = new Array();\n"
121 @"    \n"
122 @"    for (var i = 0; i < parameters.length; i++)\n"
123 @"      parameterStrings[i] = 'x[' + i + ']';\n"
124 @"    \n"
125 @"    object.__apply__ = this;\n"
126 @"    var result = eval('obj.__apply__(' + \n"
127 @"      parameterStrings[i].join(', ') + ')');\n"
128 @"    object.__apply__ = null;\n"
129 @"    \n"
130 @"    return result;\n"
131 @"  }\n"
132 @"}\n"
133 @"/*--------------------------------------------------------------------------*/\n"
134 @"var Ajax = {\n"
135 @"  getTransport: function() {\n"
136 @"    return Try.these(\n"
137 @"      function() {return new ActiveXObject('Msxml2.XMLHTTP')},\n"
138 @"      function() {return new ActiveXObject('Microsoft.XMLHTTP')},\n"
139 @"      function() {return new XMLHttpRequest()}\n"
140 @"    ) || false;\n"
141 @"  },\n"
142 @"  \n"
143 @"  emptyFunction: function() {}\n"
144 @"}\n"
145 @"Ajax.Base = function() {};\n"
146 @"Ajax.Base.prototype = {\n"
147 @"  setOptions: function(options) {\n"
148 @"    this.options = {\n"
149 @"      method:       'post',\n"
150 @"      asynchronous: true,\n"
151 @"      parameters:   ''\n"
152 @"    }.extend(options || {});\n"
153 @"  }\n"
154 @"}\n"
155 @"Ajax.Request = Class.create();\n"
156 @"Ajax.Request.Events = \n"
157 @"  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];\n"
158 @"Ajax.Request.prototype = (new Ajax.Base()).extend({\n"
159 @"  initialize: function(url, options) {\n"
160 @"    this.transport = Ajax.getTransport();\n"
161 @"    this.setOptions(options);\n"
162 @"  \n"
163 @"    try {\n"
164 @"      if (this.options.method == 'get')\n"
165 @"        url += '?' + this.options.parameters + '&_=';\n"
166 @"    \n"
167 @"      this.transport.open(this.options.method, url, true);\n"
168 @"      \n"
169 @"      if (this.options.asynchronous) {\n"
170 @"        this.transport.onreadystatechange = this.onStateChange.bind(this);\n"
171 @"        setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10);\n"
172 @"      }\n"
173 @"              \n"
174 @"      this.transport.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n"
175 @"      this.transport.setRequestHeader('X-Prototype-Version', Prototype.Version);\n"
176 @"      if (this.options.method == 'post') {\n"
177 @"        this.transport.setRequestHeader('Connection', 'close');\n"
178 @"        this.transport.setRequestHeader('Content-type',\n"
179 @"          'application/x-www-form-urlencoded');\n"
180 @"      }\n"
181 @"      \n"
182 @"      this.transport.send(this.options.method == 'post' ? \n"
183 @"        this.options.parameters + '&_=' : null);\n"
184 @"                      \n"
185 @"    } catch (e) {\n"
186 @"    }    \n"
187 @"  },\n"
188 @"      \n"
189 @"  onStateChange: function() {\n"
190 @"    var readyState = this.transport.readyState;\n"
191 @"    if (readyState != 1)\n"
192 @"      this.respondToReadyState(this.transport.readyState);\n"
193 @"  },\n"
194 @"  \n"
195 @"  respondToReadyState: function(readyState) {\n"
196 @"    var event = Ajax.Request.Events[readyState];\n"
197 @"    (this.options['on' + event] || Ajax.emptyFunction)(this.transport);\n"
198 @"  }\n"
199 @"});\n"
200 @"Ajax.Updater = Class.create();\n"
201 @"Ajax.Updater.prototype = (new Ajax.Base()).extend({\n"
202 @"  initialize: function(container, url, options) {\n"
203 @"    this.container = $(container);\n"
204 @"    this.setOptions(options);\n"
205 @"  \n"
206 @"    if (this.options.asynchronous) {\n"
207 @"      this.onComplete = this.options.onComplete;\n"
208 @"      this.options.onComplete = this.updateContent.bind(this);\n"
209 @"    }\n"
210 @"    \n"
211 @"    this.request = new Ajax.Request(url, this.options);\n"
212 @"    \n"
213 @"    if (!this.options.asynchronous)\n"
214 @"      this.updateContent();\n"
215 @"  },\n"
216 @"  \n"
217 @"  updateContent: function() {\n"
218 @"    if (this.options.insertion) {\n"
219 @"      new this.options.insertion(this.container,\n"
220 @"        this.request.transport.responseText);\n"
221 @"    } else {\n"
222 @"      this.container.innerHTML = this.request.transport.responseText;\n"
223 @"    }\n"
224 @"    if (this.onComplete) {\n"
225 @"      setTimeout((function() {this.onComplete(this.request)}).bind(this), 10);\n"
226 @"    }\n"
227 @"  }\n"
228 @"});\n"
229 @"/*--------------------------------------------------------------------------*/\n"
230 @"var Field = {\n"
231 @"  clear: function() {\n"
232 @"    for (var i = 0; i < arguments.length; i++)\n"
233 @"      $(arguments[i]).value = '';\n"
234 @"  },\n"
235 @"  focus: function(element) {\n"
236 @"    $(element).focus();\n"
237 @"  },\n"
238 @"  \n"
239 @"  present: function() {\n"
240 @"    for (var i = 0; i < arguments.length; i++)\n"
241 @"      if ($(arguments[i]).value == '') return false;\n"
242 @"    return true;\n"
243 @"  },\n"
244 @"  \n"
245 @"  select: function(element) {\n"
246 @"    $(element).select();\n"
247 @"  },\n"
248 @"   \n"
249 @"  activate: function(element) {\n"
250 @"    $(element).focus();\n"
251 @"    $(element).select();\n"
252 @"  }\n"
253 @"}\n"
254 @"/*--------------------------------------------------------------------------*/\n"
255 @"var Form = {\n"
256 @"  serialize: function(form) {\n"
257 @"    var elements = Form.getElements($(form));\n"
258 @"    var queryComponents = new Array();\n"
259 @"    \n"
260 @"    for (var i = 0; i < elements.length; i++) {\n"
261 @"      var queryComponent = Form.Element.serialize(elements[i]);\n"
262 @"      if (queryComponent)\n"
263 @"        queryComponents.push(queryComponent);\n"
264 @"    }\n"
265 @"    \n"
266 @"    return queryComponents.join('&');\n"
267 @"  },\n"
268 @"  \n"
269 @"  getElements: function(form) {\n"
270 @"    form = $(form);\n"
271 @"    var elements = new Array();\n"
272 @"    for (tagName in Form.Element.Serializers) {\n"
273 @"      var tagElements = form.getElementsByTagName(tagName);\n"
274 @"      for (var j = 0; j < tagElements.length; j++)\n"
275 @"        elements.push(tagElements[j]);\n"
276 @"    }\n"
277 @"    return elements;\n"
278 @"  },\n"
279 @"  \n"
280 @"  disable: function(form) {\n"
281 @"    var elements = Form.getElements(form);\n"
282 @"    for (var i = 0; i < elements.length; i++) {\n"
283 @"      var element = elements[i];\n"
284 @"      element.blur();\n"
285 @"      element.disable = 'true';\n"
286 @"    }\n"
287 @"  },\n"
288 @"  focusFirstElement: function(form) {\n"
289 @"    form = $(form);\n"
290 @"    var elements = Form.getElements(form);\n"
291 @"    for (var i = 0; i < elements.length; i++) {\n"
292 @"      var element = elements[i];\n"
293 @"      if (element.type != 'hidden' && !element.disabled) {\n"
294 @"        Field.activate(element);\n"
295 @"        break;\n"
296 @"      }\n"
297 @"    }\n"
298 @"  },\n"
299 @"  reset: function(form) {\n"
300 @"    $(form).reset();\n"
301 @"  }\n"
302 @"}\n"
303 @"Form.Element = {\n"
304 @"  serialize: function(element) {\n"
305 @"    element = $(element);\n"
306 @"    var method = element.tagName.toLowerCase();\n"
307 @"    var parameter = Form.Element.Serializers[method](element);\n"
308 @"    \n"
309 @"    if (parameter)\n"
310 @"      return encodeURIComponent(parameter[0]) + '=' + \n"
311 @"        encodeURIComponent(parameter[1]);                   \n"
312 @"  },\n"
313 @"  \n"
314 @"  getValue: function(element) {\n"
315 @"    element = $(element);\n"
316 @"    var method = element.tagName.toLowerCase();\n"
317 @"    var parameter = Form.Element.Serializers[method](element);\n"
318 @"    \n"
319 @"    if (parameter) \n"
320 @"      return parameter[1];\n"
321 @"  }\n"
322 @"}\n"
323 @"Form.Element.Serializers = {\n"
324 @"  input: function(element) {\n"
325 @"    switch (element.type.toLowerCase()) {\n"
326 @"      case 'hidden':\n"
327 @"      case 'password':\n"
328 @"      case 'text':\n"
329 @"        return Form.Element.Serializers.textarea(element);\n"
330 @"      case 'checkbox':  \n"
331 @"      case 'radio':\n"
332 @"        return Form.Element.Serializers.inputSelector(element);\n"
333 @"    }\n"
334 @"    return false;\n"
335 @"  },\n"
336 @"  inputSelector: function(element) {\n"
337 @"    if (element.checked)\n"
338 @"      return [element.name, element.value];\n"
339 @"  },\n"
340 @"  textarea: function(element) {\n"
341 @"    return [element.name, element.value];\n"
342 @"  },\n"
343 @"  select: function(element) {\n"
344 @"    var index = element.selectedIndex;\n"
345 @"    var value = element.options[index].value || element.options[index].text;\n"
346 @"    return [element.name, (index >= 0) ? value : ''];\n"
347 @"  }\n"
348 @"}\n"
349 @"/*--------------------------------------------------------------------------*/\n"
350 @"var $F = Form.Element.getValue;\n"
351 @"/*--------------------------------------------------------------------------*/\n"
352 @"Abstract.TimedObserver = function() {}\n"
353 @"Abstract.TimedObserver.prototype = {\n"
354 @"  initialize: function(element, frequency, callback) {\n"
355 @"    this.frequency = frequency;\n"
356 @"    this.element   = $(element);\n"
357 @"    this.callback  = callback;\n"
358 @"    \n"
359 @"    this.lastValue = this.getValue();\n"
360 @"    this.registerCallback();\n"
361 @"  },\n"
362 @"  \n"
363 @"  registerCallback: function() {\n"
364 @"    setTimeout(this.onTimerEvent.bind(this), this.frequency * 1000);\n"
365 @"  },\n"
366 @"  \n"
367 @"  onTimerEvent: function() {\n"
368 @"    var value = this.getValue();\n"
369 @"    if (this.lastValue != value) {\n"
370 @"      this.callback(this.element, value);\n"
371 @"      this.lastValue = value;\n"
372 @"    }\n"
373 @"    \n"
374 @"    this.registerCallback();\n"
375 @"  }\n"
376 @"}\n"
377 @"Form.Element.Observer = Class.create();\n"
378 @"Form.Element.Observer.prototype = (new Abstract.TimedObserver()).extend({\n"
379 @"  getValue: function() {\n"
380 @"    return Form.Element.getValue(this.element);\n"
381 @"  }\n"
382 @"});\n"
383 @"Form.Observer = Class.create();\n"
384 @"Form.Observer.prototype = (new Abstract.TimedObserver()).extend({\n"
385 @"  getValue: function() {\n"
386 @"    return Form.serialize(this.element);\n"
387 @"  }\n"
388 @"});\n"
389 @"/*--------------------------------------------------------------------------*/\n"
390 @"document.getElementsByClassName = function(className) {\n"
391 @"  var children = document.getElementsByTagName('*') || document.all;\n"
392 @"  var elements = new Array();\n"
393 @"  \n"
394 @"  for (var i = 0; i < children.length; i++) {\n"
395 @"    var child = children[i];\n"
396 @"    var classNames = child.className.split(' ');\n"
397 @"    for (var j = 0; j < classNames.length; j++) {\n"
398 @"      if (classNames[j] == className) {\n"
399 @"        elements.push(child);\n"
400 @"        break;\n"
401 @"      }\n"
402 @"    }\n"
403 @"  }\n"
404 @"  \n"
405 @"  return elements;\n"
406 @"}\n"
407 @"/*--------------------------------------------------------------------------*/\n"
408 @"var Element = {\n"
409 @"  toggle: function() {\n"
410 @"    for (var i = 0; i < arguments.length; i++) {\n"
411 @"      var element = $(arguments[i]);\n"
412 @"      element.style.display = \n"
413 @"        (element.style.display == 'none' ? '' : 'none');\n"
414 @"    }\n"
415 @"  },\n"
416 @"  hide: function() {\n"
417 @"    for (var i = 0; i < arguments.length; i++) {\n"
418 @"      var element = $(arguments[i]);\n"
419 @"      element.style.display = 'none';\n"
420 @"    }\n"
421 @"  },\n"
422 @"  show: function() {\n"
423 @"    for (var i = 0; i < arguments.length; i++) {\n"
424 @"      var element = $(arguments[i]);\n"
425 @"      element.style.display = '';\n"
426 @"    }\n"
427 @"  },\n"
428 @"  remove: function(element) {\n"
429 @"    element = $(element);\n"
430 @"    element.parentNode.removeChild(element);\n"
431 @"  },\n"
432 @"   \n"
433 @"  getHeight: function(element) {\n"
434 @"    element = $(element);\n"
435 @"    return element.offsetHeight; \n"
436 @"  }\n"
437 @"}\n"
438 @"var Toggle = new Object();\n"
439 @"Toggle.display = Element.toggle;\n"
440 @"/*--------------------------------------------------------------------------*/\n"
441 @"Abstract.Insertion = function(adjacency) {\n"
442 @"  this.adjacency = adjacency;\n"
443 @"}\n"
444 @"Abstract.Insertion.prototype = {\n"
445 @"  initialize: function(element, content) {\n"
446 @"    this.element = $(element);\n"
447 @"    this.content = content;\n"
448 @"    \n"
449 @"    if (this.adjacency && this.element.insertAdjacentHTML) {\n"
450 @"      this.element.insertAdjacentHTML(this.adjacency, this.content);\n"
451 @"    } else {\n"
452 @"      this.range = this.element.ownerDocument.createRange();\n"
453 @"      if (this.initializeRange) this.initializeRange();\n"
454 @"      this.fragment = this.range.createContextualFragment(this.content);\n"
455 @"      this.insertContent();\n"
456 @"    }\n"
457 @"  }\n"
458 @"}\n"
459 @"var Insertion = new Object();\n"
460 @"Insertion.Before = Class.create();\n"
461 @"Insertion.Before.prototype = (new Abstract.Insertion('beforeBegin')).extend({\n"
462 @"  initializeRange: function() {\n"
463 @"    this.range.setStartBefore(this.element);\n"
464 @"  },\n"
465 @"  \n"
466 @"  insertContent: function() {\n"
467 @"    this.element.parentNode.insertBefore(this.fragment, this.element);\n"
468 @"  }\n"
469 @"});\n"
470 @"Insertion.Top = Class.create();\n"
471 @"Insertion.Top.prototype = (new Abstract.Insertion('afterBegin')).extend({\n"
472 @"  initializeRange: function() {\n"
473 @"    this.range.selectNodeContents(this.element);\n"
474 @"    this.range.collapse(true);\n"
475 @"  },\n"
476 @"  \n"
477 @"  insertContent: function() {  \n"
478 @"    this.element.insertBefore(this.fragment, this.element.firstChild);\n"
479 @"  }\n"
480 @"});\n"
481 @"Insertion.Bottom = Class.create();\n"
482 @"Insertion.Bottom.prototype = (new Abstract.Insertion('beforeEnd')).extend({\n"
483 @"  initializeRange: function() {\n"
484 @"    this.range.selectNodeContents(this.element);\n"
485 @"    this.range.collapse(this.element);\n"
486 @"  },\n"
487 @"  \n"
488 @"  insertContent: function() {\n"
489 @"    this.element.appendChild(this.fragment);\n"
490 @"  }\n"
491 @"});\n"
492 @"Insertion.After = Class.create();\n"
493 @"Insertion.After.prototype = (new Abstract.Insertion('afterEnd')).extend({\n"
494 @"  initializeRange: function() {\n"
495 @"    this.range.setStartAfter(this.element);\n"
496 @"  },\n"
497 @"  \n"
498 @"  insertContent: function() {\n"
499 @"    this.element.parentNode.insertBefore(this.fragment, \n"
500 @"      this.element.nextSibling);\n"
501 @"  }\n"
502 @"});\n"
503 @"/*--------------------------------------------------------------------------*/\n"
504 @"var Effect = new Object();\n"
505 @"Effect.Highlight = Class.create();\n"
506 @"Effect.Highlight.prototype = {\n"
507 @"  initialize: function(element) {\n"
508 @"    this.element = $(element);\n"
509 @"    this.start  = 153;\n"
510 @"    this.finish = 255;\n"
511 @"    this.current = this.start;\n"
512 @"    this.fade();\n"
513 @"  },\n"
514 @"  \n"
515 @"  fade: function() {\n"
516 @"    if (this.isFinished()) return;\n"
517 @"    if (this.timer) clearTimeout(this.timer);\n"
518 @"    this.highlight(this.element, this.current);\n"
519 @"    this.current += 17;\n"
520 @"    this.timer = setTimeout(this.fade.bind(this), 250);\n"
521 @"  },\n"
522 @"  \n"
523 @"  isFinished: function() {\n"
524 @"    return this.current > this.finish;\n"
525 @"  },\n"
526 @"  \n"
527 @"  highlight: function(element, current) {\n"
528 @"    element.style.backgroundColor = \"#ffff\" + current.toColorPart();\n"
529 @"  }\n"
530 @"}\n"
531 @"Effect.Fade = Class.create();\n"
532 @"Effect.Fade.prototype = {\n"
533 @"  initialize: function(element) {\n"
534 @"    this.element = $(element);\n"
535 @"    this.start  = 100;\n"
536 @"    this.finish = 0;\n"
537 @"    this.current = this.start;\n"
538 @"    this.fade();\n"
539 @"  },\n"
540 @"  \n"
541 @"  fade: function() {\n"
542 @"    if (this.isFinished()) { this.element.style.display = 'none'; return; }\n"
543 @"    if (this.timer) clearTimeout(this.timer);\n"
544 @"    this.setOpacity(this.element, this.current);\n"
545 @"    this.current -= 10;\n"
546 @"    this.timer = setTimeout(this.fade.bind(this), 50);\n"
547 @"  },\n"
548 @"  \n"
549 @"  isFinished: function() {\n"
550 @"    return this.current <= this.finish;\n"
551 @"  },\n"
552 @"  \n"
553 @"  setOpacity: function(element, opacity) {\n"
554 @"    opacity = (opacity == 100) ? 99.999 : opacity;\n"
555 @"    element.style.filter = \"alpha(opacity:\"+opacity+\")\";\n"
556 @"    element.style.opacity = opacity/100 /*//*/;\n"
557 @"  }\n"
558 @"}\n"
559 @"Effect.Scale = Class.create();\n"
560 @"Effect.Scale.prototype = {\n"
561 @"  initialize: function(element, percent) {\n"
562 @"    this.element = $(element);\n"
563 @"    this.startScale    = 1.0;\n"
564 @"    this.startHeight   = this.element.offsetHeight;\n"
565 @"    this.startWidth    = this.element.offsetWidth;\n"
566 @"    this.currentHeight = this.startHeight;\n"
567 @"    this.currentWidth  = this.startWidth;\n"
568 @"    this.finishScale   = (percent/100) /*//*/;\n"
569 @"    if (this.element.style.fontSize==\"\") this.sizeEm = 1.0;\n"
570 @"    if (this.element.style.fontSize.indexOf(\"em\")>0)\n"
571 @"       this.sizeEm      = parseFloat(this.element.style.fontSize);\n"
572 @"    if(this.element.effect_scale) {\n"
573 @"      clearTimeout(this.element.effect_scale.timer);\n"
574 @"      this.startScale  = this.element.effect_scale.currentScale;\n"
575 @"      this.startHeight = this.element.effect_scale.startHeight;\n"
576 @"      this.startWidth  = this.element.effect_scale.startWidth;\n"
577 @"      if(this.element.effect_scale.sizeEm) \n"
578 @"        this.sizeEm    = this.element.effect_scale.sizeEm;      \n"
579 @"    }\n"
580 @"    this.element.effect_scale = this;\n"
581 @"    this.currentScale  = this.startScale;\n"
582 @"    this.factor        = this.finishScale - this.startScale;\n"
583 @"    this.options       = arguments[2] || {}; \n"
584 @"    this.scale();\n"
585 @"  },\n"
586 @"  \n"
587 @"  scale: function() {\n"
588 @"    if (this.isFinished()) { \n"
589 @"      this.setDimensions(this.element, this.startWidth*this.finishScale, this.startHeight*this.finishScale);\n"
590 @"      if(this.sizeEm) this.element.style.fontSize = this.sizeEm*this.finishScale + \"em\";\n"
591 @"      if(this.options.complete) this.options.complete(this);\n"
592 @"      return; \n"
593 @"    }\n"
594 @"    if (this.timer) clearTimeout(this.timer);\n"
595 @"    if (this.options.step) this.options.step(this);\n"
596 @"    this.setDimensions(this.element, this.currentWidth, this.currentHeight);\n"
597 @"    if(this.sizeEm) this.element.style.fontSize = this.sizeEm*this.currentScale + \"em\";\n"
598 @"    this.currentScale += (this.factor/10) /*//*/;\n"
599 @"    this.currentWidth = this.startWidth * this.currentScale;\n"
600 @"    this.currentHeight = this.startHeight * this.currentScale;\n"
601 @"    this.timer = setTimeout(this.scale.bind(this), 50);\n"
602 @"  },\n"
603 @"  \n"
604 @"  isFinished: function() {\n"
605 @"    return (this.factor < 0) ? \n"
606 @"      this.currentScale <= this.finishScale : this.currentScale >= this.finishScale;\n"
607 @"  },\n"
608 @"  \n"
609 @"  setDimensions: function(element, width, height) {\n"
610 @"    element.style.width = width + 'px';\n"
611 @"    element.style.height = height + 'px';\n"
612 @"  }\n"
613 @"}\n"
614 @"Effect.Squish = Class.create();\n"
615 @"Effect.Squish.prototype = {\n"
616 @"  initialize: function(element) {\n"
617 @"    this.element = $(element);\n"
618 @"    new Effect.Scale(this.element, 1, { complete: this.hide.bind(this) } );\n"
619 @"  },\n"
620 @"  hide: function() {\n"
621 @"    this.element.style.display = 'none';\n"
622 @"  } \n"
623 @"}\n"
624 @"Effect.Puff = Class.create();\n"
625 @"Effect.Puff.prototype = {\n"
626 @"  initialize: function(element) {\n"
627 @"    this.element = $(element);\n"
628 @"    this.opacity = 100;\n"
629 @"    this.startTop  = this.element.top || this.element.offsetTop;\n"
630 @"    this.startLeft = this.element.left || this.element.offsetLeft;\n"
631 @"    new Effect.Scale(this.element, 200, { step: this.fade.bind(this), complete: this.hide.bind(this) } );\n"
632 @"  },\n"
633 @"  fade: function(effect) {\n"
634 @"    topd    = (((effect.currentScale)*effect.startHeight) - effect.startHeight)/2;\n"
635 @"    leftd   = (((effect.currentScale)*effect.startWidth) - effect.startWidth)/2;\n"
636 @"    this.element.style.position='absolute';\n"
637 @"    this.element.style.top = this.startTop-topd + \"px\";\n"
638 @"    this.element.style.left = this.startLeft-leftd + \"px\";\n"
639 @"    this.opacity -= 10;\n"
640 @"    this.setOpacity(this.element, this.opacity); \n"
641 @"    if(navigator.appVersion.indexOf('AppleWebKit')>0) this.element.innerHTML += ''; //force redraw on safari\n"
642 @"  },\n"
643 @"  hide: function() {\n"
644 @"    this.element.style.display = 'none';\n"
645 @"  },\n"
646 @"  setOpacity: function(element, opacity) {\n"
647 @"    opacity = (opacity == 100) ? 99.999 : opacity;\n"
648 @"    element.style.filter = \"alpha(opacity:\"+opacity+\")\";\n"
649 @"    element.style.opacity = opacity/100 /*//*/;\n"
650 @"  }\n"
651 @"}\n"
652 @"Effect.Appear = Class.create();\n"
653 @"Effect.Appear.prototype = {\n"
654 @"  initialize: function(element) {\n"
655 @"    this.element = $(element);\n"
656 @"    this.start  = 0;\n"
657 @"    this.finish = 100;\n"
658 @"    this.current = this.start;\n"
659 @"    this.fade();\n"
660 @"  },\n"
661 @"  \n"
662 @"  fade: function() {\n"
663 @"    if (this.isFinished()) return;\n"
664 @"    if (this.timer) clearTimeout(this.timer);\n"
665 @"    this.setOpacity(this.element, this.current);\n"
666 @"    this.current += 10;\n"
667 @"    this.timer = setTimeout(this.fade.bind(this), 50);\n"
668 @"  },\n"
669 @"  \n"
670 @"  isFinished: function() {\n"
671 @"    return this.current > this.finish;\n"
672 @"  },\n"
673 @"  \n"
674 @"  setOpacity: function(element, opacity) {\n"
675 @"    opacity = (opacity == 100) ? 99.999 : opacity;\n"
676 @"    element.style.filter = \"alpha(opacity:\"+opacity+\")\";\n"
677 @"    element.style.opacity = opacity/100 /*//*/;\n"
678 @"    element.style.display = '';\n"
679 @"  }\n"
680 @"}\n"
681 @"Effect.ContentZoom = Class.create();\n"
682 @"Effect.ContentZoom.prototype = {\n"
683 @"  initialize: function(element, percent) {\n"
684 @"    this.element = $(element);\n"
685 @"    if (this.element.style.fontSize==\"\") this.sizeEm = 1.0;\n"
686 @"    if (this.element.style.fontSize.indexOf(\"em\")>0)\n"
687 @"       this.sizeEm = parseFloat(this.element.style.fontSize);\n"
688 @"    if(this.element.effect_contentzoom) {\n"
689 @"      this.sizeEm = this.element.effect_contentzoom.sizeEm;\n"
690 @"    }\n"
691 @"    this.element.effect_contentzoom = this;\n"
692 @"    this.element.style.fontSize = this.sizeEm*(percent/100) + \"em\" /*//*/;\n"
693 @"    if(navigator.appVersion.indexOf('AppleWebKit')>0) { this.element.scrollTop -= 1; };\n"
694 @"  }\n"
695 @"}\n"