raw
mp-wp_genesis           1 /*  Prototype JavaScript framework, version 1.6.0
mp-wp_genesis 2 * (c) 2005-2007 Sam Stephenson
mp-wp_genesis 3 *
mp-wp_genesis 4 * Prototype is freely distributable under the terms of an MIT-style license.
mp-wp_genesis 5 * For details, see the Prototype web site: http://www.prototypejs.org/
mp-wp_genesis 6 *
mp-wp_genesis 7 *--------------------------------------------------------------------------*/
mp-wp_genesis 8
mp-wp_genesis 9 var Prototype = {
mp-wp_genesis 10 Version: '1.6.0',
mp-wp_genesis 11
mp-wp_genesis 12 Browser: {
mp-wp_genesis 13 IE: !!(window.attachEvent && !window.opera),
mp-wp_genesis 14 Opera: !!window.opera,
mp-wp_genesis 15 WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
mp-wp_genesis 16 Gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1,
mp-wp_genesis 17 MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
mp-wp_genesis 18 },
mp-wp_genesis 19
mp-wp_genesis 20 BrowserFeatures: {
mp-wp_genesis 21 XPath: !!document.evaluate,
mp-wp_genesis 22 ElementExtensions: !!window.HTMLElement,
mp-wp_genesis 23 SpecificElementExtensions:
mp-wp_genesis 24 document.createElement('div').__proto__ &&
mp-wp_genesis 25 document.createElement('div').__proto__ !==
mp-wp_genesis 26 document.createElement('form').__proto__
mp-wp_genesis 27 },
mp-wp_genesis 28
mp-wp_genesis 29 ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
mp-wp_genesis 30 JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,
mp-wp_genesis 31
mp-wp_genesis 32 emptyFunction: function() { },
mp-wp_genesis 33 K: function(x) { return x }
mp-wp_genesis 34 };
mp-wp_genesis 35
mp-wp_genesis 36 if (Prototype.Browser.MobileSafari)
mp-wp_genesis 37 Prototype.BrowserFeatures.SpecificElementExtensions = false;
mp-wp_genesis 38
mp-wp_genesis 39 if (Prototype.Browser.WebKit)
mp-wp_genesis 40 Prototype.BrowserFeatures.XPath = false;
mp-wp_genesis 41
mp-wp_genesis 42 /* Based on Alex Arnell's inheritance implementation. */
mp-wp_genesis 43 var Class = {
mp-wp_genesis 44 create: function() {
mp-wp_genesis 45 var parent = null, properties = $A(arguments);
mp-wp_genesis 46 if (Object.isFunction(properties[0]))
mp-wp_genesis 47 parent = properties.shift();
mp-wp_genesis 48
mp-wp_genesis 49 function klass() {
mp-wp_genesis 50 this.initialize.apply(this, arguments);
mp-wp_genesis 51 }
mp-wp_genesis 52
mp-wp_genesis 53 Object.extend(klass, Class.Methods);
mp-wp_genesis 54 klass.superclass = parent;
mp-wp_genesis 55 klass.subclasses = [];
mp-wp_genesis 56
mp-wp_genesis 57 if (parent) {
mp-wp_genesis 58 var subclass = function() { };
mp-wp_genesis 59 subclass.prototype = parent.prototype;
mp-wp_genesis 60 klass.prototype = new subclass;
mp-wp_genesis 61 parent.subclasses.push(klass);
mp-wp_genesis 62 }
mp-wp_genesis 63
mp-wp_genesis 64 for (var i = 0; i < properties.length; i++)
mp-wp_genesis 65 klass.addMethods(properties[i]);
mp-wp_genesis 66
mp-wp_genesis 67 if (!klass.prototype.initialize)
mp-wp_genesis 68 klass.prototype.initialize = Prototype.emptyFunction;
mp-wp_genesis 69
mp-wp_genesis 70 klass.prototype.constructor = klass;
mp-wp_genesis 71
mp-wp_genesis 72 return klass;
mp-wp_genesis 73 }
mp-wp_genesis 74 };
mp-wp_genesis 75
mp-wp_genesis 76 Class.Methods = {
mp-wp_genesis 77 addMethods: function(source) {
mp-wp_genesis 78 var ancestor = this.superclass && this.superclass.prototype;
mp-wp_genesis 79 var properties = Object.keys(source);
mp-wp_genesis 80
mp-wp_genesis 81 if (!Object.keys({ toString: true }).length)
mp-wp_genesis 82 properties.push("toString", "valueOf");
mp-wp_genesis 83
mp-wp_genesis 84 for (var i = 0, length = properties.length; i < length; i++) {
mp-wp_genesis 85 var property = properties[i], value = source[property];
mp-wp_genesis 86 if (ancestor && Object.isFunction(value) &&
mp-wp_genesis 87 value.argumentNames().first() == "$super") {
mp-wp_genesis 88 var method = value, value = Object.extend((function(m) {
mp-wp_genesis 89 return function() { return ancestor[m].apply(this, arguments) };
mp-wp_genesis 90 })(property).wrap(method), {
mp-wp_genesis 91 valueOf: function() { return method },
mp-wp_genesis 92 toString: function() { return method.toString() }
mp-wp_genesis 93 });
mp-wp_genesis 94 }
mp-wp_genesis 95 this.prototype[property] = value;
mp-wp_genesis 96 }
mp-wp_genesis 97
mp-wp_genesis 98 return this;
mp-wp_genesis 99 }
mp-wp_genesis 100 };
mp-wp_genesis 101
mp-wp_genesis 102 var Abstract = { };
mp-wp_genesis 103
mp-wp_genesis 104 Object.extend = function(destination, source) {
mp-wp_genesis 105 for (var property in source)
mp-wp_genesis 106 destination[property] = source[property];
mp-wp_genesis 107 return destination;
mp-wp_genesis 108 };
mp-wp_genesis 109
mp-wp_genesis 110 Object.extend(Object, {
mp-wp_genesis 111 inspect: function(object) {
mp-wp_genesis 112 try {
mp-wp_genesis 113 if (object === undefined) return 'undefined';
mp-wp_genesis 114 if (object === null) return 'null';
mp-wp_genesis 115 return object.inspect ? object.inspect() : object.toString();
mp-wp_genesis 116 } catch (e) {
mp-wp_genesis 117 if (e instanceof RangeError) return '...';
mp-wp_genesis 118 throw e;
mp-wp_genesis 119 }
mp-wp_genesis 120 },
mp-wp_genesis 121
mp-wp_genesis 122 toJSON: function(object) {
mp-wp_genesis 123 var type = typeof object;
mp-wp_genesis 124 switch (type) {
mp-wp_genesis 125 case 'undefined':
mp-wp_genesis 126 case 'function':
mp-wp_genesis 127 case 'unknown': return;
mp-wp_genesis 128 case 'boolean': return object.toString();
mp-wp_genesis 129 }
mp-wp_genesis 130
mp-wp_genesis 131 if (object === null) return 'null';
mp-wp_genesis 132 if (object.toJSON) return object.toJSON();
mp-wp_genesis 133 if (Object.isElement(object)) return;
mp-wp_genesis 134
mp-wp_genesis 135 var results = [];
mp-wp_genesis 136 for (var property in object) {
mp-wp_genesis 137 var value = Object.toJSON(object[property]);
mp-wp_genesis 138 if (value !== undefined)
mp-wp_genesis 139 results.push(property.toJSON() + ': ' + value);
mp-wp_genesis 140 }
mp-wp_genesis 141
mp-wp_genesis 142 return '{' + results.join(', ') + '}';
mp-wp_genesis 143 },
mp-wp_genesis 144
mp-wp_genesis 145 toQueryString: function(object) {
mp-wp_genesis 146 return $H(object).toQueryString();
mp-wp_genesis 147 },
mp-wp_genesis 148
mp-wp_genesis 149 toHTML: function(object) {
mp-wp_genesis 150 return object && object.toHTML ? object.toHTML() : String.interpret(object);
mp-wp_genesis 151 },
mp-wp_genesis 152
mp-wp_genesis 153 keys: function(object) {
mp-wp_genesis 154 var keys = [];
mp-wp_genesis 155 for (var property in object)
mp-wp_genesis 156 keys.push(property);
mp-wp_genesis 157 return keys;
mp-wp_genesis 158 },
mp-wp_genesis 159
mp-wp_genesis 160 values: function(object) {
mp-wp_genesis 161 var values = [];
mp-wp_genesis 162 for (var property in object)
mp-wp_genesis 163 values.push(object[property]);
mp-wp_genesis 164 return values;
mp-wp_genesis 165 },
mp-wp_genesis 166
mp-wp_genesis 167 clone: function(object) {
mp-wp_genesis 168 return Object.extend({ }, object);
mp-wp_genesis 169 },
mp-wp_genesis 170
mp-wp_genesis 171 isElement: function(object) {
mp-wp_genesis 172 return object && object.nodeType == 1;
mp-wp_genesis 173 },
mp-wp_genesis 174
mp-wp_genesis 175 isArray: function(object) {
mp-wp_genesis 176 return object && object.constructor === Array;
mp-wp_genesis 177 },
mp-wp_genesis 178
mp-wp_genesis 179 isHash: function(object) {
mp-wp_genesis 180 return object instanceof Hash;
mp-wp_genesis 181 },
mp-wp_genesis 182
mp-wp_genesis 183 isFunction: function(object) {
mp-wp_genesis 184 return typeof object == "function";
mp-wp_genesis 185 },
mp-wp_genesis 186
mp-wp_genesis 187 isString: function(object) {
mp-wp_genesis 188 return typeof object == "string";
mp-wp_genesis 189 },
mp-wp_genesis 190
mp-wp_genesis 191 isNumber: function(object) {
mp-wp_genesis 192 return typeof object == "number";
mp-wp_genesis 193 },
mp-wp_genesis 194
mp-wp_genesis 195 isUndefined: function(object) {
mp-wp_genesis 196 return typeof object == "undefined";
mp-wp_genesis 197 }
mp-wp_genesis 198 });
mp-wp_genesis 199
mp-wp_genesis 200 Object.extend(Function.prototype, {
mp-wp_genesis 201 argumentNames: function() {
mp-wp_genesis 202 var names = this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").invoke("strip");
mp-wp_genesis 203 return names.length == 1 && !names[0] ? [] : names;
mp-wp_genesis 204 },
mp-wp_genesis 205
mp-wp_genesis 206 bind: function() {
mp-wp_genesis 207 if (arguments.length < 2 && arguments[0] === undefined) return this;
mp-wp_genesis 208 var __method = this, args = $A(arguments), object = args.shift();
mp-wp_genesis 209 return function() {
mp-wp_genesis 210 return __method.apply(object, args.concat($A(arguments)));
mp-wp_genesis 211 }
mp-wp_genesis 212 },
mp-wp_genesis 213
mp-wp_genesis 214 bindAsEventListener: function() {
mp-wp_genesis 215 var __method = this, args = $A(arguments), object = args.shift();
mp-wp_genesis 216 return function(event) {
mp-wp_genesis 217 return __method.apply(object, [event || window.event].concat(args));
mp-wp_genesis 218 }
mp-wp_genesis 219 },
mp-wp_genesis 220
mp-wp_genesis 221 curry: function() {
mp-wp_genesis 222 if (!arguments.length) return this;
mp-wp_genesis 223 var __method = this, args = $A(arguments);
mp-wp_genesis 224 return function() {
mp-wp_genesis 225 return __method.apply(this, args.concat($A(arguments)));
mp-wp_genesis 226 }
mp-wp_genesis 227 },
mp-wp_genesis 228
mp-wp_genesis 229 delay: function() {
mp-wp_genesis 230 var __method = this, args = $A(arguments), timeout = args.shift() * 1000;
mp-wp_genesis 231 return window.setTimeout(function() {
mp-wp_genesis 232 return __method.apply(__method, args);
mp-wp_genesis 233 }, timeout);
mp-wp_genesis 234 },
mp-wp_genesis 235
mp-wp_genesis 236 wrap: function(wrapper) {
mp-wp_genesis 237 var __method = this;
mp-wp_genesis 238 return function() {
mp-wp_genesis 239 return wrapper.apply(this, [__method.bind(this)].concat($A(arguments)));
mp-wp_genesis 240 }
mp-wp_genesis 241 },
mp-wp_genesis 242
mp-wp_genesis 243 methodize: function() {
mp-wp_genesis 244 if (this._methodized) return this._methodized;
mp-wp_genesis 245 var __method = this;
mp-wp_genesis 246 return this._methodized = function() {
mp-wp_genesis 247 return __method.apply(null, [this].concat($A(arguments)));
mp-wp_genesis 248 };
mp-wp_genesis 249 }
mp-wp_genesis 250 });
mp-wp_genesis 251
mp-wp_genesis 252 Function.prototype.defer = Function.prototype.delay.curry(0.01);
mp-wp_genesis 253
mp-wp_genesis 254 Date.prototype.toJSON = function() {
mp-wp_genesis 255 return '"' + this.getUTCFullYear() + '-' +
mp-wp_genesis 256 (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
mp-wp_genesis 257 this.getUTCDate().toPaddedString(2) + 'T' +
mp-wp_genesis 258 this.getUTCHours().toPaddedString(2) + ':' +
mp-wp_genesis 259 this.getUTCMinutes().toPaddedString(2) + ':' +
mp-wp_genesis 260 this.getUTCSeconds().toPaddedString(2) + 'Z"';
mp-wp_genesis 261 };
mp-wp_genesis 262
mp-wp_genesis 263 var Try = {
mp-wp_genesis 264 these: function() {
mp-wp_genesis 265 var returnValue;
mp-wp_genesis 266
mp-wp_genesis 267 for (var i = 0, length = arguments.length; i < length; i++) {
mp-wp_genesis 268 var lambda = arguments[i];
mp-wp_genesis 269 try {
mp-wp_genesis 270 returnValue = lambda();
mp-wp_genesis 271 break;
mp-wp_genesis 272 } catch (e) { }
mp-wp_genesis 273 }
mp-wp_genesis 274
mp-wp_genesis 275 return returnValue;
mp-wp_genesis 276 }
mp-wp_genesis 277 };
mp-wp_genesis 278
mp-wp_genesis 279 RegExp.prototype.match = RegExp.prototype.test;
mp-wp_genesis 280
mp-wp_genesis 281 RegExp.escape = function(str) {
mp-wp_genesis 282 return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
mp-wp_genesis 283 };
mp-wp_genesis 284
mp-wp_genesis 285 /*--------------------------------------------------------------------------*/
mp-wp_genesis 286
mp-wp_genesis 287 var PeriodicalExecuter = Class.create({
mp-wp_genesis 288 initialize: function(callback, frequency) {
mp-wp_genesis 289 this.callback = callback;
mp-wp_genesis 290 this.frequency = frequency;
mp-wp_genesis 291 this.currentlyExecuting = false;
mp-wp_genesis 292
mp-wp_genesis 293 this.registerCallback();
mp-wp_genesis 294 },
mp-wp_genesis 295
mp-wp_genesis 296 registerCallback: function() {
mp-wp_genesis 297 this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
mp-wp_genesis 298 },
mp-wp_genesis 299
mp-wp_genesis 300 execute: function() {
mp-wp_genesis 301 this.callback(this);
mp-wp_genesis 302 },
mp-wp_genesis 303
mp-wp_genesis 304 stop: function() {
mp-wp_genesis 305 if (!this.timer) return;
mp-wp_genesis 306 clearInterval(this.timer);
mp-wp_genesis 307 this.timer = null;
mp-wp_genesis 308 },
mp-wp_genesis 309
mp-wp_genesis 310 onTimerEvent: function() {
mp-wp_genesis 311 if (!this.currentlyExecuting) {
mp-wp_genesis 312 try {
mp-wp_genesis 313 this.currentlyExecuting = true;
mp-wp_genesis 314 this.execute();
mp-wp_genesis 315 } finally {
mp-wp_genesis 316 this.currentlyExecuting = false;
mp-wp_genesis 317 }
mp-wp_genesis 318 }
mp-wp_genesis 319 }
mp-wp_genesis 320 });
mp-wp_genesis 321 Object.extend(String, {
mp-wp_genesis 322 interpret: function(value) {
mp-wp_genesis 323 return value == null ? '' : String(value);
mp-wp_genesis 324 },
mp-wp_genesis 325 specialChar: {
mp-wp_genesis 326 '\b': '\\b',
mp-wp_genesis 327 '\t': '\\t',
mp-wp_genesis 328 '\n': '\\n',
mp-wp_genesis 329 '\f': '\\f',
mp-wp_genesis 330 '\r': '\\r',
mp-wp_genesis 331 '\\': '\\\\'
mp-wp_genesis 332 }
mp-wp_genesis 333 });
mp-wp_genesis 334
mp-wp_genesis 335 Object.extend(String.prototype, {
mp-wp_genesis 336 gsub: function(pattern, replacement) {
mp-wp_genesis 337 var result = '', source = this, match;
mp-wp_genesis 338 replacement = arguments.callee.prepareReplacement(replacement);
mp-wp_genesis 339
mp-wp_genesis 340 while (source.length > 0) {
mp-wp_genesis 341 if (match = source.match(pattern)) {
mp-wp_genesis 342 result += source.slice(0, match.index);
mp-wp_genesis 343 result += String.interpret(replacement(match));
mp-wp_genesis 344 source = source.slice(match.index + match[0].length);
mp-wp_genesis 345 } else {
mp-wp_genesis 346 result += source, source = '';
mp-wp_genesis 347 }
mp-wp_genesis 348 }
mp-wp_genesis 349 return result;
mp-wp_genesis 350 },
mp-wp_genesis 351
mp-wp_genesis 352 sub: function(pattern, replacement, count) {
mp-wp_genesis 353 replacement = this.gsub.prepareReplacement(replacement);
mp-wp_genesis 354 count = count === undefined ? 1 : count;
mp-wp_genesis 355
mp-wp_genesis 356 return this.gsub(pattern, function(match) {
mp-wp_genesis 357 if (--count < 0) return match[0];
mp-wp_genesis 358 return replacement(match);
mp-wp_genesis 359 });
mp-wp_genesis 360 },
mp-wp_genesis 361
mp-wp_genesis 362 scan: function(pattern, iterator) {
mp-wp_genesis 363 this.gsub(pattern, iterator);
mp-wp_genesis 364 return String(this);
mp-wp_genesis 365 },
mp-wp_genesis 366
mp-wp_genesis 367 truncate: function(length, truncation) {
mp-wp_genesis 368 length = length || 30;
mp-wp_genesis 369 truncation = truncation === undefined ? '...' : truncation;
mp-wp_genesis 370 return this.length > length ?
mp-wp_genesis 371 this.slice(0, length - truncation.length) + truncation : String(this);
mp-wp_genesis 372 },
mp-wp_genesis 373
mp-wp_genesis 374 strip: function() {
mp-wp_genesis 375 return this.replace(/^\s+/, '').replace(/\s+$/, '');
mp-wp_genesis 376 },
mp-wp_genesis 377
mp-wp_genesis 378 stripTags: function() {
mp-wp_genesis 379 return this.replace(/<\/?[^>]+>/gi, '');
mp-wp_genesis 380 },
mp-wp_genesis 381
mp-wp_genesis 382 stripScripts: function() {
mp-wp_genesis 383 return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
mp-wp_genesis 384 },
mp-wp_genesis 385
mp-wp_genesis 386 extractScripts: function() {
mp-wp_genesis 387 var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
mp-wp_genesis 388 var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
mp-wp_genesis 389 return (this.match(matchAll) || []).map(function(scriptTag) {
mp-wp_genesis 390 return (scriptTag.match(matchOne) || ['', ''])[1];
mp-wp_genesis 391 });
mp-wp_genesis 392 },
mp-wp_genesis 393
mp-wp_genesis 394 evalScripts: function() {
mp-wp_genesis 395 return this.extractScripts().map(function(script) { return eval(script) });
mp-wp_genesis 396 },
mp-wp_genesis 397
mp-wp_genesis 398 escapeHTML: function() {
mp-wp_genesis 399 var self = arguments.callee;
mp-wp_genesis 400 self.text.data = this;
mp-wp_genesis 401 return self.div.innerHTML;
mp-wp_genesis 402 },
mp-wp_genesis 403
mp-wp_genesis 404 unescapeHTML: function() {
mp-wp_genesis 405 var div = new Element('div');
mp-wp_genesis 406 div.innerHTML = this.stripTags();
mp-wp_genesis 407 return div.childNodes[0] ? (div.childNodes.length > 1 ?
mp-wp_genesis 408 $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) :
mp-wp_genesis 409 div.childNodes[0].nodeValue) : '';
mp-wp_genesis 410 },
mp-wp_genesis 411
mp-wp_genesis 412 toQueryParams: function(separator) {
mp-wp_genesis 413 var match = this.strip().match(/([^?#]*)(#.*)?$/);
mp-wp_genesis 414 if (!match) return { };
mp-wp_genesis 415
mp-wp_genesis 416 return match[1].split(separator || '&').inject({ }, function(hash, pair) {
mp-wp_genesis 417 if ((pair = pair.split('='))[0]) {
mp-wp_genesis 418 var key = decodeURIComponent(pair.shift());
mp-wp_genesis 419 var value = pair.length > 1 ? pair.join('=') : pair[0];
mp-wp_genesis 420 if (value != undefined) value = decodeURIComponent(value);
mp-wp_genesis 421
mp-wp_genesis 422 if (key in hash) {
mp-wp_genesis 423 if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
mp-wp_genesis 424 hash[key].push(value);
mp-wp_genesis 425 }
mp-wp_genesis 426 else hash[key] = value;
mp-wp_genesis 427 }
mp-wp_genesis 428 return hash;
mp-wp_genesis 429 });
mp-wp_genesis 430 },
mp-wp_genesis 431
mp-wp_genesis 432 toArray: function() {
mp-wp_genesis 433 return this.split('');
mp-wp_genesis 434 },
mp-wp_genesis 435
mp-wp_genesis 436 succ: function() {
mp-wp_genesis 437 return this.slice(0, this.length - 1) +
mp-wp_genesis 438 String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
mp-wp_genesis 439 },
mp-wp_genesis 440
mp-wp_genesis 441 times: function(count) {
mp-wp_genesis 442 return count < 1 ? '' : new Array(count + 1).join(this);
mp-wp_genesis 443 },
mp-wp_genesis 444
mp-wp_genesis 445 camelize: function() {
mp-wp_genesis 446 var parts = this.split('-'), len = parts.length;
mp-wp_genesis 447 if (len == 1) return parts[0];
mp-wp_genesis 448
mp-wp_genesis 449 var camelized = this.charAt(0) == '-'
mp-wp_genesis 450 ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
mp-wp_genesis 451 : parts[0];
mp-wp_genesis 452
mp-wp_genesis 453 for (var i = 1; i < len; i++)
mp-wp_genesis 454 camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
mp-wp_genesis 455
mp-wp_genesis 456 return camelized;
mp-wp_genesis 457 },
mp-wp_genesis 458
mp-wp_genesis 459 capitalize: function() {
mp-wp_genesis 460 return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
mp-wp_genesis 461 },
mp-wp_genesis 462
mp-wp_genesis 463 underscore: function() {
mp-wp_genesis 464 return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();
mp-wp_genesis 465 },
mp-wp_genesis 466
mp-wp_genesis 467 dasherize: function() {
mp-wp_genesis 468 return this.gsub(/_/,'-');
mp-wp_genesis 469 },
mp-wp_genesis 470
mp-wp_genesis 471 inspect: function(useDoubleQuotes) {
mp-wp_genesis 472 var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) {
mp-wp_genesis 473 var character = String.specialChar[match[0]];
mp-wp_genesis 474 return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16);
mp-wp_genesis 475 });
mp-wp_genesis 476 if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
mp-wp_genesis 477 return "'" + escapedString.replace(/'/g, '\\\'') + "'";
mp-wp_genesis 478 },
mp-wp_genesis 479
mp-wp_genesis 480 toJSON: function() {
mp-wp_genesis 481 return this.inspect(true);
mp-wp_genesis 482 },
mp-wp_genesis 483
mp-wp_genesis 484 unfilterJSON: function(filter) {
mp-wp_genesis 485 return this.sub(filter || Prototype.JSONFilter, '#{1}');
mp-wp_genesis 486 },
mp-wp_genesis 487
mp-wp_genesis 488 isJSON: function() {
mp-wp_genesis 489 var str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
mp-wp_genesis 490 return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
mp-wp_genesis 491 },
mp-wp_genesis 492
mp-wp_genesis 493 evalJSON: function(sanitize) {
mp-wp_genesis 494 var json = this.unfilterJSON();
mp-wp_genesis 495 try {
mp-wp_genesis 496 if (!sanitize || json.isJSON()) return eval('(' + json + ')');
mp-wp_genesis 497 } catch (e) { }
mp-wp_genesis 498 throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
mp-wp_genesis 499 },
mp-wp_genesis 500
mp-wp_genesis 501 include: function(pattern) {
mp-wp_genesis 502 return this.indexOf(pattern) > -1;
mp-wp_genesis 503 },
mp-wp_genesis 504
mp-wp_genesis 505 startsWith: function(pattern) {
mp-wp_genesis 506 return this.indexOf(pattern) === 0;
mp-wp_genesis 507 },
mp-wp_genesis 508
mp-wp_genesis 509 endsWith: function(pattern) {
mp-wp_genesis 510 var d = this.length - pattern.length;
mp-wp_genesis 511 return d >= 0 && this.lastIndexOf(pattern) === d;
mp-wp_genesis 512 },
mp-wp_genesis 513
mp-wp_genesis 514 empty: function() {
mp-wp_genesis 515 return this == '';
mp-wp_genesis 516 },
mp-wp_genesis 517
mp-wp_genesis 518 blank: function() {
mp-wp_genesis 519 return /^\s*$/.test(this);
mp-wp_genesis 520 },
mp-wp_genesis 521
mp-wp_genesis 522 interpolate: function(object, pattern) {
mp-wp_genesis 523 return new Template(this, pattern).evaluate(object);
mp-wp_genesis 524 }
mp-wp_genesis 525 });
mp-wp_genesis 526
mp-wp_genesis 527 if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, {
mp-wp_genesis 528 escapeHTML: function() {
mp-wp_genesis 529 return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
mp-wp_genesis 530 },
mp-wp_genesis 531 unescapeHTML: function() {
mp-wp_genesis 532 return this.replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');
mp-wp_genesis 533 }
mp-wp_genesis 534 });
mp-wp_genesis 535
mp-wp_genesis 536 String.prototype.gsub.prepareReplacement = function(replacement) {
mp-wp_genesis 537 if (Object.isFunction(replacement)) return replacement;
mp-wp_genesis 538 var template = new Template(replacement);
mp-wp_genesis 539 return function(match) { return template.evaluate(match) };
mp-wp_genesis 540 };
mp-wp_genesis 541
mp-wp_genesis 542 String.prototype.parseQuery = String.prototype.toQueryParams;
mp-wp_genesis 543
mp-wp_genesis 544 Object.extend(String.prototype.escapeHTML, {
mp-wp_genesis 545 div: document.createElement('div'),
mp-wp_genesis 546 text: document.createTextNode('')
mp-wp_genesis 547 });
mp-wp_genesis 548
mp-wp_genesis 549 with (String.prototype.escapeHTML) div.appendChild(text);
mp-wp_genesis 550
mp-wp_genesis 551 var Template = Class.create({
mp-wp_genesis 552 initialize: function(template, pattern) {
mp-wp_genesis 553 this.template = template.toString();
mp-wp_genesis 554 this.pattern = pattern || Template.Pattern;
mp-wp_genesis 555 },
mp-wp_genesis 556
mp-wp_genesis 557 evaluate: function(object) {
mp-wp_genesis 558 if (Object.isFunction(object.toTemplateReplacements))
mp-wp_genesis 559 object = object.toTemplateReplacements();
mp-wp_genesis 560
mp-wp_genesis 561 return this.template.gsub(this.pattern, function(match) {
mp-wp_genesis 562 if (object == null) return '';
mp-wp_genesis 563
mp-wp_genesis 564 var before = match[1] || '';
mp-wp_genesis 565 if (before == '\\') return match[2];
mp-wp_genesis 566
mp-wp_genesis 567 var ctx = object, expr = match[3];
mp-wp_genesis 568 var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/, match = pattern.exec(expr);
mp-wp_genesis 569 if (match == null) return before;
mp-wp_genesis 570
mp-wp_genesis 571 while (match != null) {
mp-wp_genesis 572 var comp = match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : match[1];
mp-wp_genesis 573 ctx = ctx[comp];
mp-wp_genesis 574 if (null == ctx || '' == match[3]) break;
mp-wp_genesis 575 expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
mp-wp_genesis 576 match = pattern.exec(expr);
mp-wp_genesis 577 }
mp-wp_genesis 578
mp-wp_genesis 579 return before + String.interpret(ctx);
mp-wp_genesis 580 }.bind(this));
mp-wp_genesis 581 }
mp-wp_genesis 582 });
mp-wp_genesis 583 Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
mp-wp_genesis 584
mp-wp_genesis 585 var $break = { };
mp-wp_genesis 586
mp-wp_genesis 587 var Enumerable = {
mp-wp_genesis 588 each: function(iterator, context) {
mp-wp_genesis 589 var index = 0;
mp-wp_genesis 590 iterator = iterator.bind(context);
mp-wp_genesis 591 try {
mp-wp_genesis 592 this._each(function(value) {
mp-wp_genesis 593 iterator(value, index++);
mp-wp_genesis 594 });
mp-wp_genesis 595 } catch (e) {
mp-wp_genesis 596 if (e != $break) throw e;
mp-wp_genesis 597 }
mp-wp_genesis 598 return this;
mp-wp_genesis 599 },
mp-wp_genesis 600
mp-wp_genesis 601 eachSlice: function(number, iterator, context) {
mp-wp_genesis 602 iterator = iterator ? iterator.bind(context) : Prototype.K;
mp-wp_genesis 603 var index = -number, slices = [], array = this.toArray();
mp-wp_genesis 604 while ((index += number) < array.length)
mp-wp_genesis 605 slices.push(array.slice(index, index+number));
mp-wp_genesis 606 return slices.collect(iterator, context);
mp-wp_genesis 607 },
mp-wp_genesis 608
mp-wp_genesis 609 all: function(iterator, context) {
mp-wp_genesis 610 iterator = iterator ? iterator.bind(context) : Prototype.K;
mp-wp_genesis 611 var result = true;
mp-wp_genesis 612 this.each(function(value, index) {
mp-wp_genesis 613 result = result && !!iterator(value, index);
mp-wp_genesis 614 if (!result) throw $break;
mp-wp_genesis 615 });
mp-wp_genesis 616 return result;
mp-wp_genesis 617 },
mp-wp_genesis 618
mp-wp_genesis 619 any: function(iterator, context) {
mp-wp_genesis 620 iterator = iterator ? iterator.bind(context) : Prototype.K;
mp-wp_genesis 621 var result = false;
mp-wp_genesis 622 this.each(function(value, index) {
mp-wp_genesis 623 if (result = !!iterator(value, index))
mp-wp_genesis 624 throw $break;
mp-wp_genesis 625 });
mp-wp_genesis 626 return result;
mp-wp_genesis 627 },
mp-wp_genesis 628
mp-wp_genesis 629 collect: function(iterator, context) {
mp-wp_genesis 630 iterator = iterator ? iterator.bind(context) : Prototype.K;
mp-wp_genesis 631 var results = [];
mp-wp_genesis 632 this.each(function(value, index) {
mp-wp_genesis 633 results.push(iterator(value, index));
mp-wp_genesis 634 });
mp-wp_genesis 635 return results;
mp-wp_genesis 636 },
mp-wp_genesis 637
mp-wp_genesis 638 detect: function(iterator, context) {
mp-wp_genesis 639 iterator = iterator.bind(context);
mp-wp_genesis 640 var result;
mp-wp_genesis 641 this.each(function(value, index) {
mp-wp_genesis 642 if (iterator(value, index)) {
mp-wp_genesis 643 result = value;
mp-wp_genesis 644 throw $break;
mp-wp_genesis 645 }
mp-wp_genesis 646 });
mp-wp_genesis 647 return result;
mp-wp_genesis 648 },
mp-wp_genesis 649
mp-wp_genesis 650 findAll: function(iterator, context) {
mp-wp_genesis 651 iterator = iterator.bind(context);
mp-wp_genesis 652 var results = [];
mp-wp_genesis 653 this.each(function(value, index) {
mp-wp_genesis 654 if (iterator(value, index))
mp-wp_genesis 655 results.push(value);
mp-wp_genesis 656 });
mp-wp_genesis 657 return results;
mp-wp_genesis 658 },
mp-wp_genesis 659
mp-wp_genesis 660 grep: function(filter, iterator, context) {
mp-wp_genesis 661 iterator = iterator ? iterator.bind(context) : Prototype.K;
mp-wp_genesis 662 var results = [];
mp-wp_genesis 663
mp-wp_genesis 664 if (Object.isString(filter))
mp-wp_genesis 665 filter = new RegExp(filter);
mp-wp_genesis 666
mp-wp_genesis 667 this.each(function(value, index) {
mp-wp_genesis 668 if (filter.match(value))
mp-wp_genesis 669 results.push(iterator(value, index));
mp-wp_genesis 670 });
mp-wp_genesis 671 return results;
mp-wp_genesis 672 },
mp-wp_genesis 673
mp-wp_genesis 674 include: function(object) {
mp-wp_genesis 675 if (Object.isFunction(this.indexOf))
mp-wp_genesis 676 if (this.indexOf(object) != -1) return true;
mp-wp_genesis 677
mp-wp_genesis 678 var found = false;
mp-wp_genesis 679 this.each(function(value) {
mp-wp_genesis 680 if (value == object) {
mp-wp_genesis 681 found = true;
mp-wp_genesis 682 throw $break;
mp-wp_genesis 683 }
mp-wp_genesis 684 });
mp-wp_genesis 685 return found;
mp-wp_genesis 686 },
mp-wp_genesis 687
mp-wp_genesis 688 inGroupsOf: function(number, fillWith) {
mp-wp_genesis 689 fillWith = fillWith === undefined ? null : fillWith;
mp-wp_genesis 690 return this.eachSlice(number, function(slice) {
mp-wp_genesis 691 while(slice.length < number) slice.push(fillWith);
mp-wp_genesis 692 return slice;
mp-wp_genesis 693 });
mp-wp_genesis 694 },
mp-wp_genesis 695
mp-wp_genesis 696 inject: function(memo, iterator, context) {
mp-wp_genesis 697 iterator = iterator.bind(context);
mp-wp_genesis 698 this.each(function(value, index) {
mp-wp_genesis 699 memo = iterator(memo, value, index);
mp-wp_genesis 700 });
mp-wp_genesis 701 return memo;
mp-wp_genesis 702 },
mp-wp_genesis 703
mp-wp_genesis 704 invoke: function(method) {
mp-wp_genesis 705 var args = $A(arguments).slice(1);
mp-wp_genesis 706 return this.map(function(value) {
mp-wp_genesis 707 return value[method].apply(value, args);
mp-wp_genesis 708 });
mp-wp_genesis 709 },
mp-wp_genesis 710
mp-wp_genesis 711 max: function(iterator, context) {
mp-wp_genesis 712 iterator = iterator ? iterator.bind(context) : Prototype.K;
mp-wp_genesis 713 var result;
mp-wp_genesis 714 this.each(function(value, index) {
mp-wp_genesis 715 value = iterator(value, index);
mp-wp_genesis 716 if (result == undefined || value >= result)
mp-wp_genesis 717 result = value;
mp-wp_genesis 718 });
mp-wp_genesis 719 return result;
mp-wp_genesis 720 },
mp-wp_genesis 721
mp-wp_genesis 722 min: function(iterator, context) {
mp-wp_genesis 723 iterator = iterator ? iterator.bind(context) : Prototype.K;
mp-wp_genesis 724 var result;
mp-wp_genesis 725 this.each(function(value, index) {
mp-wp_genesis 726 value = iterator(value, index);
mp-wp_genesis 727 if (result == undefined || value < result)
mp-wp_genesis 728 result = value;
mp-wp_genesis 729 });
mp-wp_genesis 730 return result;
mp-wp_genesis 731 },
mp-wp_genesis 732
mp-wp_genesis 733 partition: function(iterator, context) {
mp-wp_genesis 734 iterator = iterator ? iterator.bind(context) : Prototype.K;
mp-wp_genesis 735 var trues = [], falses = [];
mp-wp_genesis 736 this.each(function(value, index) {
mp-wp_genesis 737 (iterator(value, index) ?
mp-wp_genesis 738 trues : falses).push(value);
mp-wp_genesis 739 });
mp-wp_genesis 740 return [trues, falses];
mp-wp_genesis 741 },
mp-wp_genesis 742
mp-wp_genesis 743 pluck: function(property) {
mp-wp_genesis 744 var results = [];
mp-wp_genesis 745 this.each(function(value) {
mp-wp_genesis 746 results.push(value[property]);
mp-wp_genesis 747 });
mp-wp_genesis 748 return results;
mp-wp_genesis 749 },
mp-wp_genesis 750
mp-wp_genesis 751 reject: function(iterator, context) {
mp-wp_genesis 752 iterator = iterator.bind(context);
mp-wp_genesis 753 var results = [];
mp-wp_genesis 754 this.each(function(value, index) {
mp-wp_genesis 755 if (!iterator(value, index))
mp-wp_genesis 756 results.push(value);
mp-wp_genesis 757 });
mp-wp_genesis 758 return results;
mp-wp_genesis 759 },
mp-wp_genesis 760
mp-wp_genesis 761 sortBy: function(iterator, context) {
mp-wp_genesis 762 iterator = iterator.bind(context);
mp-wp_genesis 763 return this.map(function(value, index) {
mp-wp_genesis 764 return {value: value, criteria: iterator(value, index)};
mp-wp_genesis 765 }).sort(function(left, right) {
mp-wp_genesis 766 var a = left.criteria, b = right.criteria;
mp-wp_genesis 767 return a < b ? -1 : a > b ? 1 : 0;
mp-wp_genesis 768 }).pluck('value');
mp-wp_genesis 769 },
mp-wp_genesis 770
mp-wp_genesis 771 toArray: function() {
mp-wp_genesis 772 return this.map();
mp-wp_genesis 773 },
mp-wp_genesis 774
mp-wp_genesis 775 zip: function() {
mp-wp_genesis 776 var iterator = Prototype.K, args = $A(arguments);
mp-wp_genesis 777 if (Object.isFunction(args.last()))
mp-wp_genesis 778 iterator = args.pop();
mp-wp_genesis 779
mp-wp_genesis 780 var collections = [this].concat(args).map($A);
mp-wp_genesis 781 return this.map(function(value, index) {
mp-wp_genesis 782 return iterator(collections.pluck(index));
mp-wp_genesis 783 });
mp-wp_genesis 784 },
mp-wp_genesis 785
mp-wp_genesis 786 size: function() {
mp-wp_genesis 787 return this.toArray().length;
mp-wp_genesis 788 },
mp-wp_genesis 789
mp-wp_genesis 790 inspect: function() {
mp-wp_genesis 791 return '#<Enumerable:' + this.toArray().inspect() + '>';
mp-wp_genesis 792 }
mp-wp_genesis 793 };
mp-wp_genesis 794
mp-wp_genesis 795 Object.extend(Enumerable, {
mp-wp_genesis 796 map: Enumerable.collect,
mp-wp_genesis 797 find: Enumerable.detect,
mp-wp_genesis 798 select: Enumerable.findAll,
mp-wp_genesis 799 filter: Enumerable.findAll,
mp-wp_genesis 800 member: Enumerable.include,
mp-wp_genesis 801 entries: Enumerable.toArray,
mp-wp_genesis 802 every: Enumerable.all,
mp-wp_genesis 803 some: Enumerable.any
mp-wp_genesis 804 });
mp-wp_genesis 805 function $A(iterable) {
mp-wp_genesis 806 if (!iterable) return [];
mp-wp_genesis 807 if (iterable.toArray) return iterable.toArray();
mp-wp_genesis 808 var length = iterable.length, results = new Array(length);
mp-wp_genesis 809 while (length--) results[length] = iterable[length];
mp-wp_genesis 810 return results;
mp-wp_genesis 811 }
mp-wp_genesis 812
mp-wp_genesis 813 if (Prototype.Browser.WebKit) {
mp-wp_genesis 814 function $A(iterable) {
mp-wp_genesis 815 if (!iterable) return [];
mp-wp_genesis 816 if (!(Object.isFunction(iterable) && iterable == '[object NodeList]') &&
mp-wp_genesis 817 iterable.toArray) return iterable.toArray();
mp-wp_genesis 818 var length = iterable.length, results = new Array(length);
mp-wp_genesis 819 while (length--) results[length] = iterable[length];
mp-wp_genesis 820 return results;
mp-wp_genesis 821 }
mp-wp_genesis 822 }
mp-wp_genesis 823
mp-wp_genesis 824 Array.from = $A;
mp-wp_genesis 825
mp-wp_genesis 826 Object.extend(Array.prototype, Enumerable);
mp-wp_genesis 827
mp-wp_genesis 828 if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse;
mp-wp_genesis 829
mp-wp_genesis 830 Object.extend(Array.prototype, {
mp-wp_genesis 831 _each: function(iterator) {
mp-wp_genesis 832 for (var i = 0, length = this.length; i < length; i++)
mp-wp_genesis 833 iterator(this[i]);
mp-wp_genesis 834 },
mp-wp_genesis 835
mp-wp_genesis 836 clear: function() {
mp-wp_genesis 837 this.length = 0;
mp-wp_genesis 838 return this;
mp-wp_genesis 839 },
mp-wp_genesis 840
mp-wp_genesis 841 first: function() {
mp-wp_genesis 842 return this[0];
mp-wp_genesis 843 },
mp-wp_genesis 844
mp-wp_genesis 845 last: function() {
mp-wp_genesis 846 return this[this.length - 1];
mp-wp_genesis 847 },
mp-wp_genesis 848
mp-wp_genesis 849 compact: function() {
mp-wp_genesis 850 return this.select(function(value) {
mp-wp_genesis 851 return value != null;
mp-wp_genesis 852 });
mp-wp_genesis 853 },
mp-wp_genesis 854
mp-wp_genesis 855 flatten: function() {
mp-wp_genesis 856 return this.inject([], function(array, value) {
mp-wp_genesis 857 return array.concat(Object.isArray(value) ?
mp-wp_genesis 858 value.flatten() : [value]);
mp-wp_genesis 859 });
mp-wp_genesis 860 },
mp-wp_genesis 861
mp-wp_genesis 862 without: function() {
mp-wp_genesis 863 var values = $A(arguments);
mp-wp_genesis 864 return this.select(function(value) {
mp-wp_genesis 865 return !values.include(value);
mp-wp_genesis 866 });
mp-wp_genesis 867 },
mp-wp_genesis 868
mp-wp_genesis 869 reverse: function(inline) {
mp-wp_genesis 870 return (inline !== false ? this : this.toArray())._reverse();
mp-wp_genesis 871 },
mp-wp_genesis 872
mp-wp_genesis 873 reduce: function() {
mp-wp_genesis 874 return this.length > 1 ? this : this[0];
mp-wp_genesis 875 },
mp-wp_genesis 876
mp-wp_genesis 877 uniq: function(sorted) {
mp-wp_genesis 878 return this.inject([], function(array, value, index) {
mp-wp_genesis 879 if (0 == index || (sorted ? array.last() != value : !array.include(value)))
mp-wp_genesis 880 array.push(value);
mp-wp_genesis 881 return array;
mp-wp_genesis 882 });
mp-wp_genesis 883 },
mp-wp_genesis 884
mp-wp_genesis 885 intersect: function(array) {
mp-wp_genesis 886 return this.uniq().findAll(function(item) {
mp-wp_genesis 887 return array.detect(function(value) { return item === value });
mp-wp_genesis 888 });
mp-wp_genesis 889 },
mp-wp_genesis 890
mp-wp_genesis 891 clone: function() {
mp-wp_genesis 892 return [].concat(this);
mp-wp_genesis 893 },
mp-wp_genesis 894
mp-wp_genesis 895 size: function() {
mp-wp_genesis 896 return this.length;
mp-wp_genesis 897 },
mp-wp_genesis 898
mp-wp_genesis 899 inspect: function() {
mp-wp_genesis 900 return '[' + this.map(Object.inspect).join(', ') + ']';
mp-wp_genesis 901 },
mp-wp_genesis 902
mp-wp_genesis 903 toJSON: function() {
mp-wp_genesis 904 var results = [];
mp-wp_genesis 905 this.each(function(object) {
mp-wp_genesis 906 var value = Object.toJSON(object);
mp-wp_genesis 907 if (value !== undefined) results.push(value);
mp-wp_genesis 908 });
mp-wp_genesis 909 return '[' + results.join(', ') + ']';
mp-wp_genesis 910 }
mp-wp_genesis 911 });
mp-wp_genesis 912
mp-wp_genesis 913 // use native browser JS 1.6 implementation if available
mp-wp_genesis 914 if (Object.isFunction(Array.prototype.forEach))
mp-wp_genesis 915 Array.prototype._each = Array.prototype.forEach;
mp-wp_genesis 916
mp-wp_genesis 917 if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) {
mp-wp_genesis 918 i || (i = 0);
mp-wp_genesis 919 var length = this.length;
mp-wp_genesis 920 if (i < 0) i = length + i;
mp-wp_genesis 921 for (; i < length; i++)
mp-wp_genesis 922 if (this[i] === item) return i;
mp-wp_genesis 923 return -1;
mp-wp_genesis 924 };
mp-wp_genesis 925
mp-wp_genesis 926 if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) {
mp-wp_genesis 927 i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
mp-wp_genesis 928 var n = this.slice(0, i).reverse().indexOf(item);
mp-wp_genesis 929 return (n < 0) ? n : i - n - 1;
mp-wp_genesis 930 };
mp-wp_genesis 931
mp-wp_genesis 932 Array.prototype.toArray = Array.prototype.clone;
mp-wp_genesis 933
mp-wp_genesis 934 function $w(string) {
mp-wp_genesis 935 if (!Object.isString(string)) return [];
mp-wp_genesis 936 string = string.strip();
mp-wp_genesis 937 return string ? string.split(/\s+/) : [];
mp-wp_genesis 938 }
mp-wp_genesis 939
mp-wp_genesis 940 if (Prototype.Browser.Opera){
mp-wp_genesis 941 Array.prototype.concat = function() {
mp-wp_genesis 942 var array = [];
mp-wp_genesis 943 for (var i = 0, length = this.length; i < length; i++) array.push(this[i]);
mp-wp_genesis 944 for (var i = 0, length = arguments.length; i < length; i++) {
mp-wp_genesis 945 if (Object.isArray(arguments[i])) {
mp-wp_genesis 946 for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
mp-wp_genesis 947 array.push(arguments[i][j]);
mp-wp_genesis 948 } else {
mp-wp_genesis 949 array.push(arguments[i]);
mp-wp_genesis 950 }
mp-wp_genesis 951 }
mp-wp_genesis 952 return array;
mp-wp_genesis 953 };
mp-wp_genesis 954 }
mp-wp_genesis 955 Object.extend(Number.prototype, {
mp-wp_genesis 956 toColorPart: function() {
mp-wp_genesis 957 return this.toPaddedString(2, 16);
mp-wp_genesis 958 },
mp-wp_genesis 959
mp-wp_genesis 960 succ: function() {
mp-wp_genesis 961 return this + 1;
mp-wp_genesis 962 },
mp-wp_genesis 963
mp-wp_genesis 964 times: function(iterator) {
mp-wp_genesis 965 $R(0, this, true).each(iterator);
mp-wp_genesis 966 return this;
mp-wp_genesis 967 },
mp-wp_genesis 968
mp-wp_genesis 969 toPaddedString: function(length, radix) {
mp-wp_genesis 970 var string = this.toString(radix || 10);
mp-wp_genesis 971 return '0'.times(length - string.length) + string;
mp-wp_genesis 972 },
mp-wp_genesis 973
mp-wp_genesis 974 toJSON: function() {
mp-wp_genesis 975 return isFinite(this) ? this.toString() : 'null';
mp-wp_genesis 976 }
mp-wp_genesis 977 });
mp-wp_genesis 978
mp-wp_genesis 979 $w('abs round ceil floor').each(function(method){
mp-wp_genesis 980 Number.prototype[method] = Math[method].methodize();
mp-wp_genesis 981 });
mp-wp_genesis 982 function $H(object) {
mp-wp_genesis 983 return new Hash(object);
mp-wp_genesis 984 };
mp-wp_genesis 985
mp-wp_genesis 986 var Hash = Class.create(Enumerable, (function() {
mp-wp_genesis 987 if (function() {
mp-wp_genesis 988 var i = 0, Test = function(value) { this.key = value };
mp-wp_genesis 989 Test.prototype.key = 'foo';
mp-wp_genesis 990 for (var property in new Test('bar')) i++;
mp-wp_genesis 991 return i > 1;
mp-wp_genesis 992 }()) {
mp-wp_genesis 993 function each(iterator) {
mp-wp_genesis 994 var cache = [];
mp-wp_genesis 995 for (var key in this._object) {
mp-wp_genesis 996 var value = this._object[key];
mp-wp_genesis 997 if (cache.include(key)) continue;
mp-wp_genesis 998 cache.push(key);
mp-wp_genesis 999 var pair = [key, value];
mp-wp_genesis 1000 pair.key = key;
mp-wp_genesis 1001 pair.value = value;
mp-wp_genesis 1002 iterator(pair);
mp-wp_genesis 1003 }
mp-wp_genesis 1004 }
mp-wp_genesis 1005 } else {
mp-wp_genesis 1006 function each(iterator) {
mp-wp_genesis 1007 for (var key in this._object) {
mp-wp_genesis 1008 var value = this._object[key], pair = [key, value];
mp-wp_genesis 1009 pair.key = key;
mp-wp_genesis 1010 pair.value = value;
mp-wp_genesis 1011 iterator(pair);
mp-wp_genesis 1012 }
mp-wp_genesis 1013 }
mp-wp_genesis 1014 }
mp-wp_genesis 1015
mp-wp_genesis 1016 function toQueryPair(key, value) {
mp-wp_genesis 1017 if (Object.isUndefined(value)) return key;
mp-wp_genesis 1018 return key + '=' + encodeURIComponent(String.interpret(value));
mp-wp_genesis 1019 }
mp-wp_genesis 1020
mp-wp_genesis 1021 return {
mp-wp_genesis 1022 initialize: function(object) {
mp-wp_genesis 1023 this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
mp-wp_genesis 1024 },
mp-wp_genesis 1025
mp-wp_genesis 1026 _each: each,
mp-wp_genesis 1027
mp-wp_genesis 1028 set: function(key, value) {
mp-wp_genesis 1029 return this._object[key] = value;
mp-wp_genesis 1030 },
mp-wp_genesis 1031
mp-wp_genesis 1032 get: function(key) {
mp-wp_genesis 1033 return this._object[key];
mp-wp_genesis 1034 },
mp-wp_genesis 1035
mp-wp_genesis 1036 unset: function(key) {
mp-wp_genesis 1037 var value = this._object[key];
mp-wp_genesis 1038 delete this._object[key];
mp-wp_genesis 1039 return value;
mp-wp_genesis 1040 },
mp-wp_genesis 1041
mp-wp_genesis 1042 toObject: function() {
mp-wp_genesis 1043 return Object.clone(this._object);
mp-wp_genesis 1044 },
mp-wp_genesis 1045
mp-wp_genesis 1046 keys: function() {
mp-wp_genesis 1047 return this.pluck('key');
mp-wp_genesis 1048 },
mp-wp_genesis 1049
mp-wp_genesis 1050 values: function() {
mp-wp_genesis 1051 return this.pluck('value');
mp-wp_genesis 1052 },
mp-wp_genesis 1053
mp-wp_genesis 1054 index: function(value) {
mp-wp_genesis 1055 var match = this.detect(function(pair) {
mp-wp_genesis 1056 return pair.value === value;
mp-wp_genesis 1057 });
mp-wp_genesis 1058 return match && match.key;
mp-wp_genesis 1059 },
mp-wp_genesis 1060
mp-wp_genesis 1061 merge: function(object) {
mp-wp_genesis 1062 return this.clone().update(object);
mp-wp_genesis 1063 },
mp-wp_genesis 1064
mp-wp_genesis 1065 update: function(object) {
mp-wp_genesis 1066 return new Hash(object).inject(this, function(result, pair) {
mp-wp_genesis 1067 result.set(pair.key, pair.value);
mp-wp_genesis 1068 return result;
mp-wp_genesis 1069 });
mp-wp_genesis 1070 },
mp-wp_genesis 1071
mp-wp_genesis 1072 toQueryString: function() {
mp-wp_genesis 1073 return this.map(function(pair) {
mp-wp_genesis 1074 var key = encodeURIComponent(pair.key), values = pair.value;
mp-wp_genesis 1075
mp-wp_genesis 1076 if (values && typeof values == 'object') {
mp-wp_genesis 1077 if (Object.isArray(values))
mp-wp_genesis 1078 return values.map(toQueryPair.curry(key)).join('&');
mp-wp_genesis 1079 }
mp-wp_genesis 1080 return toQueryPair(key, values);
mp-wp_genesis 1081 }).join('&');
mp-wp_genesis 1082 },
mp-wp_genesis 1083
mp-wp_genesis 1084 inspect: function() {
mp-wp_genesis 1085 return '#<Hash:{' + this.map(function(pair) {
mp-wp_genesis 1086 return pair.map(Object.inspect).join(': ');
mp-wp_genesis 1087 }).join(', ') + '}>';
mp-wp_genesis 1088 },
mp-wp_genesis 1089
mp-wp_genesis 1090 toJSON: function() {
mp-wp_genesis 1091 return Object.toJSON(this.toObject());
mp-wp_genesis 1092 },
mp-wp_genesis 1093
mp-wp_genesis 1094 clone: function() {
mp-wp_genesis 1095 return new Hash(this);
mp-wp_genesis 1096 }
mp-wp_genesis 1097 }
mp-wp_genesis 1098 })());
mp-wp_genesis 1099
mp-wp_genesis 1100 Hash.prototype.toTemplateReplacements = Hash.prototype.toObject;
mp-wp_genesis 1101 Hash.from = $H;
mp-wp_genesis 1102 var ObjectRange = Class.create(Enumerable, {
mp-wp_genesis 1103 initialize: function(start, end, exclusive) {
mp-wp_genesis 1104 this.start = start;
mp-wp_genesis 1105 this.end = end;
mp-wp_genesis 1106 this.exclusive = exclusive;
mp-wp_genesis 1107 },
mp-wp_genesis 1108
mp-wp_genesis 1109 _each: function(iterator) {
mp-wp_genesis 1110 var value = this.start;
mp-wp_genesis 1111 while (this.include(value)) {
mp-wp_genesis 1112 iterator(value);
mp-wp_genesis 1113 value = value.succ();
mp-wp_genesis 1114 }
mp-wp_genesis 1115 },
mp-wp_genesis 1116
mp-wp_genesis 1117 include: function(value) {
mp-wp_genesis 1118 if (value < this.start)
mp-wp_genesis 1119 return false;
mp-wp_genesis 1120 if (this.exclusive)
mp-wp_genesis 1121 return value < this.end;
mp-wp_genesis 1122 return value <= this.end;
mp-wp_genesis 1123 }
mp-wp_genesis 1124 });
mp-wp_genesis 1125
mp-wp_genesis 1126 var $R = function(start, end, exclusive) {
mp-wp_genesis 1127 return new ObjectRange(start, end, exclusive);
mp-wp_genesis 1128 };
mp-wp_genesis 1129
mp-wp_genesis 1130 var Ajax = {
mp-wp_genesis 1131 getTransport: function() {
mp-wp_genesis 1132 return Try.these(
mp-wp_genesis 1133 function() {return new XMLHttpRequest()},
mp-wp_genesis 1134 function() {return new ActiveXObject('Msxml2.XMLHTTP')},
mp-wp_genesis 1135 function() {return new ActiveXObject('Microsoft.XMLHTTP')}
mp-wp_genesis 1136 ) || false;
mp-wp_genesis 1137 },
mp-wp_genesis 1138
mp-wp_genesis 1139 activeRequestCount: 0
mp-wp_genesis 1140 };
mp-wp_genesis 1141
mp-wp_genesis 1142 Ajax.Responders = {
mp-wp_genesis 1143 responders: [],
mp-wp_genesis 1144
mp-wp_genesis 1145 _each: function(iterator) {
mp-wp_genesis 1146 this.responders._each(iterator);
mp-wp_genesis 1147 },
mp-wp_genesis 1148
mp-wp_genesis 1149 register: function(responder) {
mp-wp_genesis 1150 if (!this.include(responder))
mp-wp_genesis 1151 this.responders.push(responder);
mp-wp_genesis 1152 },
mp-wp_genesis 1153
mp-wp_genesis 1154 unregister: function(responder) {
mp-wp_genesis 1155 this.responders = this.responders.without(responder);
mp-wp_genesis 1156 },
mp-wp_genesis 1157
mp-wp_genesis 1158 dispatch: function(callback, request, transport, json) {
mp-wp_genesis 1159 this.each(function(responder) {
mp-wp_genesis 1160 if (Object.isFunction(responder[callback])) {
mp-wp_genesis 1161 try {
mp-wp_genesis 1162 responder[callback].apply(responder, [request, transport, json]);
mp-wp_genesis 1163 } catch (e) { }
mp-wp_genesis 1164 }
mp-wp_genesis 1165 });
mp-wp_genesis 1166 }
mp-wp_genesis 1167 };
mp-wp_genesis 1168
mp-wp_genesis 1169 Object.extend(Ajax.Responders, Enumerable);
mp-wp_genesis 1170
mp-wp_genesis 1171 Ajax.Responders.register({
mp-wp_genesis 1172 onCreate: function() { Ajax.activeRequestCount++ },
mp-wp_genesis 1173 onComplete: function() { Ajax.activeRequestCount-- }
mp-wp_genesis 1174 });
mp-wp_genesis 1175
mp-wp_genesis 1176 Ajax.Base = Class.create({
mp-wp_genesis 1177 initialize: function(options) {
mp-wp_genesis 1178 this.options = {
mp-wp_genesis 1179 method: 'post',
mp-wp_genesis 1180 asynchronous: true,
mp-wp_genesis 1181 contentType: 'application/x-www-form-urlencoded',
mp-wp_genesis 1182 encoding: 'UTF-8',
mp-wp_genesis 1183 parameters: '',
mp-wp_genesis 1184 evalJSON: true,
mp-wp_genesis 1185 evalJS: true
mp-wp_genesis 1186 };
mp-wp_genesis 1187 Object.extend(this.options, options || { });
mp-wp_genesis 1188
mp-wp_genesis 1189 this.options.method = this.options.method.toLowerCase();
mp-wp_genesis 1190 if (Object.isString(this.options.parameters))
mp-wp_genesis 1191 this.options.parameters = this.options.parameters.toQueryParams();
mp-wp_genesis 1192 }
mp-wp_genesis 1193 });
mp-wp_genesis 1194
mp-wp_genesis 1195 Ajax.Request = Class.create(Ajax.Base, {
mp-wp_genesis 1196 _complete: false,
mp-wp_genesis 1197
mp-wp_genesis 1198 initialize: function($super, url, options) {
mp-wp_genesis 1199 $super(options);
mp-wp_genesis 1200 this.transport = Ajax.getTransport();
mp-wp_genesis 1201 this.request(url);
mp-wp_genesis 1202 },
mp-wp_genesis 1203
mp-wp_genesis 1204 request: function(url) {
mp-wp_genesis 1205 this.url = url;
mp-wp_genesis 1206 this.method = this.options.method;
mp-wp_genesis 1207 var params = Object.clone(this.options.parameters);
mp-wp_genesis 1208
mp-wp_genesis 1209 if (!['get', 'post'].include(this.method)) {
mp-wp_genesis 1210 // simulate other verbs over post
mp-wp_genesis 1211 params['_method'] = this.method;
mp-wp_genesis 1212 this.method = 'post';
mp-wp_genesis 1213 }
mp-wp_genesis 1214
mp-wp_genesis 1215 this.parameters = params;
mp-wp_genesis 1216
mp-wp_genesis 1217 if (params = Object.toQueryString(params)) {
mp-wp_genesis 1218 // when GET, append parameters to URL
mp-wp_genesis 1219 if (this.method == 'get')
mp-wp_genesis 1220 this.url += (this.url.include('?') ? '&' : '?') + params;
mp-wp_genesis 1221 else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
mp-wp_genesis 1222 params += '&_=';
mp-wp_genesis 1223 }
mp-wp_genesis 1224
mp-wp_genesis 1225 try {
mp-wp_genesis 1226 var response = new Ajax.Response(this);
mp-wp_genesis 1227 if (this.options.onCreate) this.options.onCreate(response);
mp-wp_genesis 1228 Ajax.Responders.dispatch('onCreate', this, response);
mp-wp_genesis 1229
mp-wp_genesis 1230 this.transport.open(this.method.toUpperCase(), this.url,
mp-wp_genesis 1231 this.options.asynchronous);
mp-wp_genesis 1232
mp-wp_genesis 1233 if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);
mp-wp_genesis 1234
mp-wp_genesis 1235 this.transport.onreadystatechange = this.onStateChange.bind(this);
mp-wp_genesis 1236 this.setRequestHeaders();
mp-wp_genesis 1237
mp-wp_genesis 1238 this.body = this.method == 'post' ? (this.options.postBody || params) : null;
mp-wp_genesis 1239 this.transport.send(this.body);
mp-wp_genesis 1240
mp-wp_genesis 1241 /* Force Firefox to handle ready state 4 for synchronous requests */
mp-wp_genesis 1242 if (!this.options.asynchronous && this.transport.overrideMimeType)
mp-wp_genesis 1243 this.onStateChange();
mp-wp_genesis 1244
mp-wp_genesis 1245 }
mp-wp_genesis 1246 catch (e) {
mp-wp_genesis 1247 this.dispatchException(e);
mp-wp_genesis 1248 }
mp-wp_genesis 1249 },
mp-wp_genesis 1250
mp-wp_genesis 1251 onStateChange: function() {
mp-wp_genesis 1252 var readyState = this.transport.readyState;
mp-wp_genesis 1253 if (readyState > 1 && !((readyState == 4) && this._complete))
mp-wp_genesis 1254 this.respondToReadyState(this.transport.readyState);
mp-wp_genesis 1255 },
mp-wp_genesis 1256
mp-wp_genesis 1257 setRequestHeaders: function() {
mp-wp_genesis 1258 var headers = {
mp-wp_genesis 1259 'X-Requested-With': 'XMLHttpRequest',
mp-wp_genesis 1260 'X-Prototype-Version': Prototype.Version,
mp-wp_genesis 1261 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
mp-wp_genesis 1262 };
mp-wp_genesis 1263
mp-wp_genesis 1264 if (this.method == 'post') {
mp-wp_genesis 1265 headers['Content-type'] = this.options.contentType +
mp-wp_genesis 1266 (this.options.encoding ? '; charset=' + this.options.encoding : '');
mp-wp_genesis 1267
mp-wp_genesis 1268 /* Force "Connection: close" for older Mozilla browsers to work
mp-wp_genesis 1269 * around a bug where XMLHttpRequest sends an incorrect
mp-wp_genesis 1270 * Content-length header. See Mozilla Bugzilla #246651.
mp-wp_genesis 1271 */
mp-wp_genesis 1272 if (this.transport.overrideMimeType &&
mp-wp_genesis 1273 (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
mp-wp_genesis 1274 headers['Connection'] = 'close';
mp-wp_genesis 1275 }
mp-wp_genesis 1276
mp-wp_genesis 1277 // user-defined headers
mp-wp_genesis 1278 if (typeof this.options.requestHeaders == 'object') {
mp-wp_genesis 1279 var extras = this.options.requestHeaders;
mp-wp_genesis 1280
mp-wp_genesis 1281 if (Object.isFunction(extras.push))
mp-wp_genesis 1282 for (var i = 0, length = extras.length; i < length; i += 2)
mp-wp_genesis 1283 headers[extras[i]] = extras[i+1];
mp-wp_genesis 1284 else
mp-wp_genesis 1285 $H(extras).each(function(pair) { headers[pair.key] = pair.value });
mp-wp_genesis 1286 }
mp-wp_genesis 1287
mp-wp_genesis 1288 for (var name in headers)
mp-wp_genesis 1289 this.transport.setRequestHeader(name, headers[name]);
mp-wp_genesis 1290 },
mp-wp_genesis 1291
mp-wp_genesis 1292 success: function() {
mp-wp_genesis 1293 var status = this.getStatus();
mp-wp_genesis 1294 return !status || (status >= 200 && status < 300);
mp-wp_genesis 1295 },
mp-wp_genesis 1296
mp-wp_genesis 1297 getStatus: function() {
mp-wp_genesis 1298 try {
mp-wp_genesis 1299 return this.transport.status || 0;
mp-wp_genesis 1300 } catch (e) { return 0 }
mp-wp_genesis 1301 },
mp-wp_genesis 1302
mp-wp_genesis 1303 respondToReadyState: function(readyState) {
mp-wp_genesis 1304 var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);
mp-wp_genesis 1305
mp-wp_genesis 1306 if (state == 'Complete') {
mp-wp_genesis 1307 try {
mp-wp_genesis 1308 this._complete = true;
mp-wp_genesis 1309 (this.options['on' + response.status]
mp-wp_genesis 1310 || this.options['on' + (this.success() ? 'Success' : 'Failure')]
mp-wp_genesis 1311 || Prototype.emptyFunction)(response, response.headerJSON);
mp-wp_genesis 1312 } catch (e) {
mp-wp_genesis 1313 this.dispatchException(e);
mp-wp_genesis 1314 }
mp-wp_genesis 1315
mp-wp_genesis 1316 var contentType = response.getHeader('Content-type');
mp-wp_genesis 1317 if (this.options.evalJS == 'force'
mp-wp_genesis 1318 || (this.options.evalJS && contentType
mp-wp_genesis 1319 && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
mp-wp_genesis 1320 this.evalResponse();
mp-wp_genesis 1321 }
mp-wp_genesis 1322
mp-wp_genesis 1323 try {
mp-wp_genesis 1324 (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);
mp-wp_genesis 1325 Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);
mp-wp_genesis 1326 } catch (e) {
mp-wp_genesis 1327 this.dispatchException(e);
mp-wp_genesis 1328 }
mp-wp_genesis 1329
mp-wp_genesis 1330 if (state == 'Complete') {
mp-wp_genesis 1331 // avoid memory leak in MSIE: clean up
mp-wp_genesis 1332 this.transport.onreadystatechange = Prototype.emptyFunction;
mp-wp_genesis 1333 }
mp-wp_genesis 1334 },
mp-wp_genesis 1335
mp-wp_genesis 1336 getHeader: function(name) {
mp-wp_genesis 1337 try {
mp-wp_genesis 1338 return this.transport.getResponseHeader(name);
mp-wp_genesis 1339 } catch (e) { return null }
mp-wp_genesis 1340 },
mp-wp_genesis 1341
mp-wp_genesis 1342 evalResponse: function() {
mp-wp_genesis 1343 try {
mp-wp_genesis 1344 return eval((this.transport.responseText || '').unfilterJSON());
mp-wp_genesis 1345 } catch (e) {
mp-wp_genesis 1346 this.dispatchException(e);
mp-wp_genesis 1347 }
mp-wp_genesis 1348 },
mp-wp_genesis 1349
mp-wp_genesis 1350 dispatchException: function(exception) {
mp-wp_genesis 1351 (this.options.onException || Prototype.emptyFunction)(this, exception);
mp-wp_genesis 1352 Ajax.Responders.dispatch('onException', this, exception);
mp-wp_genesis 1353 }
mp-wp_genesis 1354 });
mp-wp_genesis 1355
mp-wp_genesis 1356 Ajax.Request.Events =
mp-wp_genesis 1357 ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
mp-wp_genesis 1358
mp-wp_genesis 1359 Ajax.Response = Class.create({
mp-wp_genesis 1360 initialize: function(request){
mp-wp_genesis 1361 this.request = request;
mp-wp_genesis 1362 var transport = this.transport = request.transport,
mp-wp_genesis 1363 readyState = this.readyState = transport.readyState;
mp-wp_genesis 1364
mp-wp_genesis 1365 if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
mp-wp_genesis 1366 this.status = this.getStatus();
mp-wp_genesis 1367 this.statusText = this.getStatusText();
mp-wp_genesis 1368 this.responseText = String.interpret(transport.responseText);
mp-wp_genesis 1369 this.headerJSON = this._getHeaderJSON();
mp-wp_genesis 1370 }
mp-wp_genesis 1371
mp-wp_genesis 1372 if(readyState == 4) {
mp-wp_genesis 1373 var xml = transport.responseXML;
mp-wp_genesis 1374 this.responseXML = xml === undefined ? null : xml;
mp-wp_genesis 1375 this.responseJSON = this._getResponseJSON();
mp-wp_genesis 1376 }
mp-wp_genesis 1377 },
mp-wp_genesis 1378
mp-wp_genesis 1379 status: 0,
mp-wp_genesis 1380 statusText: '',
mp-wp_genesis 1381
mp-wp_genesis 1382 getStatus: Ajax.Request.prototype.getStatus,
mp-wp_genesis 1383
mp-wp_genesis 1384 getStatusText: function() {
mp-wp_genesis 1385 try {
mp-wp_genesis 1386 return this.transport.statusText || '';
mp-wp_genesis 1387 } catch (e) { return '' }
mp-wp_genesis 1388 },
mp-wp_genesis 1389
mp-wp_genesis 1390 getHeader: Ajax.Request.prototype.getHeader,
mp-wp_genesis 1391
mp-wp_genesis 1392 getAllHeaders: function() {
mp-wp_genesis 1393 try {
mp-wp_genesis 1394 return this.getAllResponseHeaders();
mp-wp_genesis 1395 } catch (e) { return null }
mp-wp_genesis 1396 },
mp-wp_genesis 1397
mp-wp_genesis 1398 getResponseHeader: function(name) {
mp-wp_genesis 1399 return this.transport.getResponseHeader(name);
mp-wp_genesis 1400 },
mp-wp_genesis 1401
mp-wp_genesis 1402 getAllResponseHeaders: function() {
mp-wp_genesis 1403 return this.transport.getAllResponseHeaders();
mp-wp_genesis 1404 },
mp-wp_genesis 1405
mp-wp_genesis 1406 _getHeaderJSON: function() {
mp-wp_genesis 1407 var json = this.getHeader('X-JSON');
mp-wp_genesis 1408 if (!json) return null;
mp-wp_genesis 1409 json = decodeURIComponent(escape(json));
mp-wp_genesis 1410 try {
mp-wp_genesis 1411 return json.evalJSON(this.request.options.sanitizeJSON);
mp-wp_genesis 1412 } catch (e) {
mp-wp_genesis 1413 this.request.dispatchException(e);
mp-wp_genesis 1414 }
mp-wp_genesis 1415 },
mp-wp_genesis 1416
mp-wp_genesis 1417 _getResponseJSON: function() {
mp-wp_genesis 1418 var options = this.request.options;
mp-wp_genesis 1419 if (!options.evalJSON || (options.evalJSON != 'force' &&
mp-wp_genesis 1420 !(this.getHeader('Content-type') || '').include('application/json')))
mp-wp_genesis 1421 return null;
mp-wp_genesis 1422 try {
mp-wp_genesis 1423 return this.transport.responseText.evalJSON(options.sanitizeJSON);
mp-wp_genesis 1424 } catch (e) {
mp-wp_genesis 1425 this.request.dispatchException(e);
mp-wp_genesis 1426 }
mp-wp_genesis 1427 }
mp-wp_genesis 1428 });
mp-wp_genesis 1429
mp-wp_genesis 1430 Ajax.Updater = Class.create(Ajax.Request, {
mp-wp_genesis 1431 initialize: function($super, container, url, options) {
mp-wp_genesis 1432 this.container = {
mp-wp_genesis 1433 success: (container.success || container),
mp-wp_genesis 1434 failure: (container.failure || (container.success ? null : container))
mp-wp_genesis 1435 };
mp-wp_genesis 1436
mp-wp_genesis 1437 options = options || { };
mp-wp_genesis 1438 var onComplete = options.onComplete;
mp-wp_genesis 1439 options.onComplete = (function(response, param) {
mp-wp_genesis 1440 this.updateContent(response.responseText);
mp-wp_genesis 1441 if (Object.isFunction(onComplete)) onComplete(response, param);
mp-wp_genesis 1442 }).bind(this);
mp-wp_genesis 1443
mp-wp_genesis 1444 $super(url, options);
mp-wp_genesis 1445 },
mp-wp_genesis 1446
mp-wp_genesis 1447 updateContent: function(responseText) {
mp-wp_genesis 1448 var receiver = this.container[this.success() ? 'success' : 'failure'],
mp-wp_genesis 1449 options = this.options;
mp-wp_genesis 1450
mp-wp_genesis 1451 if (!options.evalScripts) responseText = responseText.stripScripts();
mp-wp_genesis 1452
mp-wp_genesis 1453 if (receiver = $(receiver)) {
mp-wp_genesis 1454 if (options.insertion) {
mp-wp_genesis 1455 if (Object.isString(options.insertion)) {
mp-wp_genesis 1456 var insertion = { }; insertion[options.insertion] = responseText;
mp-wp_genesis 1457 receiver.insert(insertion);
mp-wp_genesis 1458 }
mp-wp_genesis 1459 else options.insertion(receiver, responseText);
mp-wp_genesis 1460 }
mp-wp_genesis 1461 else receiver.update(responseText);
mp-wp_genesis 1462 }
mp-wp_genesis 1463
mp-wp_genesis 1464 if (this.success()) {
mp-wp_genesis 1465 if (this.onComplete) this.onComplete.bind(this).defer();
mp-wp_genesis 1466 }
mp-wp_genesis 1467 }
mp-wp_genesis 1468 });
mp-wp_genesis 1469
mp-wp_genesis 1470 Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
mp-wp_genesis 1471 initialize: function($super, container, url, options) {
mp-wp_genesis 1472 $super(options);
mp-wp_genesis 1473 this.onComplete = this.options.onComplete;
mp-wp_genesis 1474
mp-wp_genesis 1475 this.frequency = (this.options.frequency || 2);
mp-wp_genesis 1476 this.decay = (this.options.decay || 1);
mp-wp_genesis 1477
mp-wp_genesis 1478 this.updater = { };
mp-wp_genesis 1479 this.container = container;
mp-wp_genesis 1480 this.url = url;
mp-wp_genesis 1481
mp-wp_genesis 1482 this.start();
mp-wp_genesis 1483 },
mp-wp_genesis 1484
mp-wp_genesis 1485 start: function() {
mp-wp_genesis 1486 this.options.onComplete = this.updateComplete.bind(this);
mp-wp_genesis 1487 this.onTimerEvent();
mp-wp_genesis 1488 },
mp-wp_genesis 1489
mp-wp_genesis 1490 stop: function() {
mp-wp_genesis 1491 this.updater.options.onComplete = undefined;
mp-wp_genesis 1492 clearTimeout(this.timer);
mp-wp_genesis 1493 (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
mp-wp_genesis 1494 },
mp-wp_genesis 1495
mp-wp_genesis 1496 updateComplete: function(response) {
mp-wp_genesis 1497 if (this.options.decay) {
mp-wp_genesis 1498 this.decay = (response.responseText == this.lastText ?
mp-wp_genesis 1499 this.decay * this.options.decay : 1);
mp-wp_genesis 1500
mp-wp_genesis 1501 this.lastText = response.responseText;
mp-wp_genesis 1502 }
mp-wp_genesis 1503 this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency);
mp-wp_genesis 1504 },
mp-wp_genesis 1505
mp-wp_genesis 1506 onTimerEvent: function() {
mp-wp_genesis 1507 this.updater = new Ajax.Updater(this.container, this.url, this.options);
mp-wp_genesis 1508 }
mp-wp_genesis 1509 });
mp-wp_genesis 1510 function $(element) {
mp-wp_genesis 1511 if (arguments.length > 1) {
mp-wp_genesis 1512 for (var i = 0, elements = [], length = arguments.length; i < length; i++)
mp-wp_genesis 1513 elements.push($(arguments[i]));
mp-wp_genesis 1514 return elements;
mp-wp_genesis 1515 }
mp-wp_genesis 1516 if (Object.isString(element))
mp-wp_genesis 1517 element = document.getElementById(element);
mp-wp_genesis 1518 return Element.extend(element);
mp-wp_genesis 1519 }
mp-wp_genesis 1520
mp-wp_genesis 1521 if (Prototype.BrowserFeatures.XPath) {
mp-wp_genesis 1522 document._getElementsByXPath = function(expression, parentElement) {
mp-wp_genesis 1523 var results = [];
mp-wp_genesis 1524 var query = document.evaluate(expression, $(parentElement) || document,
mp-wp_genesis 1525 null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
mp-wp_genesis 1526 for (var i = 0, length = query.snapshotLength; i < length; i++)
mp-wp_genesis 1527 results.push(Element.extend(query.snapshotItem(i)));
mp-wp_genesis 1528 return results;
mp-wp_genesis 1529 };
mp-wp_genesis 1530 }
mp-wp_genesis 1531
mp-wp_genesis 1532 /*--------------------------------------------------------------------------*/
mp-wp_genesis 1533
mp-wp_genesis 1534 if (!window.Node) var Node = { };
mp-wp_genesis 1535
mp-wp_genesis 1536 if (!Node.ELEMENT_NODE) {
mp-wp_genesis 1537 // DOM level 2 ECMAScript Language Binding
mp-wp_genesis 1538 Object.extend(Node, {
mp-wp_genesis 1539 ELEMENT_NODE: 1,
mp-wp_genesis 1540 ATTRIBUTE_NODE: 2,
mp-wp_genesis 1541 TEXT_NODE: 3,
mp-wp_genesis 1542 CDATA_SECTION_NODE: 4,
mp-wp_genesis 1543 ENTITY_REFERENCE_NODE: 5,
mp-wp_genesis 1544 ENTITY_NODE: 6,
mp-wp_genesis 1545 PROCESSING_INSTRUCTION_NODE: 7,
mp-wp_genesis 1546 COMMENT_NODE: 8,
mp-wp_genesis 1547 DOCUMENT_NODE: 9,
mp-wp_genesis 1548 DOCUMENT_TYPE_NODE: 10,
mp-wp_genesis 1549 DOCUMENT_FRAGMENT_NODE: 11,
mp-wp_genesis 1550 NOTATION_NODE: 12
mp-wp_genesis 1551 });
mp-wp_genesis 1552 }
mp-wp_genesis 1553
mp-wp_genesis 1554 (function() {
mp-wp_genesis 1555 var element = this.Element;
mp-wp_genesis 1556 this.Element = function(tagName, attributes) {
mp-wp_genesis 1557 attributes = attributes || { };
mp-wp_genesis 1558 tagName = tagName.toLowerCase();
mp-wp_genesis 1559 var cache = Element.cache;
mp-wp_genesis 1560 if (Prototype.Browser.IE && attributes.name) {
mp-wp_genesis 1561 tagName = '<' + tagName + ' name="' + attributes.name + '">';
mp-wp_genesis 1562 delete attributes.name;
mp-wp_genesis 1563 return Element.writeAttribute(document.createElement(tagName), attributes);
mp-wp_genesis 1564 }
mp-wp_genesis 1565 if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
mp-wp_genesis 1566 return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);
mp-wp_genesis 1567 };
mp-wp_genesis 1568 Object.extend(this.Element, element || { });
mp-wp_genesis 1569 }).call(window);
mp-wp_genesis 1570
mp-wp_genesis 1571 Element.cache = { };
mp-wp_genesis 1572
mp-wp_genesis 1573 Element.Methods = {
mp-wp_genesis 1574 visible: function(element) {
mp-wp_genesis 1575 return $(element).style.display != 'none';
mp-wp_genesis 1576 },
mp-wp_genesis 1577
mp-wp_genesis 1578 toggle: function(element) {
mp-wp_genesis 1579 element = $(element);
mp-wp_genesis 1580 Element[Element.visible(element) ? 'hide' : 'show'](element);
mp-wp_genesis 1581 return element;
mp-wp_genesis 1582 },
mp-wp_genesis 1583
mp-wp_genesis 1584 hide: function(element) {
mp-wp_genesis 1585 $(element).style.display = 'none';
mp-wp_genesis 1586 return element;
mp-wp_genesis 1587 },
mp-wp_genesis 1588
mp-wp_genesis 1589 show: function(element) {
mp-wp_genesis 1590 $(element).style.display = '';
mp-wp_genesis 1591 return element;
mp-wp_genesis 1592 },
mp-wp_genesis 1593
mp-wp_genesis 1594 remove: function(element) {
mp-wp_genesis 1595 element = $(element);
mp-wp_genesis 1596 element.parentNode.removeChild(element);
mp-wp_genesis 1597 return element;
mp-wp_genesis 1598 },
mp-wp_genesis 1599
mp-wp_genesis 1600 update: function(element, content) {
mp-wp_genesis 1601 element = $(element);
mp-wp_genesis 1602 if (content && content.toElement) content = content.toElement();
mp-wp_genesis 1603 if (Object.isElement(content)) return element.update().insert(content);
mp-wp_genesis 1604 content = Object.toHTML(content);
mp-wp_genesis 1605 element.innerHTML = content.stripScripts();
mp-wp_genesis 1606 content.evalScripts.bind(content).defer();
mp-wp_genesis 1607 return element;
mp-wp_genesis 1608 },
mp-wp_genesis 1609
mp-wp_genesis 1610 replace: function(element, content) {
mp-wp_genesis 1611 element = $(element);
mp-wp_genesis 1612 if (content && content.toElement) content = content.toElement();
mp-wp_genesis 1613 else if (!Object.isElement(content)) {
mp-wp_genesis 1614 content = Object.toHTML(content);
mp-wp_genesis 1615 var range = element.ownerDocument.createRange();
mp-wp_genesis 1616 range.selectNode(element);
mp-wp_genesis 1617 content.evalScripts.bind(content).defer();
mp-wp_genesis 1618 content = range.createContextualFragment(content.stripScripts());
mp-wp_genesis 1619 }
mp-wp_genesis 1620 element.parentNode.replaceChild(content, element);
mp-wp_genesis 1621 return element;
mp-wp_genesis 1622 },
mp-wp_genesis 1623
mp-wp_genesis 1624 insert: function(element, insertions) {
mp-wp_genesis 1625 element = $(element);
mp-wp_genesis 1626
mp-wp_genesis 1627 if (Object.isString(insertions) || Object.isNumber(insertions) ||
mp-wp_genesis 1628 Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
mp-wp_genesis 1629 insertions = {bottom:insertions};
mp-wp_genesis 1630
mp-wp_genesis 1631 var content, t, range;
mp-wp_genesis 1632
mp-wp_genesis 1633 for (position in insertions) {
mp-wp_genesis 1634 content = insertions[position];
mp-wp_genesis 1635 position = position.toLowerCase();
mp-wp_genesis 1636 t = Element._insertionTranslations[position];
mp-wp_genesis 1637
mp-wp_genesis 1638 if (content && content.toElement) content = content.toElement();
mp-wp_genesis 1639 if (Object.isElement(content)) {
mp-wp_genesis 1640 t.insert(element, content);
mp-wp_genesis 1641 continue;
mp-wp_genesis 1642 }
mp-wp_genesis 1643
mp-wp_genesis 1644 content = Object.toHTML(content);
mp-wp_genesis 1645
mp-wp_genesis 1646 range = element.ownerDocument.createRange();
mp-wp_genesis 1647 t.initializeRange(element, range);
mp-wp_genesis 1648 t.insert(element, range.createContextualFragment(content.stripScripts()));
mp-wp_genesis 1649
mp-wp_genesis 1650 content.evalScripts.bind(content).defer();
mp-wp_genesis 1651 }
mp-wp_genesis 1652
mp-wp_genesis 1653 return element;
mp-wp_genesis 1654 },
mp-wp_genesis 1655
mp-wp_genesis 1656 wrap: function(element, wrapper, attributes) {
mp-wp_genesis 1657 element = $(element);
mp-wp_genesis 1658 if (Object.isElement(wrapper))
mp-wp_genesis 1659 $(wrapper).writeAttribute(attributes || { });
mp-wp_genesis 1660 else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes);
mp-wp_genesis 1661 else wrapper = new Element('div', wrapper);
mp-wp_genesis 1662 if (element.parentNode)
mp-wp_genesis 1663 element.parentNode.replaceChild(wrapper, element);
mp-wp_genesis 1664 wrapper.appendChild(element);
mp-wp_genesis 1665 return wrapper;
mp-wp_genesis 1666 },
mp-wp_genesis 1667
mp-wp_genesis 1668 inspect: function(element) {
mp-wp_genesis 1669 element = $(element);
mp-wp_genesis 1670 var result = '<' + element.tagName.toLowerCase();
mp-wp_genesis 1671 $H({'id': 'id', 'className': 'class'}).each(function(pair) {
mp-wp_genesis 1672 var property = pair.first(), attribute = pair.last();
mp-wp_genesis 1673 var value = (element[property] || '').toString();
mp-wp_genesis 1674 if (value) result += ' ' + attribute + '=' + value.inspect(true);
mp-wp_genesis 1675 });
mp-wp_genesis 1676 return result + '>';
mp-wp_genesis 1677 },
mp-wp_genesis 1678
mp-wp_genesis 1679 recursivelyCollect: function(element, property) {
mp-wp_genesis 1680 element = $(element);
mp-wp_genesis 1681 var elements = [];
mp-wp_genesis 1682 while (element = element[property])
mp-wp_genesis 1683 if (element.nodeType == 1)
mp-wp_genesis 1684 elements.push(Element.extend(element));
mp-wp_genesis 1685 return elements;
mp-wp_genesis 1686 },
mp-wp_genesis 1687
mp-wp_genesis 1688 ancestors: function(element) {
mp-wp_genesis 1689 return $(element).recursivelyCollect('parentNode');
mp-wp_genesis 1690 },
mp-wp_genesis 1691
mp-wp_genesis 1692 descendants: function(element) {
mp-wp_genesis 1693 return $A($(element).getElementsByTagName('*')).each(Element.extend);
mp-wp_genesis 1694 },
mp-wp_genesis 1695
mp-wp_genesis 1696 firstDescendant: function(element) {
mp-wp_genesis 1697 element = $(element).firstChild;
mp-wp_genesis 1698 while (element && element.nodeType != 1) element = element.nextSibling;
mp-wp_genesis 1699 return $(element);
mp-wp_genesis 1700 },
mp-wp_genesis 1701
mp-wp_genesis 1702 immediateDescendants: function(element) {
mp-wp_genesis 1703 if (!(element = $(element).firstChild)) return [];
mp-wp_genesis 1704 while (element && element.nodeType != 1) element = element.nextSibling;
mp-wp_genesis 1705 if (element) return [element].concat($(element).nextSiblings());
mp-wp_genesis 1706 return [];
mp-wp_genesis 1707 },
mp-wp_genesis 1708
mp-wp_genesis 1709 previousSiblings: function(element) {
mp-wp_genesis 1710 return $(element).recursivelyCollect('previousSibling');
mp-wp_genesis 1711 },
mp-wp_genesis 1712
mp-wp_genesis 1713 nextSiblings: function(element) {
mp-wp_genesis 1714 return $(element).recursivelyCollect('nextSibling');
mp-wp_genesis 1715 },
mp-wp_genesis 1716
mp-wp_genesis 1717 siblings: function(element) {
mp-wp_genesis 1718 element = $(element);
mp-wp_genesis 1719 return element.previousSiblings().reverse().concat(element.nextSiblings());
mp-wp_genesis 1720 },
mp-wp_genesis 1721
mp-wp_genesis 1722 match: function(element, selector) {
mp-wp_genesis 1723 if (Object.isString(selector))
mp-wp_genesis 1724 selector = new Selector(selector);
mp-wp_genesis 1725 return selector.match($(element));
mp-wp_genesis 1726 },
mp-wp_genesis 1727
mp-wp_genesis 1728 up: function(element, expression, index) {
mp-wp_genesis 1729 element = $(element);
mp-wp_genesis 1730 if (arguments.length == 1) return $(element.parentNode);
mp-wp_genesis 1731 var ancestors = element.ancestors();
mp-wp_genesis 1732 return expression ? Selector.findElement(ancestors, expression, index) :
mp-wp_genesis 1733 ancestors[index || 0];
mp-wp_genesis 1734 },
mp-wp_genesis 1735
mp-wp_genesis 1736 down: function(element, expression, index) {
mp-wp_genesis 1737 element = $(element);
mp-wp_genesis 1738 if (arguments.length == 1) return element.firstDescendant();
mp-wp_genesis 1739 var descendants = element.descendants();
mp-wp_genesis 1740 return expression ? Selector.findElement(descendants, expression, index) :
mp-wp_genesis 1741 descendants[index || 0];
mp-wp_genesis 1742 },
mp-wp_genesis 1743
mp-wp_genesis 1744 previous: function(element, expression, index) {
mp-wp_genesis 1745 element = $(element);
mp-wp_genesis 1746 if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));
mp-wp_genesis 1747 var previousSiblings = element.previousSiblings();
mp-wp_genesis 1748 return expression ? Selector.findElement(previousSiblings, expression, index) :
mp-wp_genesis 1749 previousSiblings[index || 0];
mp-wp_genesis 1750 },
mp-wp_genesis 1751
mp-wp_genesis 1752 next: function(element, expression, index) {
mp-wp_genesis 1753 element = $(element);
mp-wp_genesis 1754 if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));
mp-wp_genesis 1755 var nextSiblings = element.nextSiblings();
mp-wp_genesis 1756 return expression ? Selector.findElement(nextSiblings, expression, index) :
mp-wp_genesis 1757 nextSiblings[index || 0];
mp-wp_genesis 1758 },
mp-wp_genesis 1759
mp-wp_genesis 1760 select: function() {
mp-wp_genesis 1761 var args = $A(arguments), element = $(args.shift());
mp-wp_genesis 1762 return Selector.findChildElements(element, args);
mp-wp_genesis 1763 },
mp-wp_genesis 1764
mp-wp_genesis 1765 adjacent: function() {
mp-wp_genesis 1766 var args = $A(arguments), element = $(args.shift());
mp-wp_genesis 1767 return Selector.findChildElements(element.parentNode, args).without(element);
mp-wp_genesis 1768 },
mp-wp_genesis 1769
mp-wp_genesis 1770 identify: function(element) {
mp-wp_genesis 1771 element = $(element);
mp-wp_genesis 1772 var id = element.readAttribute('id'), self = arguments.callee;
mp-wp_genesis 1773 if (id) return id;
mp-wp_genesis 1774 do { id = 'anonymous_element_' + self.counter++ } while ($(id));
mp-wp_genesis 1775 element.writeAttribute('id', id);
mp-wp_genesis 1776 return id;
mp-wp_genesis 1777 },
mp-wp_genesis 1778
mp-wp_genesis 1779 readAttribute: function(element, name) {
mp-wp_genesis 1780 element = $(element);
mp-wp_genesis 1781 if (Prototype.Browser.IE) {
mp-wp_genesis 1782 var t = Element._attributeTranslations.read;
mp-wp_genesis 1783 if (t.values[name]) return t.values[name](element, name);
mp-wp_genesis 1784 if (t.names[name]) name = t.names[name];
mp-wp_genesis 1785 if (name.include(':')) {
mp-wp_genesis 1786 return (!element.attributes || !element.attributes[name]) ? null :
mp-wp_genesis 1787 element.attributes[name].value;
mp-wp_genesis 1788 }
mp-wp_genesis 1789 }
mp-wp_genesis 1790 return element.getAttribute(name);
mp-wp_genesis 1791 },
mp-wp_genesis 1792
mp-wp_genesis 1793 writeAttribute: function(element, name, value) {
mp-wp_genesis 1794 element = $(element);
mp-wp_genesis 1795 var attributes = { }, t = Element._attributeTranslations.write;
mp-wp_genesis 1796
mp-wp_genesis 1797 if (typeof name == 'object') attributes = name;
mp-wp_genesis 1798 else attributes[name] = value === undefined ? true : value;
mp-wp_genesis 1799
mp-wp_genesis 1800 for (var attr in attributes) {
mp-wp_genesis 1801 var name = t.names[attr] || attr, value = attributes[attr];
mp-wp_genesis 1802 if (t.values[attr]) name = t.values[attr](element, value);
mp-wp_genesis 1803 if (value === false || value === null)
mp-wp_genesis 1804 element.removeAttribute(name);
mp-wp_genesis 1805 else if (value === true)
mp-wp_genesis 1806 element.setAttribute(name, name);
mp-wp_genesis 1807 else element.setAttribute(name, value);
mp-wp_genesis 1808 }
mp-wp_genesis 1809 return element;
mp-wp_genesis 1810 },
mp-wp_genesis 1811
mp-wp_genesis 1812 getHeight: function(element) {
mp-wp_genesis 1813 return $(element).getDimensions().height;
mp-wp_genesis 1814 },
mp-wp_genesis 1815
mp-wp_genesis 1816 getWidth: function(element) {
mp-wp_genesis 1817 return $(element).getDimensions().width;
mp-wp_genesis 1818 },
mp-wp_genesis 1819
mp-wp_genesis 1820 classNames: function(element) {
mp-wp_genesis 1821 return new Element.ClassNames(element);
mp-wp_genesis 1822 },
mp-wp_genesis 1823
mp-wp_genesis 1824 hasClassName: function(element, className) {
mp-wp_genesis 1825 if (!(element = $(element))) return;
mp-wp_genesis 1826 var elementClassName = element.className;
mp-wp_genesis 1827 return (elementClassName.length > 0 && (elementClassName == className ||
mp-wp_genesis 1828 new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
mp-wp_genesis 1829 },
mp-wp_genesis 1830
mp-wp_genesis 1831 addClassName: function(element, className) {
mp-wp_genesis 1832 if (!(element = $(element))) return;
mp-wp_genesis 1833 if (!element.hasClassName(className))
mp-wp_genesis 1834 element.className += (element.className ? ' ' : '') + className;
mp-wp_genesis 1835 return element;
mp-wp_genesis 1836 },
mp-wp_genesis 1837
mp-wp_genesis 1838 removeClassName: function(element, className) {
mp-wp_genesis 1839 if (!(element = $(element))) return;
mp-wp_genesis 1840 element.className = element.className.replace(
mp-wp_genesis 1841 new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
mp-wp_genesis 1842 return element;
mp-wp_genesis 1843 },
mp-wp_genesis 1844
mp-wp_genesis 1845 toggleClassName: function(element, className) {
mp-wp_genesis 1846 if (!(element = $(element))) return;
mp-wp_genesis 1847 return element[element.hasClassName(className) ?
mp-wp_genesis 1848 'removeClassName' : 'addClassName'](className);
mp-wp_genesis 1849 },
mp-wp_genesis 1850
mp-wp_genesis 1851 // removes whitespace-only text node children
mp-wp_genesis 1852 cleanWhitespace: function(element) {
mp-wp_genesis 1853 element = $(element);
mp-wp_genesis 1854 var node = element.firstChild;
mp-wp_genesis 1855 while (node) {
mp-wp_genesis 1856 var nextNode = node.nextSibling;
mp-wp_genesis 1857 if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
mp-wp_genesis 1858 element.removeChild(node);
mp-wp_genesis 1859 node = nextNode;
mp-wp_genesis 1860 }
mp-wp_genesis 1861 return element;
mp-wp_genesis 1862 },
mp-wp_genesis 1863
mp-wp_genesis 1864 empty: function(element) {
mp-wp_genesis 1865 return $(element).innerHTML.blank();
mp-wp_genesis 1866 },
mp-wp_genesis 1867
mp-wp_genesis 1868 descendantOf: function(element, ancestor) {
mp-wp_genesis 1869 element = $(element), ancestor = $(ancestor);
mp-wp_genesis 1870
mp-wp_genesis 1871 if (element.compareDocumentPosition)
mp-wp_genesis 1872 return (element.compareDocumentPosition(ancestor) & 8) === 8;
mp-wp_genesis 1873
mp-wp_genesis 1874 if (element.sourceIndex && !Prototype.Browser.Opera) {
mp-wp_genesis 1875 var e = element.sourceIndex, a = ancestor.sourceIndex,
mp-wp_genesis 1876 nextAncestor = ancestor.nextSibling;
mp-wp_genesis 1877 if (!nextAncestor) {
mp-wp_genesis 1878 do { ancestor = ancestor.parentNode; }
mp-wp_genesis 1879 while (!(nextAncestor = ancestor.nextSibling) && ancestor.parentNode);
mp-wp_genesis 1880 }
mp-wp_genesis 1881 if (nextAncestor) return (e > a && e < nextAncestor.sourceIndex);
mp-wp_genesis 1882 }
mp-wp_genesis 1883
mp-wp_genesis 1884 while (element = element.parentNode)
mp-wp_genesis 1885 if (element == ancestor) return true;
mp-wp_genesis 1886 return false;
mp-wp_genesis 1887 },
mp-wp_genesis 1888
mp-wp_genesis 1889 scrollTo: function(element) {
mp-wp_genesis 1890 element = $(element);
mp-wp_genesis 1891 var pos = element.cumulativeOffset();
mp-wp_genesis 1892 window.scrollTo(pos[0], pos[1]);
mp-wp_genesis 1893 return element;
mp-wp_genesis 1894 },
mp-wp_genesis 1895
mp-wp_genesis 1896 getStyle: function(element, style) {
mp-wp_genesis 1897 element = $(element);
mp-wp_genesis 1898 style = style == 'float' ? 'cssFloat' : style.camelize();
mp-wp_genesis 1899 var value = element.style[style];
mp-wp_genesis 1900 if (!value) {
mp-wp_genesis 1901 var css = document.defaultView.getComputedStyle(element, null);
mp-wp_genesis 1902 value = css ? css[style] : null;
mp-wp_genesis 1903 }
mp-wp_genesis 1904 if (style == 'opacity') return value ? parseFloat(value) : 1.0;
mp-wp_genesis 1905 return value == 'auto' ? null : value;
mp-wp_genesis 1906 },
mp-wp_genesis 1907
mp-wp_genesis 1908 getOpacity: function(element) {
mp-wp_genesis 1909 return $(element).getStyle('opacity');
mp-wp_genesis 1910 },
mp-wp_genesis 1911
mp-wp_genesis 1912 setStyle: function(element, styles) {
mp-wp_genesis 1913 element = $(element);
mp-wp_genesis 1914 var elementStyle = element.style, match;
mp-wp_genesis 1915 if (Object.isString(styles)) {
mp-wp_genesis 1916 element.style.cssText += ';' + styles;
mp-wp_genesis 1917 return styles.include('opacity') ?
mp-wp_genesis 1918 element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;
mp-wp_genesis 1919 }
mp-wp_genesis 1920 for (var property in styles)
mp-wp_genesis 1921 if (property == 'opacity') element.setOpacity(styles[property]);
mp-wp_genesis 1922 else
mp-wp_genesis 1923 elementStyle[(property == 'float' || property == 'cssFloat') ?
mp-wp_genesis 1924 (elementStyle.styleFloat === undefined ? 'cssFloat' : 'styleFloat') :
mp-wp_genesis 1925 property] = styles[property];
mp-wp_genesis 1926
mp-wp_genesis 1927 return element;
mp-wp_genesis 1928 },
mp-wp_genesis 1929
mp-wp_genesis 1930 setOpacity: function(element, value) {
mp-wp_genesis 1931 element = $(element);
mp-wp_genesis 1932 element.style.opacity = (value == 1 || value === '') ? '' :
mp-wp_genesis 1933 (value < 0.00001) ? 0 : value;
mp-wp_genesis 1934 return element;
mp-wp_genesis 1935 },
mp-wp_genesis 1936
mp-wp_genesis 1937 getDimensions: function(element) {
mp-wp_genesis 1938 element = $(element);
mp-wp_genesis 1939 var display = $(element).getStyle('display');
mp-wp_genesis 1940 if (display != 'none' && display != null) // Safari bug
mp-wp_genesis 1941 return {width: element.offsetWidth, height: element.offsetHeight};
mp-wp_genesis 1942
mp-wp_genesis 1943 // All *Width and *Height properties give 0 on elements with display none,
mp-wp_genesis 1944 // so enable the element temporarily
mp-wp_genesis 1945 var els = element.style;
mp-wp_genesis 1946 var originalVisibility = els.visibility;
mp-wp_genesis 1947 var originalPosition = els.position;
mp-wp_genesis 1948 var originalDisplay = els.display;
mp-wp_genesis 1949 els.visibility = 'hidden';
mp-wp_genesis 1950 els.position = 'absolute';
mp-wp_genesis 1951 els.display = 'block';
mp-wp_genesis 1952 var originalWidth = element.clientWidth;
mp-wp_genesis 1953 var originalHeight = element.clientHeight;
mp-wp_genesis 1954 els.display = originalDisplay;
mp-wp_genesis 1955 els.position = originalPosition;
mp-wp_genesis 1956 els.visibility = originalVisibility;
mp-wp_genesis 1957 return {width: originalWidth, height: originalHeight};
mp-wp_genesis 1958 },
mp-wp_genesis 1959
mp-wp_genesis 1960 makePositioned: function(element) {
mp-wp_genesis 1961 element = $(element);
mp-wp_genesis 1962 var pos = Element.getStyle(element, 'position');
mp-wp_genesis 1963 if (pos == 'static' || !pos) {
mp-wp_genesis 1964 element._madePositioned = true;
mp-wp_genesis 1965 element.style.position = 'relative';
mp-wp_genesis 1966 // Opera returns the offset relative to the positioning context, when an
mp-wp_genesis 1967 // element is position relative but top and left have not been defined
mp-wp_genesis 1968 if (window.opera) {
mp-wp_genesis 1969 element.style.top = 0;
mp-wp_genesis 1970 element.style.left = 0;
mp-wp_genesis 1971 }
mp-wp_genesis 1972 }
mp-wp_genesis 1973 return element;
mp-wp_genesis 1974 },
mp-wp_genesis 1975
mp-wp_genesis 1976 undoPositioned: function(element) {
mp-wp_genesis 1977 element = $(element);
mp-wp_genesis 1978 if (element._madePositioned) {
mp-wp_genesis 1979 element._madePositioned = undefined;
mp-wp_genesis 1980 element.style.position =
mp-wp_genesis 1981 element.style.top =
mp-wp_genesis 1982 element.style.left =
mp-wp_genesis 1983 element.style.bottom =
mp-wp_genesis 1984 element.style.right = '';
mp-wp_genesis 1985 }
mp-wp_genesis 1986 return element;
mp-wp_genesis 1987 },
mp-wp_genesis 1988
mp-wp_genesis 1989 makeClipping: function(element) {
mp-wp_genesis 1990 element = $(element);
mp-wp_genesis 1991 if (element._overflow) return element;
mp-wp_genesis 1992 element._overflow = Element.getStyle(element, 'overflow') || 'auto';
mp-wp_genesis 1993 if (element._overflow !== 'hidden')
mp-wp_genesis 1994 element.style.overflow = 'hidden';
mp-wp_genesis 1995 return element;
mp-wp_genesis 1996 },
mp-wp_genesis 1997
mp-wp_genesis 1998 undoClipping: function(element) {
mp-wp_genesis 1999 element = $(element);
mp-wp_genesis 2000 if (!element._overflow) return element;
mp-wp_genesis 2001 element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
mp-wp_genesis 2002 element._overflow = null;
mp-wp_genesis 2003 return element;
mp-wp_genesis 2004 },
mp-wp_genesis 2005
mp-wp_genesis 2006 cumulativeOffset: function(element) {
mp-wp_genesis 2007 var valueT = 0, valueL = 0;
mp-wp_genesis 2008 do {
mp-wp_genesis 2009 valueT += element.offsetTop || 0;
mp-wp_genesis 2010 valueL += element.offsetLeft || 0;
mp-wp_genesis 2011 element = element.offsetParent;
mp-wp_genesis 2012 } while (element);
mp-wp_genesis 2013 return Element._returnOffset(valueL, valueT);
mp-wp_genesis 2014 },
mp-wp_genesis 2015
mp-wp_genesis 2016 positionedOffset: function(element) {
mp-wp_genesis 2017 var valueT = 0, valueL = 0;
mp-wp_genesis 2018 do {
mp-wp_genesis 2019 valueT += element.offsetTop || 0;
mp-wp_genesis 2020 valueL += element.offsetLeft || 0;
mp-wp_genesis 2021 element = element.offsetParent;
mp-wp_genesis 2022 if (element) {
mp-wp_genesis 2023 if (element.tagName == 'BODY') break;
mp-wp_genesis 2024 var p = Element.getStyle(element, 'position');
mp-wp_genesis 2025 if (p == 'relative' || p == 'absolute') break;
mp-wp_genesis 2026 }
mp-wp_genesis 2027 } while (element);
mp-wp_genesis 2028 return Element._returnOffset(valueL, valueT);
mp-wp_genesis 2029 },
mp-wp_genesis 2030
mp-wp_genesis 2031 absolutize: function(element) {
mp-wp_genesis 2032 element = $(element);
mp-wp_genesis 2033 if (element.getStyle('position') == 'absolute') return;
mp-wp_genesis 2034 // Position.prepare(); // To be done manually by Scripty when it needs it.
mp-wp_genesis 2035
mp-wp_genesis 2036 var offsets = element.positionedOffset();
mp-wp_genesis 2037 var top = offsets[1];
mp-wp_genesis 2038 var left = offsets[0];
mp-wp_genesis 2039 var width = element.clientWidth;
mp-wp_genesis 2040 var height = element.clientHeight;
mp-wp_genesis 2041
mp-wp_genesis 2042 element._originalLeft = left - parseFloat(element.style.left || 0);
mp-wp_genesis 2043 element._originalTop = top - parseFloat(element.style.top || 0);
mp-wp_genesis 2044 element._originalWidth = element.style.width;
mp-wp_genesis 2045 element._originalHeight = element.style.height;
mp-wp_genesis 2046
mp-wp_genesis 2047 element.style.position = 'absolute';
mp-wp_genesis 2048 element.style.top = top + 'px';
mp-wp_genesis 2049 element.style.left = left + 'px';
mp-wp_genesis 2050 element.style.width = width + 'px';
mp-wp_genesis 2051 element.style.height = height + 'px';
mp-wp_genesis 2052 return element;
mp-wp_genesis 2053 },
mp-wp_genesis 2054
mp-wp_genesis 2055 relativize: function(element) {
mp-wp_genesis 2056 element = $(element);
mp-wp_genesis 2057 if (element.getStyle('position') == 'relative') return;
mp-wp_genesis 2058 // Position.prepare(); // To be done manually by Scripty when it needs it.
mp-wp_genesis 2059
mp-wp_genesis 2060 element.style.position = 'relative';
mp-wp_genesis 2061 var top = parseFloat(element.style.top || 0) - (element._originalTop || 0);
mp-wp_genesis 2062 var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
mp-wp_genesis 2063
mp-wp_genesis 2064 element.style.top = top + 'px';
mp-wp_genesis 2065 element.style.left = left + 'px';
mp-wp_genesis 2066 element.style.height = element._originalHeight;
mp-wp_genesis 2067 element.style.width = element._originalWidth;
mp-wp_genesis 2068 return element;
mp-wp_genesis 2069 },
mp-wp_genesis 2070
mp-wp_genesis 2071 cumulativeScrollOffset: function(element) {
mp-wp_genesis 2072 var valueT = 0, valueL = 0;
mp-wp_genesis 2073 do {
mp-wp_genesis 2074 valueT += element.scrollTop || 0;
mp-wp_genesis 2075 valueL += element.scrollLeft || 0;
mp-wp_genesis 2076 element = element.parentNode;
mp-wp_genesis 2077 } while (element);
mp-wp_genesis 2078 return Element._returnOffset(valueL, valueT);
mp-wp_genesis 2079 },
mp-wp_genesis 2080
mp-wp_genesis 2081 getOffsetParent: function(element) {
mp-wp_genesis 2082 if (element.offsetParent) return $(element.offsetParent);
mp-wp_genesis 2083 if (element == document.body) return $(element);
mp-wp_genesis 2084
mp-wp_genesis 2085 while ((element = element.parentNode) && element != document.body)
mp-wp_genesis 2086 if (Element.getStyle(element, 'position') != 'static')
mp-wp_genesis 2087 return $(element);
mp-wp_genesis 2088
mp-wp_genesis 2089 return $(document.body);
mp-wp_genesis 2090 },
mp-wp_genesis 2091
mp-wp_genesis 2092 viewportOffset: function(forElement) {
mp-wp_genesis 2093 var valueT = 0, valueL = 0;
mp-wp_genesis 2094
mp-wp_genesis 2095 var element = forElement;
mp-wp_genesis 2096 do {
mp-wp_genesis 2097 valueT += element.offsetTop || 0;
mp-wp_genesis 2098 valueL += element.offsetLeft || 0;
mp-wp_genesis 2099
mp-wp_genesis 2100 // Safari fix
mp-wp_genesis 2101 if (element.offsetParent == document.body &&
mp-wp_genesis 2102 Element.getStyle(element, 'position') == 'absolute') break;
mp-wp_genesis 2103
mp-wp_genesis 2104 } while (element = element.offsetParent);
mp-wp_genesis 2105
mp-wp_genesis 2106 element = forElement;
mp-wp_genesis 2107 do {
mp-wp_genesis 2108 if (!Prototype.Browser.Opera || element.tagName == 'BODY') {
mp-wp_genesis 2109 valueT -= element.scrollTop || 0;
mp-wp_genesis 2110 valueL -= element.scrollLeft || 0;
mp-wp_genesis 2111 }
mp-wp_genesis 2112 } while (element = element.parentNode);
mp-wp_genesis 2113
mp-wp_genesis 2114 return Element._returnOffset(valueL, valueT);
mp-wp_genesis 2115 },
mp-wp_genesis 2116
mp-wp_genesis 2117 clonePosition: function(element, source) {
mp-wp_genesis 2118 var options = Object.extend({
mp-wp_genesis 2119 setLeft: true,
mp-wp_genesis 2120 setTop: true,
mp-wp_genesis 2121 setWidth: true,
mp-wp_genesis 2122 setHeight: true,
mp-wp_genesis 2123 offsetTop: 0,
mp-wp_genesis 2124 offsetLeft: 0
mp-wp_genesis 2125 }, arguments[2] || { });
mp-wp_genesis 2126
mp-wp_genesis 2127 // find page position of source
mp-wp_genesis 2128 source = $(source);
mp-wp_genesis 2129 var p = source.viewportOffset();
mp-wp_genesis 2130
mp-wp_genesis 2131 // find coordinate system to use
mp-wp_genesis 2132 element = $(element);
mp-wp_genesis 2133 var delta = [0, 0];
mp-wp_genesis 2134 var parent = null;
mp-wp_genesis 2135 // delta [0,0] will do fine with position: fixed elements,
mp-wp_genesis 2136 // position:absolute needs offsetParent deltas
mp-wp_genesis 2137 if (Element.getStyle(element, 'position') == 'absolute') {
mp-wp_genesis 2138 parent = element.getOffsetParent();
mp-wp_genesis 2139 delta = parent.viewportOffset();
mp-wp_genesis 2140 }
mp-wp_genesis 2141
mp-wp_genesis 2142 // correct by body offsets (fixes Safari)
mp-wp_genesis 2143 if (parent == document.body) {
mp-wp_genesis 2144 delta[0] -= document.body.offsetLeft;
mp-wp_genesis 2145 delta[1] -= document.body.offsetTop;
mp-wp_genesis 2146 }
mp-wp_genesis 2147
mp-wp_genesis 2148 // set position
mp-wp_genesis 2149 if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px';
mp-wp_genesis 2150 if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px';
mp-wp_genesis 2151 if (options.setWidth) element.style.width = source.offsetWidth + 'px';
mp-wp_genesis 2152 if (options.setHeight) element.style.height = source.offsetHeight + 'px';
mp-wp_genesis 2153 return element;
mp-wp_genesis 2154 }
mp-wp_genesis 2155 };
mp-wp_genesis 2156
mp-wp_genesis 2157 Element.Methods.identify.counter = 1;
mp-wp_genesis 2158
mp-wp_genesis 2159 Object.extend(Element.Methods, {
mp-wp_genesis 2160 getElementsBySelector: Element.Methods.select,
mp-wp_genesis 2161 childElements: Element.Methods.immediateDescendants
mp-wp_genesis 2162 });
mp-wp_genesis 2163
mp-wp_genesis 2164 Element._attributeTranslations = {
mp-wp_genesis 2165 write: {
mp-wp_genesis 2166 names: {
mp-wp_genesis 2167 className: 'class',
mp-wp_genesis 2168 htmlFor: 'for'
mp-wp_genesis 2169 },
mp-wp_genesis 2170 values: { }
mp-wp_genesis 2171 }
mp-wp_genesis 2172 };
mp-wp_genesis 2173
mp-wp_genesis 2174
mp-wp_genesis 2175 if (!document.createRange || Prototype.Browser.Opera) {
mp-wp_genesis 2176 Element.Methods.insert = function(element, insertions) {
mp-wp_genesis 2177 element = $(element);
mp-wp_genesis 2178
mp-wp_genesis 2179 if (Object.isString(insertions) || Object.isNumber(insertions) ||
mp-wp_genesis 2180 Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
mp-wp_genesis 2181 insertions = { bottom: insertions };
mp-wp_genesis 2182
mp-wp_genesis 2183 var t = Element._insertionTranslations, content, position, pos, tagName;
mp-wp_genesis 2184
mp-wp_genesis 2185 for (position in insertions) {
mp-wp_genesis 2186 content = insertions[position];
mp-wp_genesis 2187 position = position.toLowerCase();
mp-wp_genesis 2188 pos = t[position];
mp-wp_genesis 2189
mp-wp_genesis 2190 if (content && content.toElement) content = content.toElement();
mp-wp_genesis 2191 if (Object.isElement(content)) {
mp-wp_genesis 2192 pos.insert(element, content);
mp-wp_genesis 2193 continue;
mp-wp_genesis 2194 }
mp-wp_genesis 2195
mp-wp_genesis 2196 content = Object.toHTML(content);
mp-wp_genesis 2197 tagName = ((position == 'before' || position == 'after')
mp-wp_genesis 2198 ? element.parentNode : element).tagName.toUpperCase();
mp-wp_genesis 2199
mp-wp_genesis 2200 if (t.tags[tagName]) {
mp-wp_genesis 2201 var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
mp-wp_genesis 2202 if (position == 'top' || position == 'after') fragments.reverse();
mp-wp_genesis 2203 fragments.each(pos.insert.curry(element));
mp-wp_genesis 2204 }
mp-wp_genesis 2205 else element.insertAdjacentHTML(pos.adjacency, content.stripScripts());
mp-wp_genesis 2206
mp-wp_genesis 2207 content.evalScripts.bind(content).defer();
mp-wp_genesis 2208 }
mp-wp_genesis 2209
mp-wp_genesis 2210 return element;
mp-wp_genesis 2211 };
mp-wp_genesis 2212 }
mp-wp_genesis 2213
mp-wp_genesis 2214 if (Prototype.Browser.Opera) {
mp-wp_genesis 2215 Element.Methods._getStyle = Element.Methods.getStyle;
mp-wp_genesis 2216 Element.Methods.getStyle = function(element, style) {
mp-wp_genesis 2217 switch(style) {
mp-wp_genesis 2218 case 'left':
mp-wp_genesis 2219 case 'top':
mp-wp_genesis 2220 case 'right':
mp-wp_genesis 2221 case 'bottom':
mp-wp_genesis 2222 if (Element._getStyle(element, 'position') == 'static') return null;
mp-wp_genesis 2223 default: return Element._getStyle(element, style);
mp-wp_genesis 2224 }
mp-wp_genesis 2225 };
mp-wp_genesis 2226 Element.Methods._readAttribute = Element.Methods.readAttribute;
mp-wp_genesis 2227 Element.Methods.readAttribute = function(element, attribute) {
mp-wp_genesis 2228 if (attribute == 'title') return element.title;
mp-wp_genesis 2229 return Element._readAttribute(element, attribute);
mp-wp_genesis 2230 };
mp-wp_genesis 2231 }
mp-wp_genesis 2232
mp-wp_genesis 2233 else if (Prototype.Browser.IE) {
mp-wp_genesis 2234 $w('positionedOffset getOffsetParent viewportOffset').each(function(method) {
mp-wp_genesis 2235 Element.Methods[method] = Element.Methods[method].wrap(
mp-wp_genesis 2236 function(proceed, element) {
mp-wp_genesis 2237 element = $(element);
mp-wp_genesis 2238 var position = element.getStyle('position');
mp-wp_genesis 2239 if (position != 'static') return proceed(element);
mp-wp_genesis 2240 element.setStyle({ position: 'relative' });
mp-wp_genesis 2241 var value = proceed(element);
mp-wp_genesis 2242 element.setStyle({ position: position });
mp-wp_genesis 2243 return value;
mp-wp_genesis 2244 }
mp-wp_genesis 2245 );
mp-wp_genesis 2246 });
mp-wp_genesis 2247
mp-wp_genesis 2248 Element.Methods.getStyle = function(element, style) {
mp-wp_genesis 2249 element = $(element);
mp-wp_genesis 2250 style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
mp-wp_genesis 2251 var value = element.style[style];
mp-wp_genesis 2252 if (!value && element.currentStyle) value = element.currentStyle[style];
mp-wp_genesis 2253
mp-wp_genesis 2254 if (style == 'opacity') {
mp-wp_genesis 2255 if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
mp-wp_genesis 2256 if (value[1]) return parseFloat(value[1]) / 100;
mp-wp_genesis 2257 return 1.0;
mp-wp_genesis 2258 }
mp-wp_genesis 2259
mp-wp_genesis 2260 if (value == 'auto') {
mp-wp_genesis 2261 if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))
mp-wp_genesis 2262 return element['offset' + style.capitalize()] + 'px';
mp-wp_genesis 2263 return null;
mp-wp_genesis 2264 }
mp-wp_genesis 2265 return value;
mp-wp_genesis 2266 };
mp-wp_genesis 2267
mp-wp_genesis 2268 Element.Methods.setOpacity = function(element, value) {
mp-wp_genesis 2269 function stripAlpha(filter){
mp-wp_genesis 2270 return filter.replace(/alpha\([^\)]*\)/gi,'');
mp-wp_genesis 2271 }
mp-wp_genesis 2272 element = $(element);
mp-wp_genesis 2273 var currentStyle = element.currentStyle;
mp-wp_genesis 2274 if ((currentStyle && !currentStyle.hasLayout) ||
mp-wp_genesis 2275 (!currentStyle && element.style.zoom == 'normal'))
mp-wp_genesis 2276 element.style.zoom = 1;
mp-wp_genesis 2277
mp-wp_genesis 2278 var filter = element.getStyle('filter'), style = element.style;
mp-wp_genesis 2279 if (value == 1 || value === '') {
mp-wp_genesis 2280 (filter = stripAlpha(filter)) ?
mp-wp_genesis 2281 style.filter = filter : style.removeAttribute('filter');
mp-wp_genesis 2282 return element;
mp-wp_genesis 2283 } else if (value < 0.00001) value = 0;
mp-wp_genesis 2284 style.filter = stripAlpha(filter) +
mp-wp_genesis 2285 'alpha(opacity=' + (value * 100) + ')';
mp-wp_genesis 2286 return element;
mp-wp_genesis 2287 };
mp-wp_genesis 2288
mp-wp_genesis 2289 Element._attributeTranslations = {
mp-wp_genesis 2290 read: {
mp-wp_genesis 2291 names: {
mp-wp_genesis 2292 'class': 'className',
mp-wp_genesis 2293 'for': 'htmlFor'
mp-wp_genesis 2294 },
mp-wp_genesis 2295 values: {
mp-wp_genesis 2296 _getAttr: function(element, attribute) {
mp-wp_genesis 2297 return element.getAttribute(attribute, 2);
mp-wp_genesis 2298 },
mp-wp_genesis 2299 _getAttrNode: function(element, attribute) {
mp-wp_genesis 2300 var node = element.getAttributeNode(attribute);
mp-wp_genesis 2301 return node ? node.value : "";
mp-wp_genesis 2302 },
mp-wp_genesis 2303 _getEv: function(element, attribute) {
mp-wp_genesis 2304 var attribute = element.getAttribute(attribute);
mp-wp_genesis 2305 return attribute ? attribute.toString().slice(23, -2) : null;
mp-wp_genesis 2306 },
mp-wp_genesis 2307 _flag: function(element, attribute) {
mp-wp_genesis 2308 return $(element).hasAttribute(attribute) ? attribute : null;
mp-wp_genesis 2309 },
mp-wp_genesis 2310 style: function(element) {
mp-wp_genesis 2311 return element.style.cssText.toLowerCase();
mp-wp_genesis 2312 },
mp-wp_genesis 2313 title: function(element) {
mp-wp_genesis 2314 return element.title;
mp-wp_genesis 2315 }
mp-wp_genesis 2316 }
mp-wp_genesis 2317 }
mp-wp_genesis 2318 };
mp-wp_genesis 2319
mp-wp_genesis 2320 Element._attributeTranslations.write = {
mp-wp_genesis 2321 names: Object.clone(Element._attributeTranslations.read.names),
mp-wp_genesis 2322 values: {
mp-wp_genesis 2323 checked: function(element, value) {
mp-wp_genesis 2324 element.checked = !!value;
mp-wp_genesis 2325 },
mp-wp_genesis 2326
mp-wp_genesis 2327 style: function(element, value) {
mp-wp_genesis 2328 element.style.cssText = value ? value : '';
mp-wp_genesis 2329 }
mp-wp_genesis 2330 }
mp-wp_genesis 2331 };
mp-wp_genesis 2332
mp-wp_genesis 2333 Element._attributeTranslations.has = {};
mp-wp_genesis 2334
mp-wp_genesis 2335 $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +
mp-wp_genesis 2336 'encType maxLength readOnly longDesc').each(function(attr) {
mp-wp_genesis 2337 Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;
mp-wp_genesis 2338 Element._attributeTranslations.has[attr.toLowerCase()] = attr;
mp-wp_genesis 2339 });
mp-wp_genesis 2340
mp-wp_genesis 2341 (function(v) {
mp-wp_genesis 2342 Object.extend(v, {
mp-wp_genesis 2343 href: v._getAttr,
mp-wp_genesis 2344 src: v._getAttr,
mp-wp_genesis 2345 type: v._getAttr,
mp-wp_genesis 2346 action: v._getAttrNode,
mp-wp_genesis 2347 disabled: v._flag,
mp-wp_genesis 2348 checked: v._flag,
mp-wp_genesis 2349 readonly: v._flag,
mp-wp_genesis 2350 multiple: v._flag,
mp-wp_genesis 2351 onload: v._getEv,
mp-wp_genesis 2352 onunload: v._getEv,
mp-wp_genesis 2353 onclick: v._getEv,
mp-wp_genesis 2354 ondblclick: v._getEv,
mp-wp_genesis 2355 onmousedown: v._getEv,
mp-wp_genesis 2356 onmouseup: v._getEv,
mp-wp_genesis 2357 onmouseover: v._getEv,
mp-wp_genesis 2358 onmousemove: v._getEv,
mp-wp_genesis 2359 onmouseout: v._getEv,
mp-wp_genesis 2360 onfocus: v._getEv,
mp-wp_genesis 2361 onblur: v._getEv,
mp-wp_genesis 2362 onkeypress: v._getEv,
mp-wp_genesis 2363 onkeydown: v._getEv,
mp-wp_genesis 2364 onkeyup: v._getEv,
mp-wp_genesis 2365 onsubmit: v._getEv,
mp-wp_genesis 2366 onreset: v._getEv,
mp-wp_genesis 2367 onselect: v._getEv,
mp-wp_genesis 2368 onchange: v._getEv
mp-wp_genesis 2369 });
mp-wp_genesis 2370 })(Element._attributeTranslations.read.values);
mp-wp_genesis 2371 }
mp-wp_genesis 2372
mp-wp_genesis 2373 else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) {
mp-wp_genesis 2374 Element.Methods.setOpacity = function(element, value) {
mp-wp_genesis 2375 element = $(element);
mp-wp_genesis 2376 element.style.opacity = (value == 1) ? 0.999999 :
mp-wp_genesis 2377 (value === '') ? '' : (value < 0.00001) ? 0 : value;
mp-wp_genesis 2378 return element;
mp-wp_genesis 2379 };
mp-wp_genesis 2380 }
mp-wp_genesis 2381
mp-wp_genesis 2382 else if (Prototype.Browser.WebKit) {
mp-wp_genesis 2383 Element.Methods.setOpacity = function(element, value) {
mp-wp_genesis 2384 element = $(element);
mp-wp_genesis 2385 element.style.opacity = (value == 1 || value === '') ? '' :
mp-wp_genesis 2386 (value < 0.00001) ? 0 : value;
mp-wp_genesis 2387
mp-wp_genesis 2388 if (value == 1)
mp-wp_genesis 2389 if(element.tagName == 'IMG' && element.width) {
mp-wp_genesis 2390 element.width++; element.width--;
mp-wp_genesis 2391 } else try {
mp-wp_genesis 2392 var n = document.createTextNode(' ');
mp-wp_genesis 2393 element.appendChild(n);
mp-wp_genesis 2394 element.removeChild(n);
mp-wp_genesis 2395 } catch (e) { }
mp-wp_genesis 2396
mp-wp_genesis 2397 return element;
mp-wp_genesis 2398 };
mp-wp_genesis 2399
mp-wp_genesis 2400 // Safari returns margins on body which is incorrect if the child is absolutely
mp-wp_genesis 2401 // positioned. For performance reasons, redefine Position.cumulativeOffset for
mp-wp_genesis 2402 // KHTML/WebKit only.
mp-wp_genesis 2403 Element.Methods.cumulativeOffset = function(element) {
mp-wp_genesis 2404 var valueT = 0, valueL = 0;
mp-wp_genesis 2405 do {
mp-wp_genesis 2406 valueT += element.offsetTop || 0;
mp-wp_genesis 2407 valueL += element.offsetLeft || 0;
mp-wp_genesis 2408 if (element.offsetParent == document.body)
mp-wp_genesis 2409 if (Element.getStyle(element, 'position') == 'absolute') break;
mp-wp_genesis 2410
mp-wp_genesis 2411 element = element.offsetParent;
mp-wp_genesis 2412 } while (element);
mp-wp_genesis 2413
mp-wp_genesis 2414 return Element._returnOffset(valueL, valueT);
mp-wp_genesis 2415 };
mp-wp_genesis 2416 }
mp-wp_genesis 2417
mp-wp_genesis 2418 if (Prototype.Browser.IE || Prototype.Browser.Opera) {
mp-wp_genesis 2419 // IE and Opera are missing .innerHTML support for TABLE-related and SELECT elements
mp-wp_genesis 2420 Element.Methods.update = function(element, content) {
mp-wp_genesis 2421 element = $(element);
mp-wp_genesis 2422
mp-wp_genesis 2423 if (content && content.toElement) content = content.toElement();
mp-wp_genesis 2424 if (Object.isElement(content)) return element.update().insert(content);
mp-wp_genesis 2425
mp-wp_genesis 2426 content = Object.toHTML(content);
mp-wp_genesis 2427 var tagName = element.tagName.toUpperCase();
mp-wp_genesis 2428
mp-wp_genesis 2429 if (tagName in Element._insertionTranslations.tags) {
mp-wp_genesis 2430 $A(element.childNodes).each(function(node) { element.removeChild(node) });
mp-wp_genesis 2431 Element._getContentFromAnonymousElement(tagName, content.stripScripts())
mp-wp_genesis 2432 .each(function(node) { element.appendChild(node) });
mp-wp_genesis 2433 }
mp-wp_genesis 2434 else element.innerHTML = content.stripScripts();
mp-wp_genesis 2435
mp-wp_genesis 2436 content.evalScripts.bind(content).defer();
mp-wp_genesis 2437 return element;
mp-wp_genesis 2438 };
mp-wp_genesis 2439 }
mp-wp_genesis 2440
mp-wp_genesis 2441 if (document.createElement('div').outerHTML) {
mp-wp_genesis 2442 Element.Methods.replace = function(element, content) {
mp-wp_genesis 2443 element = $(element);
mp-wp_genesis 2444
mp-wp_genesis 2445 if (content && content.toElement) content = content.toElement();
mp-wp_genesis 2446 if (Object.isElement(content)) {
mp-wp_genesis 2447 element.parentNode.replaceChild(content, element);
mp-wp_genesis 2448 return element;
mp-wp_genesis 2449 }
mp-wp_genesis 2450
mp-wp_genesis 2451 content = Object.toHTML(content);
mp-wp_genesis 2452 var parent = element.parentNode, tagName = parent.tagName.toUpperCase();
mp-wp_genesis 2453
mp-wp_genesis 2454 if (Element._insertionTranslations.tags[tagName]) {
mp-wp_genesis 2455 var nextSibling = element.next();
mp-wp_genesis 2456 var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
mp-wp_genesis 2457 parent.removeChild(element);
mp-wp_genesis 2458 if (nextSibling)
mp-wp_genesis 2459 fragments.each(function(node) { parent.insertBefore(node, nextSibling) });
mp-wp_genesis 2460 else
mp-wp_genesis 2461 fragments.each(function(node) { parent.appendChild(node) });
mp-wp_genesis 2462 }
mp-wp_genesis 2463 else element.outerHTML = content.stripScripts();
mp-wp_genesis 2464
mp-wp_genesis 2465 content.evalScripts.bind(content).defer();
mp-wp_genesis 2466 return element;
mp-wp_genesis 2467 };
mp-wp_genesis 2468 }
mp-wp_genesis 2469
mp-wp_genesis 2470 Element._returnOffset = function(l, t) {
mp-wp_genesis 2471 var result = [l, t];
mp-wp_genesis 2472 result.left = l;
mp-wp_genesis 2473 result.top = t;
mp-wp_genesis 2474 return result;
mp-wp_genesis 2475 };
mp-wp_genesis 2476
mp-wp_genesis 2477 Element._getContentFromAnonymousElement = function(tagName, html) {
mp-wp_genesis 2478 var div = new Element('div'), t = Element._insertionTranslations.tags[tagName];
mp-wp_genesis 2479 div.innerHTML = t[0] + html + t[1];
mp-wp_genesis 2480 t[2].times(function() { div = div.firstChild });
mp-wp_genesis 2481 return $A(div.childNodes);
mp-wp_genesis 2482 };
mp-wp_genesis 2483
mp-wp_genesis 2484 Element._insertionTranslations = {
mp-wp_genesis 2485 before: {
mp-wp_genesis 2486 adjacency: 'beforeBegin',
mp-wp_genesis 2487 insert: function(element, node) {
mp-wp_genesis 2488 element.parentNode.insertBefore(node, element);
mp-wp_genesis 2489 },
mp-wp_genesis 2490 initializeRange: function(element, range) {
mp-wp_genesis 2491 range.setStartBefore(element);
mp-wp_genesis 2492 }
mp-wp_genesis 2493 },
mp-wp_genesis 2494 top: {
mp-wp_genesis 2495 adjacency: 'afterBegin',
mp-wp_genesis 2496 insert: function(element, node) {
mp-wp_genesis 2497 element.insertBefore(node, element.firstChild);
mp-wp_genesis 2498 },
mp-wp_genesis 2499 initializeRange: function(element, range) {
mp-wp_genesis 2500 range.selectNodeContents(element);
mp-wp_genesis 2501 range.collapse(true);
mp-wp_genesis 2502 }
mp-wp_genesis 2503 },
mp-wp_genesis 2504 bottom: {
mp-wp_genesis 2505 adjacency: 'beforeEnd',
mp-wp_genesis 2506 insert: function(element, node) {
mp-wp_genesis 2507 element.appendChild(node);
mp-wp_genesis 2508 }
mp-wp_genesis 2509 },
mp-wp_genesis 2510 after: {
mp-wp_genesis 2511 adjacency: 'afterEnd',
mp-wp_genesis 2512 insert: function(element, node) {
mp-wp_genesis 2513 element.parentNode.insertBefore(node, element.nextSibling);
mp-wp_genesis 2514 },
mp-wp_genesis 2515 initializeRange: function(element, range) {
mp-wp_genesis 2516 range.setStartAfter(element);
mp-wp_genesis 2517 }
mp-wp_genesis 2518 },
mp-wp_genesis 2519 tags: {
mp-wp_genesis 2520 TABLE: ['<table>', '</table>', 1],
mp-wp_genesis 2521 TBODY: ['<table><tbody>', '</tbody></table>', 2],
mp-wp_genesis 2522 TR: ['<table><tbody><tr>', '</tr></tbody></table>', 3],
mp-wp_genesis 2523 TD: ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],
mp-wp_genesis 2524 SELECT: ['<select>', '</select>', 1]
mp-wp_genesis 2525 }
mp-wp_genesis 2526 };
mp-wp_genesis 2527
mp-wp_genesis 2528 (function() {
mp-wp_genesis 2529 this.bottom.initializeRange = this.top.initializeRange;
mp-wp_genesis 2530 Object.extend(this.tags, {
mp-wp_genesis 2531 THEAD: this.tags.TBODY,
mp-wp_genesis 2532 TFOOT: this.tags.TBODY,
mp-wp_genesis 2533 TH: this.tags.TD
mp-wp_genesis 2534 });
mp-wp_genesis 2535 }).call(Element._insertionTranslations);
mp-wp_genesis 2536
mp-wp_genesis 2537 Element.Methods.Simulated = {
mp-wp_genesis 2538 hasAttribute: function(element, attribute) {
mp-wp_genesis 2539 attribute = Element._attributeTranslations.has[attribute] || attribute;
mp-wp_genesis 2540 var node = $(element).getAttributeNode(attribute);
mp-wp_genesis 2541 return node && node.specified;
mp-wp_genesis 2542 }
mp-wp_genesis 2543 };
mp-wp_genesis 2544
mp-wp_genesis 2545 Element.Methods.ByTag = { };
mp-wp_genesis 2546
mp-wp_genesis 2547 Object.extend(Element, Element.Methods);
mp-wp_genesis 2548
mp-wp_genesis 2549 if (!Prototype.BrowserFeatures.ElementExtensions &&
mp-wp_genesis 2550 document.createElement('div').__proto__) {
mp-wp_genesis 2551 window.HTMLElement = { };
mp-wp_genesis 2552 window.HTMLElement.prototype = document.createElement('div').__proto__;
mp-wp_genesis 2553 Prototype.BrowserFeatures.ElementExtensions = true;
mp-wp_genesis 2554 }
mp-wp_genesis 2555
mp-wp_genesis 2556 Element.extend = (function() {
mp-wp_genesis 2557 if (Prototype.BrowserFeatures.SpecificElementExtensions)
mp-wp_genesis 2558 return Prototype.K;
mp-wp_genesis 2559
mp-wp_genesis 2560 var Methods = { }, ByTag = Element.Methods.ByTag;
mp-wp_genesis 2561
mp-wp_genesis 2562 var extend = Object.extend(function(element) {
mp-wp_genesis 2563 if (!element || element._extendedByPrototype ||
mp-wp_genesis 2564 element.nodeType != 1 || element == window) return element;
mp-wp_genesis 2565
mp-wp_genesis 2566 var methods = Object.clone(Methods),
mp-wp_genesis 2567 tagName = element.tagName, property, value;
mp-wp_genesis 2568
mp-wp_genesis 2569 // extend methods for specific tags
mp-wp_genesis 2570 if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);
mp-wp_genesis 2571
mp-wp_genesis 2572 for (property in methods) {
mp-wp_genesis 2573 value = methods[property];
mp-wp_genesis 2574 if (Object.isFunction(value) && !(property in element))
mp-wp_genesis 2575 element[property] = value.methodize();
mp-wp_genesis 2576 }
mp-wp_genesis 2577
mp-wp_genesis 2578 element._extendedByPrototype = Prototype.emptyFunction;
mp-wp_genesis 2579 return element;
mp-wp_genesis 2580
mp-wp_genesis 2581 }, {
mp-wp_genesis 2582 refresh: function() {
mp-wp_genesis 2583 // extend methods for all tags (Safari doesn't need this)
mp-wp_genesis 2584 if (!Prototype.BrowserFeatures.ElementExtensions) {
mp-wp_genesis 2585 Object.extend(Methods, Element.Methods);
mp-wp_genesis 2586 Object.extend(Methods, Element.Methods.Simulated);
mp-wp_genesis 2587 }
mp-wp_genesis 2588 }
mp-wp_genesis 2589 });
mp-wp_genesis 2590
mp-wp_genesis 2591 extend.refresh();
mp-wp_genesis 2592 return extend;
mp-wp_genesis 2593 })();
mp-wp_genesis 2594
mp-wp_genesis 2595 Element.hasAttribute = function(element, attribute) {
mp-wp_genesis 2596 if (element.hasAttribute) return element.hasAttribute(attribute);
mp-wp_genesis 2597 return Element.Methods.Simulated.hasAttribute(element, attribute);
mp-wp_genesis 2598 };
mp-wp_genesis 2599
mp-wp_genesis 2600 Element.addMethods = function(methods) {
mp-wp_genesis 2601 var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;
mp-wp_genesis 2602
mp-wp_genesis 2603 if (!methods) {
mp-wp_genesis 2604 Object.extend(Form, Form.Methods);
mp-wp_genesis 2605 Object.extend(Form.Element, Form.Element.Methods);
mp-wp_genesis 2606 Object.extend(Element.Methods.ByTag, {
mp-wp_genesis 2607 "FORM": Object.clone(Form.Methods),
mp-wp_genesis 2608 "INPUT": Object.clone(Form.Element.Methods),
mp-wp_genesis 2609 "SELECT": Object.clone(Form.Element.Methods),
mp-wp_genesis 2610 "TEXTAREA": Object.clone(Form.Element.Methods)
mp-wp_genesis 2611 });
mp-wp_genesis 2612 }
mp-wp_genesis 2613
mp-wp_genesis 2614 if (arguments.length == 2) {
mp-wp_genesis 2615 var tagName = methods;
mp-wp_genesis 2616 methods = arguments[1];
mp-wp_genesis 2617 }
mp-wp_genesis 2618
mp-wp_genesis 2619 if (!tagName) Object.extend(Element.Methods, methods || { });
mp-wp_genesis 2620 else {
mp-wp_genesis 2621 if (Object.isArray(tagName)) tagName.each(extend);
mp-wp_genesis 2622 else extend(tagName);
mp-wp_genesis 2623 }
mp-wp_genesis 2624
mp-wp_genesis 2625 function extend(tagName) {
mp-wp_genesis 2626 tagName = tagName.toUpperCase();
mp-wp_genesis 2627 if (!Element.Methods.ByTag[tagName])
mp-wp_genesis 2628 Element.Methods.ByTag[tagName] = { };
mp-wp_genesis 2629 Object.extend(Element.Methods.ByTag[tagName], methods);
mp-wp_genesis 2630 }
mp-wp_genesis 2631
mp-wp_genesis 2632 function copy(methods, destination, onlyIfAbsent) {
mp-wp_genesis 2633 onlyIfAbsent = onlyIfAbsent || false;
mp-wp_genesis 2634 for (var property in methods) {
mp-wp_genesis 2635 var value = methods[property];
mp-wp_genesis 2636 if (!Object.isFunction(value)) continue;
mp-wp_genesis 2637 if (!onlyIfAbsent || !(property in destination))
mp-wp_genesis 2638 destination[property] = value.methodize();
mp-wp_genesis 2639 }
mp-wp_genesis 2640 }
mp-wp_genesis 2641
mp-wp_genesis 2642 function findDOMClass(tagName) {
mp-wp_genesis 2643 var klass;
mp-wp_genesis 2644 var trans = {
mp-wp_genesis 2645 "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",
mp-wp_genesis 2646 "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList",
mp-wp_genesis 2647 "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading",
mp-wp_genesis 2648 "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",
mp-wp_genesis 2649 "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION":
mp-wp_genesis 2650 "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":
mp-wp_genesis 2651 "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR":
mp-wp_genesis 2652 "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":
mp-wp_genesis 2653 "FrameSet", "IFRAME": "IFrame"
mp-wp_genesis 2654 };
mp-wp_genesis 2655 if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';
mp-wp_genesis 2656 if (window[klass]) return window[klass];
mp-wp_genesis 2657 klass = 'HTML' + tagName + 'Element';
mp-wp_genesis 2658 if (window[klass]) return window[klass];
mp-wp_genesis 2659 klass = 'HTML' + tagName.capitalize() + 'Element';
mp-wp_genesis 2660 if (window[klass]) return window[klass];
mp-wp_genesis 2661
mp-wp_genesis 2662 window[klass] = { };
mp-wp_genesis 2663 window[klass].prototype = document.createElement(tagName).__proto__;
mp-wp_genesis 2664 return window[klass];
mp-wp_genesis 2665 }
mp-wp_genesis 2666
mp-wp_genesis 2667 if (F.ElementExtensions) {
mp-wp_genesis 2668 copy(Element.Methods, HTMLElement.prototype);
mp-wp_genesis 2669 copy(Element.Methods.Simulated, HTMLElement.prototype, true);
mp-wp_genesis 2670 }
mp-wp_genesis 2671
mp-wp_genesis 2672 if (F.SpecificElementExtensions) {
mp-wp_genesis 2673 for (var tag in Element.Methods.ByTag) {
mp-wp_genesis 2674 var klass = findDOMClass(tag);
mp-wp_genesis 2675 if (Object.isUndefined(klass)) continue;
mp-wp_genesis 2676 copy(T[tag], klass.prototype);
mp-wp_genesis 2677 }
mp-wp_genesis 2678 }
mp-wp_genesis 2679
mp-wp_genesis 2680 Object.extend(Element, Element.Methods);
mp-wp_genesis 2681 delete Element.ByTag;
mp-wp_genesis 2682
mp-wp_genesis 2683 if (Element.extend.refresh) Element.extend.refresh();
mp-wp_genesis 2684 Element.cache = { };
mp-wp_genesis 2685 };
mp-wp_genesis 2686
mp-wp_genesis 2687 document.viewport = {
mp-wp_genesis 2688 getDimensions: function() {
mp-wp_genesis 2689 var dimensions = { };
mp-wp_genesis 2690 $w('width height').each(function(d) {
mp-wp_genesis 2691 var D = d.capitalize();
mp-wp_genesis 2692 dimensions[d] = self['inner' + D] ||
mp-wp_genesis 2693 (document.documentElement['client' + D] || document.body['client' + D]);
mp-wp_genesis 2694 });
mp-wp_genesis 2695 return dimensions;
mp-wp_genesis 2696 },
mp-wp_genesis 2697
mp-wp_genesis 2698 getWidth: function() {
mp-wp_genesis 2699 return this.getDimensions().width;
mp-wp_genesis 2700 },
mp-wp_genesis 2701
mp-wp_genesis 2702 getHeight: function() {
mp-wp_genesis 2703 return this.getDimensions().height;
mp-wp_genesis 2704 },
mp-wp_genesis 2705
mp-wp_genesis 2706 getScrollOffsets: function() {
mp-wp_genesis 2707 return Element._returnOffset(
mp-wp_genesis 2708 window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
mp-wp_genesis 2709 window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
mp-wp_genesis 2710 }
mp-wp_genesis 2711 };
mp-wp_genesis 2712 /* Portions of the Selector class are derived from Jack Slocum`s DomQuery,
mp-wp_genesis 2713 * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
mp-wp_genesis 2714 * license. Please see http://www.yui-ext.com/ for more information. */
mp-wp_genesis 2715
mp-wp_genesis 2716 var Selector = Class.create({
mp-wp_genesis 2717 initialize: function(expression) {
mp-wp_genesis 2718 this.expression = expression.strip();
mp-wp_genesis 2719 this.compileMatcher();
mp-wp_genesis 2720 },
mp-wp_genesis 2721
mp-wp_genesis 2722 compileMatcher: function() {
mp-wp_genesis 2723 // Selectors with namespaced attributes can't use the XPath version
mp-wp_genesis 2724 if (Prototype.BrowserFeatures.XPath && !(/(\[[\w-]*?:|:checked)/).test(this.expression))
mp-wp_genesis 2725 return this.compileXPathMatcher();
mp-wp_genesis 2726
mp-wp_genesis 2727 var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
mp-wp_genesis 2728 c = Selector.criteria, le, p, m;
mp-wp_genesis 2729
mp-wp_genesis 2730 if (Selector._cache[e]) {
mp-wp_genesis 2731 this.matcher = Selector._cache[e];
mp-wp_genesis 2732 return;
mp-wp_genesis 2733 }
mp-wp_genesis 2734
mp-wp_genesis 2735 this.matcher = ["this.matcher = function(root) {",
mp-wp_genesis 2736 "var r = root, h = Selector.handlers, c = false, n;"];
mp-wp_genesis 2737
mp-wp_genesis 2738 while (e && le != e && (/\S/).test(e)) {
mp-wp_genesis 2739 le = e;
mp-wp_genesis 2740 for (var i in ps) {
mp-wp_genesis 2741 p = ps[i];
mp-wp_genesis 2742 if (m = e.match(p)) {
mp-wp_genesis 2743 this.matcher.push(Object.isFunction(c[i]) ? c[i](m) :
mp-wp_genesis 2744 new Template(c[i]).evaluate(m));
mp-wp_genesis 2745 e = e.replace(m[0], '');
mp-wp_genesis 2746 break;
mp-wp_genesis 2747 }
mp-wp_genesis 2748 }
mp-wp_genesis 2749 }
mp-wp_genesis 2750
mp-wp_genesis 2751 this.matcher.push("return h.unique(n);\n}");
mp-wp_genesis 2752 eval(this.matcher.join('\n'));
mp-wp_genesis 2753 Selector._cache[this.expression] = this.matcher;
mp-wp_genesis 2754 },
mp-wp_genesis 2755
mp-wp_genesis 2756 compileXPathMatcher: function() {
mp-wp_genesis 2757 var e = this.expression, ps = Selector.patterns,
mp-wp_genesis 2758 x = Selector.xpath, le, m;
mp-wp_genesis 2759
mp-wp_genesis 2760 if (Selector._cache[e]) {
mp-wp_genesis 2761 this.xpath = Selector._cache[e]; return;
mp-wp_genesis 2762 }
mp-wp_genesis 2763
mp-wp_genesis 2764 this.matcher = ['.//*'];
mp-wp_genesis 2765 while (e && le != e && (/\S/).test(e)) {
mp-wp_genesis 2766 le = e;
mp-wp_genesis 2767 for (var i in ps) {
mp-wp_genesis 2768 if (m = e.match(ps[i])) {
mp-wp_genesis 2769 this.matcher.push(Object.isFunction(x[i]) ? x[i](m) :
mp-wp_genesis 2770 new Template(x[i]).evaluate(m));
mp-wp_genesis 2771 e = e.replace(m[0], '');
mp-wp_genesis 2772 break;
mp-wp_genesis 2773 }
mp-wp_genesis 2774 }
mp-wp_genesis 2775 }
mp-wp_genesis 2776
mp-wp_genesis 2777 this.xpath = this.matcher.join('');
mp-wp_genesis 2778 Selector._cache[this.expression] = this.xpath;
mp-wp_genesis 2779 },
mp-wp_genesis 2780
mp-wp_genesis 2781 findElements: function(root) {
mp-wp_genesis 2782 root = root || document;
mp-wp_genesis 2783 if (this.xpath) return document._getElementsByXPath(this.xpath, root);
mp-wp_genesis 2784 return this.matcher(root);
mp-wp_genesis 2785 },
mp-wp_genesis 2786
mp-wp_genesis 2787 match: function(element) {
mp-wp_genesis 2788 this.tokens = [];
mp-wp_genesis 2789
mp-wp_genesis 2790 var e = this.expression, ps = Selector.patterns, as = Selector.assertions;
mp-wp_genesis 2791 var le, p, m;
mp-wp_genesis 2792
mp-wp_genesis 2793 while (e && le !== e && (/\S/).test(e)) {
mp-wp_genesis 2794 le = e;
mp-wp_genesis 2795 for (var i in ps) {
mp-wp_genesis 2796 p = ps[i];
mp-wp_genesis 2797 if (m = e.match(p)) {
mp-wp_genesis 2798 // use the Selector.assertions methods unless the selector
mp-wp_genesis 2799 // is too complex.
mp-wp_genesis 2800 if (as[i]) {
mp-wp_genesis 2801 this.tokens.push([i, Object.clone(m)]);
mp-wp_genesis 2802 e = e.replace(m[0], '');
mp-wp_genesis 2803 } else {
mp-wp_genesis 2804 // reluctantly do a document-wide search
mp-wp_genesis 2805 // and look for a match in the array
mp-wp_genesis 2806 return this.findElements(document).include(element);
mp-wp_genesis 2807 }
mp-wp_genesis 2808 }
mp-wp_genesis 2809 }
mp-wp_genesis 2810 }
mp-wp_genesis 2811
mp-wp_genesis 2812 var match = true, name, matches;
mp-wp_genesis 2813 for (var i = 0, token; token = this.tokens[i]; i++) {
mp-wp_genesis 2814 name = token[0], matches = token[1];
mp-wp_genesis 2815 if (!Selector.assertions[name](element, matches)) {
mp-wp_genesis 2816 match = false; break;
mp-wp_genesis 2817 }
mp-wp_genesis 2818 }
mp-wp_genesis 2819
mp-wp_genesis 2820 return match;
mp-wp_genesis 2821 },
mp-wp_genesis 2822
mp-wp_genesis 2823 toString: function() {
mp-wp_genesis 2824 return this.expression;
mp-wp_genesis 2825 },
mp-wp_genesis 2826
mp-wp_genesis 2827 inspect: function() {
mp-wp_genesis 2828 return "#<Selector:" + this.expression.inspect() + ">";
mp-wp_genesis 2829 }
mp-wp_genesis 2830 });
mp-wp_genesis 2831
mp-wp_genesis 2832 Object.extend(Selector, {
mp-wp_genesis 2833 _cache: { },
mp-wp_genesis 2834
mp-wp_genesis 2835 xpath: {
mp-wp_genesis 2836 descendant: "//*",
mp-wp_genesis 2837 child: "/*",
mp-wp_genesis 2838 adjacent: "/following-sibling::*[1]",
mp-wp_genesis 2839 laterSibling: '/following-sibling::*',
mp-wp_genesis 2840 tagName: function(m) {
mp-wp_genesis 2841 if (m[1] == '*') return '';
mp-wp_genesis 2842 return "[local-name()='" + m[1].toLowerCase() +
mp-wp_genesis 2843 "' or local-name()='" + m[1].toUpperCase() + "']";
mp-wp_genesis 2844 },
mp-wp_genesis 2845 className: "[contains(concat(' ', @class, ' '), ' #{1} ')]",
mp-wp_genesis 2846 id: "[@id='#{1}']",
mp-wp_genesis 2847 attrPresence: "[@#{1}]",
mp-wp_genesis 2848 attr: function(m) {
mp-wp_genesis 2849 m[3] = m[5] || m[6];
mp-wp_genesis 2850 return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
mp-wp_genesis 2851 },
mp-wp_genesis 2852 pseudo: function(m) {
mp-wp_genesis 2853 var h = Selector.xpath.pseudos[m[1]];
mp-wp_genesis 2854 if (!h) return '';
mp-wp_genesis 2855 if (Object.isFunction(h)) return h(m);
mp-wp_genesis 2856 return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
mp-wp_genesis 2857 },
mp-wp_genesis 2858 operators: {
mp-wp_genesis 2859 '=': "[@#{1}='#{3}']",
mp-wp_genesis 2860 '!=': "[@#{1}!='#{3}']",
mp-wp_genesis 2861 '^=': "[starts-with(@#{1}, '#{3}')]",
mp-wp_genesis 2862 '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",
mp-wp_genesis 2863 '*=': "[contains(@#{1}, '#{3}')]",
mp-wp_genesis 2864 '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
mp-wp_genesis 2865 '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
mp-wp_genesis 2866 },
mp-wp_genesis 2867 pseudos: {
mp-wp_genesis 2868 'first-child': '[not(preceding-sibling::*)]',
mp-wp_genesis 2869 'last-child': '[not(following-sibling::*)]',
mp-wp_genesis 2870 'only-child': '[not(preceding-sibling::* or following-sibling::*)]',
mp-wp_genesis 2871 'empty': "[count(*) = 0 and (count(text()) = 0 or translate(text(), ' \t\r\n', '') = '')]",
mp-wp_genesis 2872 'checked': "[@checked]",
mp-wp_genesis 2873 'disabled': "[@disabled]",
mp-wp_genesis 2874 'enabled': "[not(@disabled)]",
mp-wp_genesis 2875 'not': function(m) {
mp-wp_genesis 2876 var e = m[6], p = Selector.patterns,
mp-wp_genesis 2877 x = Selector.xpath, le, m, v;
mp-wp_genesis 2878
mp-wp_genesis 2879 var exclusion = [];
mp-wp_genesis 2880 while (e && le != e && (/\S/).test(e)) {
mp-wp_genesis 2881 le = e;
mp-wp_genesis 2882 for (var i in p) {
mp-wp_genesis 2883 if (m = e.match(p[i])) {
mp-wp_genesis 2884 v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m);
mp-wp_genesis 2885 exclusion.push("(" + v.substring(1, v.length - 1) + ")");
mp-wp_genesis 2886 e = e.replace(m[0], '');
mp-wp_genesis 2887 break;
mp-wp_genesis 2888 }
mp-wp_genesis 2889 }
mp-wp_genesis 2890 }
mp-wp_genesis 2891 return "[not(" + exclusion.join(" and ") + ")]";
mp-wp_genesis 2892 },
mp-wp_genesis 2893 'nth-child': function(m) {
mp-wp_genesis 2894 return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);
mp-wp_genesis 2895 },
mp-wp_genesis 2896 'nth-last-child': function(m) {
mp-wp_genesis 2897 return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);
mp-wp_genesis 2898 },
mp-wp_genesis 2899 'nth-of-type': function(m) {
mp-wp_genesis 2900 return Selector.xpath.pseudos.nth("position() ", m);
mp-wp_genesis 2901 },
mp-wp_genesis 2902 'nth-last-of-type': function(m) {
mp-wp_genesis 2903 return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m);
mp-wp_genesis 2904 },
mp-wp_genesis 2905 'first-of-type': function(m) {
mp-wp_genesis 2906 m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m);
mp-wp_genesis 2907 },
mp-wp_genesis 2908 'last-of-type': function(m) {
mp-wp_genesis 2909 m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m);
mp-wp_genesis 2910 },
mp-wp_genesis 2911 'only-of-type': function(m) {
mp-wp_genesis 2912 var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m);
mp-wp_genesis 2913 },
mp-wp_genesis 2914 nth: function(fragment, m) {
mp-wp_genesis 2915 var mm, formula = m[6], predicate;
mp-wp_genesis 2916 if (formula == 'even') formula = '2n+0';
mp-wp_genesis 2917 if (formula == 'odd') formula = '2n+1';
mp-wp_genesis 2918 if (mm = formula.match(/^(\d+)$/)) // digit only
mp-wp_genesis 2919 return '[' + fragment + "= " + mm[1] + ']';
mp-wp_genesis 2920 if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
mp-wp_genesis 2921 if (mm[1] == "-") mm[1] = -1;
mp-wp_genesis 2922 var a = mm[1] ? Number(mm[1]) : 1;
mp-wp_genesis 2923 var b = mm[2] ? Number(mm[2]) : 0;
mp-wp_genesis 2924 predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " +
mp-wp_genesis 2925 "((#{fragment} - #{b}) div #{a} >= 0)]";
mp-wp_genesis 2926 return new Template(predicate).evaluate({
mp-wp_genesis 2927 fragment: fragment, a: a, b: b });
mp-wp_genesis 2928 }
mp-wp_genesis 2929 }
mp-wp_genesis 2930 }
mp-wp_genesis 2931 },
mp-wp_genesis 2932
mp-wp_genesis 2933 criteria: {
mp-wp_genesis 2934 tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;',
mp-wp_genesis 2935 className: 'n = h.className(n, r, "#{1}", c); c = false;',
mp-wp_genesis 2936 id: 'n = h.id(n, r, "#{1}", c); c = false;',
mp-wp_genesis 2937 attrPresence: 'n = h.attrPresence(n, r, "#{1}"); c = false;',
mp-wp_genesis 2938 attr: function(m) {
mp-wp_genesis 2939 m[3] = (m[5] || m[6]);
mp-wp_genesis 2940 return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}"); c = false;').evaluate(m);
mp-wp_genesis 2941 },
mp-wp_genesis 2942 pseudo: function(m) {
mp-wp_genesis 2943 if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
mp-wp_genesis 2944 return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);
mp-wp_genesis 2945 },
mp-wp_genesis 2946 descendant: 'c = "descendant";',
mp-wp_genesis 2947 child: 'c = "child";',
mp-wp_genesis 2948 adjacent: 'c = "adjacent";',
mp-wp_genesis 2949 laterSibling: 'c = "laterSibling";'
mp-wp_genesis 2950 },
mp-wp_genesis 2951
mp-wp_genesis 2952 patterns: {
mp-wp_genesis 2953 // combinators must be listed first
mp-wp_genesis 2954 // (and descendant needs to be last combinator)
mp-wp_genesis 2955 laterSibling: /^\s*~\s*/,
mp-wp_genesis 2956 child: /^\s*>\s*/,
mp-wp_genesis 2957 adjacent: /^\s*\+\s*/,
mp-wp_genesis 2958 descendant: /^\s/,
mp-wp_genesis 2959
mp-wp_genesis 2960 // selectors follow
mp-wp_genesis 2961 tagName: /^\s*(\*|[\w\-]+)(\b|$)?/,
mp-wp_genesis 2962 id: /^#([\w\-\*]+)(\b|$)/,
mp-wp_genesis 2963 className: /^\.([\w\-\*]+)(\b|$)/,
mp-wp_genesis 2964 pseudo: /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s)|(?=:))/,
mp-wp_genesis 2965 attrPresence: /^\[([\w]+)\]/,
mp-wp_genesis 2966 attr: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/
mp-wp_genesis 2967 },
mp-wp_genesis 2968
mp-wp_genesis 2969 // for Selector.match and Element#match
mp-wp_genesis 2970 assertions: {
mp-wp_genesis 2971 tagName: function(element, matches) {
mp-wp_genesis 2972 return matches[1].toUpperCase() == element.tagName.toUpperCase();
mp-wp_genesis 2973 },
mp-wp_genesis 2974
mp-wp_genesis 2975 className: function(element, matches) {
mp-wp_genesis 2976 return Element.hasClassName(element, matches[1]);
mp-wp_genesis 2977 },
mp-wp_genesis 2978
mp-wp_genesis 2979 id: function(element, matches) {
mp-wp_genesis 2980 return element.id === matches[1];
mp-wp_genesis 2981 },
mp-wp_genesis 2982
mp-wp_genesis 2983 attrPresence: function(element, matches) {
mp-wp_genesis 2984 return Element.hasAttribute(element, matches[1]);
mp-wp_genesis 2985 },
mp-wp_genesis 2986
mp-wp_genesis 2987 attr: function(element, matches) {
mp-wp_genesis 2988 var nodeValue = Element.readAttribute(element, matches[1]);
mp-wp_genesis 2989 return Selector.operators[matches[2]](nodeValue, matches[3]);
mp-wp_genesis 2990 }
mp-wp_genesis 2991 },
mp-wp_genesis 2992
mp-wp_genesis 2993 handlers: {
mp-wp_genesis 2994 // UTILITY FUNCTIONS
mp-wp_genesis 2995 // joins two collections
mp-wp_genesis 2996 concat: function(a, b) {
mp-wp_genesis 2997 for (var i = 0, node; node = b[i]; i++)
mp-wp_genesis 2998 a.push(node);
mp-wp_genesis 2999 return a;
mp-wp_genesis 3000 },
mp-wp_genesis 3001
mp-wp_genesis 3002 // marks an array of nodes for counting
mp-wp_genesis 3003 mark: function(nodes) {
mp-wp_genesis 3004 for (var i = 0, node; node = nodes[i]; i++)
mp-wp_genesis 3005 node._counted = true;
mp-wp_genesis 3006 return nodes;
mp-wp_genesis 3007 },
mp-wp_genesis 3008
mp-wp_genesis 3009 unmark: function(nodes) {
mp-wp_genesis 3010 for (var i = 0, node; node = nodes[i]; i++)
mp-wp_genesis 3011 node._counted = undefined;
mp-wp_genesis 3012 return nodes;
mp-wp_genesis 3013 },
mp-wp_genesis 3014
mp-wp_genesis 3015 // mark each child node with its position (for nth calls)
mp-wp_genesis 3016 // "ofType" flag indicates whether we're indexing for nth-of-type
mp-wp_genesis 3017 // rather than nth-child
mp-wp_genesis 3018 index: function(parentNode, reverse, ofType) {
mp-wp_genesis 3019 parentNode._counted = true;
mp-wp_genesis 3020 if (reverse) {
mp-wp_genesis 3021 for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
mp-wp_genesis 3022 var node = nodes[i];
mp-wp_genesis 3023 if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;
mp-wp_genesis 3024 }
mp-wp_genesis 3025 } else {
mp-wp_genesis 3026 for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
mp-wp_genesis 3027 if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;
mp-wp_genesis 3028 }
mp-wp_genesis 3029 },
mp-wp_genesis 3030
mp-wp_genesis 3031 // filters out duplicates and extends all nodes
mp-wp_genesis 3032 unique: function(nodes) {
mp-wp_genesis 3033 if (nodes.length == 0) return nodes;
mp-wp_genesis 3034 var results = [], n;
mp-wp_genesis 3035 for (var i = 0, l = nodes.length; i < l; i++)
mp-wp_genesis 3036 if (!(n = nodes[i])._counted) {
mp-wp_genesis 3037 n._counted = true;
mp-wp_genesis 3038 results.push(Element.extend(n));
mp-wp_genesis 3039 }
mp-wp_genesis 3040 return Selector.handlers.unmark(results);
mp-wp_genesis 3041 },
mp-wp_genesis 3042
mp-wp_genesis 3043 // COMBINATOR FUNCTIONS
mp-wp_genesis 3044 descendant: function(nodes) {
mp-wp_genesis 3045 var h = Selector.handlers;
mp-wp_genesis 3046 for (var i = 0, results = [], node; node = nodes[i]; i++)
mp-wp_genesis 3047 h.concat(results, node.getElementsByTagName('*'));
mp-wp_genesis 3048 return results;
mp-wp_genesis 3049 },
mp-wp_genesis 3050
mp-wp_genesis 3051 child: function(nodes) {
mp-wp_genesis 3052 var h = Selector.handlers;
mp-wp_genesis 3053 for (var i = 0, results = [], node; node = nodes[i]; i++) {
mp-wp_genesis 3054 for (var j = 0, children = [], child; child = node.childNodes[j]; j++)
mp-wp_genesis 3055 if (child.nodeType == 1 && child.tagName != '!') results.push(child);
mp-wp_genesis 3056 }
mp-wp_genesis 3057 return results;
mp-wp_genesis 3058 },
mp-wp_genesis 3059
mp-wp_genesis 3060 adjacent: function(nodes) {
mp-wp_genesis 3061 for (var i = 0, results = [], node; node = nodes[i]; i++) {
mp-wp_genesis 3062 var next = this.nextElementSibling(node);
mp-wp_genesis 3063 if (next) results.push(next);
mp-wp_genesis 3064 }
mp-wp_genesis 3065 return results;
mp-wp_genesis 3066 },
mp-wp_genesis 3067
mp-wp_genesis 3068 laterSibling: function(nodes) {
mp-wp_genesis 3069 var h = Selector.handlers;
mp-wp_genesis 3070 for (var i = 0, results = [], node; node = nodes[i]; i++)
mp-wp_genesis 3071 h.concat(results, Element.nextSiblings(node));
mp-wp_genesis 3072 return results;
mp-wp_genesis 3073 },
mp-wp_genesis 3074
mp-wp_genesis 3075 nextElementSibling: function(node) {
mp-wp_genesis 3076 while (node = node.nextSibling)
mp-wp_genesis 3077 if (node.nodeType == 1) return node;
mp-wp_genesis 3078 return null;
mp-wp_genesis 3079 },
mp-wp_genesis 3080
mp-wp_genesis 3081 previousElementSibling: function(node) {
mp-wp_genesis 3082 while (node = node.previousSibling)
mp-wp_genesis 3083 if (node.nodeType == 1) return node;
mp-wp_genesis 3084 return null;
mp-wp_genesis 3085 },
mp-wp_genesis 3086
mp-wp_genesis 3087 // TOKEN FUNCTIONS
mp-wp_genesis 3088 tagName: function(nodes, root, tagName, combinator) {
mp-wp_genesis 3089 tagName = tagName.toUpperCase();
mp-wp_genesis 3090 var results = [], h = Selector.handlers;
mp-wp_genesis 3091 if (nodes) {
mp-wp_genesis 3092 if (combinator) {
mp-wp_genesis 3093 // fastlane for ordinary descendant combinators
mp-wp_genesis 3094 if (combinator == "descendant") {
mp-wp_genesis 3095 for (var i = 0, node; node = nodes[i]; i++)
mp-wp_genesis 3096 h.concat(results, node.getElementsByTagName(tagName));
mp-wp_genesis 3097 return results;
mp-wp_genesis 3098 } else nodes = this[combinator](nodes);
mp-wp_genesis 3099 if (tagName == "*") return nodes;
mp-wp_genesis 3100 }
mp-wp_genesis 3101 for (var i = 0, node; node = nodes[i]; i++)
mp-wp_genesis 3102 if (node.tagName.toUpperCase() == tagName) results.push(node);
mp-wp_genesis 3103 return results;
mp-wp_genesis 3104 } else return root.getElementsByTagName(tagName);
mp-wp_genesis 3105 },
mp-wp_genesis 3106
mp-wp_genesis 3107 id: function(nodes, root, id, combinator) {
mp-wp_genesis 3108 var targetNode = $(id), h = Selector.handlers;
mp-wp_genesis 3109 if (!targetNode) return [];
mp-wp_genesis 3110 if (!nodes && root == document) return [targetNode];
mp-wp_genesis 3111 if (nodes) {
mp-wp_genesis 3112 if (combinator) {
mp-wp_genesis 3113 if (combinator == 'child') {
mp-wp_genesis 3114 for (var i = 0, node; node = nodes[i]; i++)
mp-wp_genesis 3115 if (targetNode.parentNode == node) return [targetNode];
mp-wp_genesis 3116 } else if (combinator == 'descendant') {
mp-wp_genesis 3117 for (var i = 0, node; node = nodes[i]; i++)
mp-wp_genesis 3118 if (Element.descendantOf(targetNode, node)) return [targetNode];
mp-wp_genesis 3119 } else if (combinator == 'adjacent') {
mp-wp_genesis 3120 for (var i = 0, node; node = nodes[i]; i++)
mp-wp_genesis 3121 if (Selector.handlers.previousElementSibling(targetNode) == node)
mp-wp_genesis 3122 return [targetNode];
mp-wp_genesis 3123 } else nodes = h[combinator](nodes);
mp-wp_genesis 3124 }
mp-wp_genesis 3125 for (var i = 0, node; node = nodes[i]; i++)
mp-wp_genesis 3126 if (node == targetNode) return [targetNode];
mp-wp_genesis 3127 return [];
mp-wp_genesis 3128 }
mp-wp_genesis 3129 return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : [];
mp-wp_genesis 3130 },
mp-wp_genesis 3131
mp-wp_genesis 3132 className: function(nodes, root, className, combinator) {
mp-wp_genesis 3133 if (nodes && combinator) nodes = this[combinator](nodes);
mp-wp_genesis 3134 return Selector.handlers.byClassName(nodes, root, className);
mp-wp_genesis 3135 },
mp-wp_genesis 3136
mp-wp_genesis 3137 byClassName: function(nodes, root, className) {
mp-wp_genesis 3138 if (!nodes) nodes = Selector.handlers.descendant([root]);
mp-wp_genesis 3139 var needle = ' ' + className + ' ';
mp-wp_genesis 3140 for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) {
mp-wp_genesis 3141 nodeClassName = node.className;
mp-wp_genesis 3142 if (nodeClassName.length == 0) continue;
mp-wp_genesis 3143 if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle))
mp-wp_genesis 3144 results.push(node);
mp-wp_genesis 3145 }
mp-wp_genesis 3146 return results;
mp-wp_genesis 3147 },
mp-wp_genesis 3148
mp-wp_genesis 3149 attrPresence: function(nodes, root, attr) {
mp-wp_genesis 3150 if (!nodes) nodes = root.getElementsByTagName("*");
mp-wp_genesis 3151 var results = [];
mp-wp_genesis 3152 for (var i = 0, node; node = nodes[i]; i++)
mp-wp_genesis 3153 if (Element.hasAttribute(node, attr)) results.push(node);
mp-wp_genesis 3154 return results;
mp-wp_genesis 3155 },
mp-wp_genesis 3156
mp-wp_genesis 3157 attr: function(nodes, root, attr, value, operator) {
mp-wp_genesis 3158 if (!nodes) nodes = root.getElementsByTagName("*");
mp-wp_genesis 3159 var handler = Selector.operators[operator], results = [];
mp-wp_genesis 3160 for (var i = 0, node; node = nodes[i]; i++) {
mp-wp_genesis 3161 var nodeValue = Element.readAttribute(node, attr);
mp-wp_genesis 3162 if (nodeValue === null) continue;
mp-wp_genesis 3163 if (handler(nodeValue, value)) results.push(node);
mp-wp_genesis 3164 }
mp-wp_genesis 3165 return results;
mp-wp_genesis 3166 },
mp-wp_genesis 3167
mp-wp_genesis 3168 pseudo: function(nodes, name, value, root, combinator) {
mp-wp_genesis 3169 if (nodes && combinator) nodes = this[combinator](nodes);
mp-wp_genesis 3170 if (!nodes) nodes = root.getElementsByTagName("*");
mp-wp_genesis 3171 return Selector.pseudos[name](nodes, value, root);
mp-wp_genesis 3172 }
mp-wp_genesis 3173 },
mp-wp_genesis 3174
mp-wp_genesis 3175 pseudos: {
mp-wp_genesis 3176 'first-child': function(nodes, value, root) {
mp-wp_genesis 3177 for (var i = 0, results = [], node; node = nodes[i]; i++) {
mp-wp_genesis 3178 if (Selector.handlers.previousElementSibling(node)) continue;
mp-wp_genesis 3179 results.push(node);
mp-wp_genesis 3180 }
mp-wp_genesis 3181 return results;
mp-wp_genesis 3182 },
mp-wp_genesis 3183 'last-child': function(nodes, value, root) {
mp-wp_genesis 3184 for (var i = 0, results = [], node; node = nodes[i]; i++) {
mp-wp_genesis 3185 if (Selector.handlers.nextElementSibling(node)) continue;
mp-wp_genesis 3186 results.push(node);
mp-wp_genesis 3187 }
mp-wp_genesis 3188 return results;
mp-wp_genesis 3189 },
mp-wp_genesis 3190 'only-child': function(nodes, value, root) {
mp-wp_genesis 3191 var h = Selector.handlers;
mp-wp_genesis 3192 for (var i = 0, results = [], node; node = nodes[i]; i++)
mp-wp_genesis 3193 if (!h.previousElementSibling(node) && !h.nextElementSibling(node))
mp-wp_genesis 3194 results.push(node);
mp-wp_genesis 3195 return results;
mp-wp_genesis 3196 },
mp-wp_genesis 3197 'nth-child': function(nodes, formula, root) {
mp-wp_genesis 3198 return Selector.pseudos.nth(nodes, formula, root);
mp-wp_genesis 3199 },
mp-wp_genesis 3200 'nth-last-child': function(nodes, formula, root) {
mp-wp_genesis 3201 return Selector.pseudos.nth(nodes, formula, root, true);
mp-wp_genesis 3202 },
mp-wp_genesis 3203 'nth-of-type': function(nodes, formula, root) {
mp-wp_genesis 3204 return Selector.pseudos.nth(nodes, formula, root, false, true);
mp-wp_genesis 3205 },
mp-wp_genesis 3206 'nth-last-of-type': function(nodes, formula, root) {
mp-wp_genesis 3207 return Selector.pseudos.nth(nodes, formula, root, true, true);
mp-wp_genesis 3208 },
mp-wp_genesis 3209 'first-of-type': function(nodes, formula, root) {
mp-wp_genesis 3210 return Selector.pseudos.nth(nodes, "1", root, false, true);
mp-wp_genesis 3211 },
mp-wp_genesis 3212 'last-of-type': function(nodes, formula, root) {
mp-wp_genesis 3213 return Selector.pseudos.nth(nodes, "1", root, true, true);
mp-wp_genesis 3214 },
mp-wp_genesis 3215 'only-of-type': function(nodes, formula, root) {
mp-wp_genesis 3216 var p = Selector.pseudos;
mp-wp_genesis 3217 return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root);
mp-wp_genesis 3218 },
mp-wp_genesis 3219
mp-wp_genesis 3220 // handles the an+b logic
mp-wp_genesis 3221 getIndices: function(a, b, total) {
mp-wp_genesis 3222 if (a == 0) return b > 0 ? [b] : [];
mp-wp_genesis 3223 return $R(1, total).inject([], function(memo, i) {
mp-wp_genesis 3224 if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i);
mp-wp_genesis 3225 return memo;
mp-wp_genesis 3226 });
mp-wp_genesis 3227 },
mp-wp_genesis 3228
mp-wp_genesis 3229 // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type
mp-wp_genesis 3230 nth: function(nodes, formula, root, reverse, ofType) {
mp-wp_genesis 3231 if (nodes.length == 0) return [];
mp-wp_genesis 3232 if (formula == 'even') formula = '2n+0';
mp-wp_genesis 3233 if (formula == 'odd') formula = '2n+1';
mp-wp_genesis 3234 var h = Selector.handlers, results = [], indexed = [], m;
mp-wp_genesis 3235 h.mark(nodes);
mp-wp_genesis 3236 for (var i = 0, node; node = nodes[i]; i++) {
mp-wp_genesis 3237 if (!node.parentNode._counted) {
mp-wp_genesis 3238 h.index(node.parentNode, reverse, ofType);
mp-wp_genesis 3239 indexed.push(node.parentNode);
mp-wp_genesis 3240 }
mp-wp_genesis 3241 }
mp-wp_genesis 3242 if (formula.match(/^\d+$/)) { // just a number
mp-wp_genesis 3243 formula = Number(formula);
mp-wp_genesis 3244 for (var i = 0, node; node = nodes[i]; i++)
mp-wp_genesis 3245 if (node.nodeIndex == formula) results.push(node);
mp-wp_genesis 3246 } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
mp-wp_genesis 3247 if (m[1] == "-") m[1] = -1;
mp-wp_genesis 3248 var a = m[1] ? Number(m[1]) : 1;
mp-wp_genesis 3249 var b = m[2] ? Number(m[2]) : 0;
mp-wp_genesis 3250 var indices = Selector.pseudos.getIndices(a, b, nodes.length);
mp-wp_genesis 3251 for (var i = 0, node, l = indices.length; node = nodes[i]; i++) {
mp-wp_genesis 3252 for (var j = 0; j < l; j++)
mp-wp_genesis 3253 if (node.nodeIndex == indices[j]) results.push(node);
mp-wp_genesis 3254 }
mp-wp_genesis 3255 }
mp-wp_genesis 3256 h.unmark(nodes);
mp-wp_genesis 3257 h.unmark(indexed);
mp-wp_genesis 3258 return results;
mp-wp_genesis 3259 },
mp-wp_genesis 3260
mp-wp_genesis 3261 'empty': function(nodes, value, root) {
mp-wp_genesis 3262 for (var i = 0, results = [], node; node = nodes[i]; i++) {
mp-wp_genesis 3263 // IE treats comments as element nodes
mp-wp_genesis 3264 if (node.tagName == '!' || (node.firstChild && !node.innerHTML.match(/^\s*$/))) continue;
mp-wp_genesis 3265 results.push(node);
mp-wp_genesis 3266 }
mp-wp_genesis 3267 return results;
mp-wp_genesis 3268 },
mp-wp_genesis 3269
mp-wp_genesis 3270 'not': function(nodes, selector, root) {
mp-wp_genesis 3271 var h = Selector.handlers, selectorType, m;
mp-wp_genesis 3272 var exclusions = new Selector(selector).findElements(root);
mp-wp_genesis 3273 h.mark(exclusions);
mp-wp_genesis 3274 for (var i = 0, results = [], node; node = nodes[i]; i++)
mp-wp_genesis 3275 if (!node._counted) results.push(node);
mp-wp_genesis 3276 h.unmark(exclusions);
mp-wp_genesis 3277 return results;
mp-wp_genesis 3278 },
mp-wp_genesis 3279
mp-wp_genesis 3280 'enabled': function(nodes, value, root) {
mp-wp_genesis 3281 for (var i = 0, results = [], node; node = nodes[i]; i++)
mp-wp_genesis 3282 if (!node.disabled) results.push(node);
mp-wp_genesis 3283 return results;
mp-wp_genesis 3284 },
mp-wp_genesis 3285
mp-wp_genesis 3286 'disabled': function(nodes, value, root) {
mp-wp_genesis 3287 for (var i = 0, results = [], node; node = nodes[i]; i++)
mp-wp_genesis 3288 if (node.disabled) results.push(node);
mp-wp_genesis 3289 return results;
mp-wp_genesis 3290 },
mp-wp_genesis 3291
mp-wp_genesis 3292 'checked': function(nodes, value, root) {
mp-wp_genesis 3293 for (var i = 0, results = [], node; node = nodes[i]; i++)
mp-wp_genesis 3294 if (node.checked) results.push(node);
mp-wp_genesis 3295 return results;
mp-wp_genesis 3296 }
mp-wp_genesis 3297 },
mp-wp_genesis 3298
mp-wp_genesis 3299 operators: {
mp-wp_genesis 3300 '=': function(nv, v) { return nv == v; },
mp-wp_genesis 3301 '!=': function(nv, v) { return nv != v; },
mp-wp_genesis 3302 '^=': function(nv, v) { return nv.startsWith(v); },
mp-wp_genesis 3303 '$=': function(nv, v) { return nv.endsWith(v); },
mp-wp_genesis 3304 '*=': function(nv, v) { return nv.include(v); },
mp-wp_genesis 3305 '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); },
mp-wp_genesis 3306 '|=': function(nv, v) { return ('-' + nv.toUpperCase() + '-').include('-' + v.toUpperCase() + '-'); }
mp-wp_genesis 3307 },
mp-wp_genesis 3308
mp-wp_genesis 3309 matchElements: function(elements, expression) {
mp-wp_genesis 3310 var matches = new Selector(expression).findElements(), h = Selector.handlers;
mp-wp_genesis 3311 h.mark(matches);
mp-wp_genesis 3312 for (var i = 0, results = [], element; element = elements[i]; i++)
mp-wp_genesis 3313 if (element._counted) results.push(element);
mp-wp_genesis 3314 h.unmark(matches);
mp-wp_genesis 3315 return results;
mp-wp_genesis 3316 },
mp-wp_genesis 3317
mp-wp_genesis 3318 findElement: function(elements, expression, index) {
mp-wp_genesis 3319 if (Object.isNumber(expression)) {
mp-wp_genesis 3320 index = expression; expression = false;
mp-wp_genesis 3321 }
mp-wp_genesis 3322 return Selector.matchElements(elements, expression || '*')[index || 0];
mp-wp_genesis 3323 },
mp-wp_genesis 3324
mp-wp_genesis 3325 findChildElements: function(element, expressions) {
mp-wp_genesis 3326 var exprs = expressions.join(','), expressions = [];
mp-wp_genesis 3327 exprs.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
mp-wp_genesis 3328 expressions.push(m[1].strip());
mp-wp_genesis 3329 });
mp-wp_genesis 3330 var results = [], h = Selector.handlers;
mp-wp_genesis 3331 for (var i = 0, l = expressions.length, selector; i < l; i++) {
mp-wp_genesis 3332 selector = new Selector(expressions[i].strip());
mp-wp_genesis 3333 h.concat(results, selector.findElements(element));
mp-wp_genesis 3334 }
mp-wp_genesis 3335 return (l > 1) ? h.unique(results) : results;
mp-wp_genesis 3336 }
mp-wp_genesis 3337 });
mp-wp_genesis 3338
mp-wp_genesis 3339 function $$() {
mp-wp_genesis 3340 return Selector.findChildElements(document, $A(arguments));
mp-wp_genesis 3341 }
mp-wp_genesis 3342 var Form = {
mp-wp_genesis 3343 reset: function(form) {
mp-wp_genesis 3344 $(form).reset();
mp-wp_genesis 3345 return form;
mp-wp_genesis 3346 },
mp-wp_genesis 3347
mp-wp_genesis 3348 serializeElements: function(elements, options) {
mp-wp_genesis 3349 if (typeof options != 'object') options = { hash: !!options };
mp-wp_genesis 3350 else if (options.hash === undefined) options.hash = true;
mp-wp_genesis 3351 var key, value, submitted = false, submit = options.submit;
mp-wp_genesis 3352
mp-wp_genesis 3353 var data = elements.inject({ }, function(result, element) {
mp-wp_genesis 3354 if (!element.disabled && element.name) {
mp-wp_genesis 3355 key = element.name; value = $(element).getValue();
mp-wp_genesis 3356 if (value != null && (element.type != 'submit' || (!submitted &&
mp-wp_genesis 3357 submit !== false && (!submit || key == submit) && (submitted = true)))) {
mp-wp_genesis 3358 if (key in result) {
mp-wp_genesis 3359 // a key is already present; construct an array of values
mp-wp_genesis 3360 if (!Object.isArray(result[key])) result[key] = [result[key]];
mp-wp_genesis 3361 result[key].push(value);
mp-wp_genesis 3362 }
mp-wp_genesis 3363 else result[key] = value;
mp-wp_genesis 3364 }
mp-wp_genesis 3365 }
mp-wp_genesis 3366 return result;
mp-wp_genesis 3367 });
mp-wp_genesis 3368
mp-wp_genesis 3369 return options.hash ? data : Object.toQueryString(data);
mp-wp_genesis 3370 }
mp-wp_genesis 3371 };
mp-wp_genesis 3372
mp-wp_genesis 3373 Form.Methods = {
mp-wp_genesis 3374 serialize: function(form, options) {
mp-wp_genesis 3375 return Form.serializeElements(Form.getElements(form), options);
mp-wp_genesis 3376 },
mp-wp_genesis 3377
mp-wp_genesis 3378 getElements: function(form) {
mp-wp_genesis 3379 return $A($(form).getElementsByTagName('*')).inject([],
mp-wp_genesis 3380 function(elements, child) {
mp-wp_genesis 3381 if (Form.Element.Serializers[child.tagName.toLowerCase()])
mp-wp_genesis 3382 elements.push(Element.extend(child));
mp-wp_genesis 3383 return elements;
mp-wp_genesis 3384 }
mp-wp_genesis 3385 );
mp-wp_genesis 3386 },
mp-wp_genesis 3387
mp-wp_genesis 3388 getInputs: function(form, typeName, name) {
mp-wp_genesis 3389 form = $(form);
mp-wp_genesis 3390 var inputs = form.getElementsByTagName('input');
mp-wp_genesis 3391
mp-wp_genesis 3392 if (!typeName && !name) return $A(inputs).map(Element.extend);
mp-wp_genesis 3393
mp-wp_genesis 3394 for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
mp-wp_genesis 3395 var input = inputs[i];
mp-wp_genesis 3396 if ((typeName && input.type != typeName) || (name && input.name != name))
mp-wp_genesis 3397 continue;
mp-wp_genesis 3398 matchingInputs.push(Element.extend(input));
mp-wp_genesis 3399 }
mp-wp_genesis 3400
mp-wp_genesis 3401 return matchingInputs;
mp-wp_genesis 3402 },
mp-wp_genesis 3403
mp-wp_genesis 3404 disable: function(form) {
mp-wp_genesis 3405 form = $(form);
mp-wp_genesis 3406 Form.getElements(form).invoke('disable');
mp-wp_genesis 3407 return form;
mp-wp_genesis 3408 },
mp-wp_genesis 3409
mp-wp_genesis 3410 enable: function(form) {
mp-wp_genesis 3411 form = $(form);
mp-wp_genesis 3412 Form.getElements(form).invoke('enable');
mp-wp_genesis 3413 return form;
mp-wp_genesis 3414 },
mp-wp_genesis 3415
mp-wp_genesis 3416 findFirstElement: function(form) {
mp-wp_genesis 3417 var elements = $(form).getElements().findAll(function(element) {
mp-wp_genesis 3418 return 'hidden' != element.type && !element.disabled;
mp-wp_genesis 3419 });
mp-wp_genesis 3420 var firstByIndex = elements.findAll(function(element) {
mp-wp_genesis 3421 return element.hasAttribute('tabIndex') && element.tabIndex >= 0;
mp-wp_genesis 3422 }).sortBy(function(element) { return element.tabIndex }).first();
mp-wp_genesis 3423
mp-wp_genesis 3424 return firstByIndex ? firstByIndex : elements.find(function(element) {
mp-wp_genesis 3425 return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
mp-wp_genesis 3426 });
mp-wp_genesis 3427 },
mp-wp_genesis 3428
mp-wp_genesis 3429 focusFirstElement: function(form) {
mp-wp_genesis 3430 form = $(form);
mp-wp_genesis 3431 form.findFirstElement().activate();
mp-wp_genesis 3432 return form;
mp-wp_genesis 3433 },
mp-wp_genesis 3434
mp-wp_genesis 3435 request: function(form, options) {
mp-wp_genesis 3436 form = $(form), options = Object.clone(options || { });
mp-wp_genesis 3437
mp-wp_genesis 3438 var params = options.parameters, action = form.readAttribute('action') || '';
mp-wp_genesis 3439 if (action.blank()) action = window.location.href;
mp-wp_genesis 3440 options.parameters = form.serialize(true);
mp-wp_genesis 3441
mp-wp_genesis 3442 if (params) {
mp-wp_genesis 3443 if (Object.isString(params)) params = params.toQueryParams();
mp-wp_genesis 3444 Object.extend(options.parameters, params);
mp-wp_genesis 3445 }
mp-wp_genesis 3446
mp-wp_genesis 3447 if (form.hasAttribute('method') && !options.method)
mp-wp_genesis 3448 options.method = form.method;
mp-wp_genesis 3449
mp-wp_genesis 3450 return new Ajax.Request(action, options);
mp-wp_genesis 3451 }
mp-wp_genesis 3452 };
mp-wp_genesis 3453
mp-wp_genesis 3454 /*--------------------------------------------------------------------------*/
mp-wp_genesis 3455
mp-wp_genesis 3456 Form.Element = {
mp-wp_genesis 3457 focus: function(element) {
mp-wp_genesis 3458 $(element).focus();
mp-wp_genesis 3459 return element;
mp-wp_genesis 3460 },
mp-wp_genesis 3461
mp-wp_genesis 3462 select: function(element) {
mp-wp_genesis 3463 $(element).select();
mp-wp_genesis 3464 return element;
mp-wp_genesis 3465 }
mp-wp_genesis 3466 };
mp-wp_genesis 3467
mp-wp_genesis 3468 Form.Element.Methods = {
mp-wp_genesis 3469 serialize: function(element) {
mp-wp_genesis 3470 element = $(element);
mp-wp_genesis 3471 if (!element.disabled && element.name) {
mp-wp_genesis 3472 var value = element.getValue();
mp-wp_genesis 3473 if (value != undefined) {
mp-wp_genesis 3474 var pair = { };
mp-wp_genesis 3475 pair[element.name] = value;
mp-wp_genesis 3476 return Object.toQueryString(pair);
mp-wp_genesis 3477 }
mp-wp_genesis 3478 }
mp-wp_genesis 3479 return '';
mp-wp_genesis 3480 },
mp-wp_genesis 3481
mp-wp_genesis 3482 getValue: function(element) {
mp-wp_genesis 3483 element = $(element);
mp-wp_genesis 3484 var method = element.tagName.toLowerCase();
mp-wp_genesis 3485 return Form.Element.Serializers[method](element);
mp-wp_genesis 3486 },
mp-wp_genesis 3487
mp-wp_genesis 3488 setValue: function(element, value) {
mp-wp_genesis 3489 element = $(element);
mp-wp_genesis 3490 var method = element.tagName.toLowerCase();
mp-wp_genesis 3491 Form.Element.Serializers[method](element, value);
mp-wp_genesis 3492 return element;
mp-wp_genesis 3493 },
mp-wp_genesis 3494
mp-wp_genesis 3495 clear: function(element) {
mp-wp_genesis 3496 $(element).value = '';
mp-wp_genesis 3497 return element;
mp-wp_genesis 3498 },
mp-wp_genesis 3499
mp-wp_genesis 3500 present: function(element) {
mp-wp_genesis 3501 return $(element).value != '';
mp-wp_genesis 3502 },
mp-wp_genesis 3503
mp-wp_genesis 3504 activate: function(element) {
mp-wp_genesis 3505 element = $(element);
mp-wp_genesis 3506 try {
mp-wp_genesis 3507 element.focus();
mp-wp_genesis 3508 if (element.select && (element.tagName.toLowerCase() != 'input' ||
mp-wp_genesis 3509 !['button', 'reset', 'submit'].include(element.type)))
mp-wp_genesis 3510 element.select();
mp-wp_genesis 3511 } catch (e) { }
mp-wp_genesis 3512 return element;
mp-wp_genesis 3513 },
mp-wp_genesis 3514
mp-wp_genesis 3515 disable: function(element) {
mp-wp_genesis 3516 element = $(element);
mp-wp_genesis 3517 element.blur();
mp-wp_genesis 3518 element.disabled = true;
mp-wp_genesis 3519 return element;
mp-wp_genesis 3520 },
mp-wp_genesis 3521
mp-wp_genesis 3522 enable: function(element) {
mp-wp_genesis 3523 element = $(element);
mp-wp_genesis 3524 element.disabled = false;
mp-wp_genesis 3525 return element;
mp-wp_genesis 3526 }
mp-wp_genesis 3527 };
mp-wp_genesis 3528
mp-wp_genesis 3529 /*--------------------------------------------------------------------------*/
mp-wp_genesis 3530
mp-wp_genesis 3531 var Field = Form.Element;
mp-wp_genesis 3532 var $F = Form.Element.Methods.getValue;
mp-wp_genesis 3533
mp-wp_genesis 3534 /*--------------------------------------------------------------------------*/
mp-wp_genesis 3535
mp-wp_genesis 3536 Form.Element.Serializers = {
mp-wp_genesis 3537 input: function(element, value) {
mp-wp_genesis 3538 switch (element.type.toLowerCase()) {
mp-wp_genesis 3539 case 'checkbox':
mp-wp_genesis 3540 case 'radio':
mp-wp_genesis 3541 return Form.Element.Serializers.inputSelector(element, value);
mp-wp_genesis 3542 default:
mp-wp_genesis 3543 return Form.Element.Serializers.textarea(element, value);
mp-wp_genesis 3544 }
mp-wp_genesis 3545 },
mp-wp_genesis 3546
mp-wp_genesis 3547 inputSelector: function(element, value) {
mp-wp_genesis 3548 if (value === undefined) return element.checked ? element.value : null;
mp-wp_genesis 3549 else element.checked = !!value;
mp-wp_genesis 3550 },
mp-wp_genesis 3551
mp-wp_genesis 3552 textarea: function(element, value) {
mp-wp_genesis 3553 if (value === undefined) return element.value;
mp-wp_genesis 3554 else element.value = value;
mp-wp_genesis 3555 },
mp-wp_genesis 3556
mp-wp_genesis 3557 select: function(element, index) {
mp-wp_genesis 3558 if (index === undefined)
mp-wp_genesis 3559 return this[element.type == 'select-one' ?
mp-wp_genesis 3560 'selectOne' : 'selectMany'](element);
mp-wp_genesis 3561 else {
mp-wp_genesis 3562 var opt, value, single = !Object.isArray(index);
mp-wp_genesis 3563 for (var i = 0, length = element.length; i < length; i++) {
mp-wp_genesis 3564 opt = element.options[i];
mp-wp_genesis 3565 value = this.optionValue(opt);
mp-wp_genesis 3566 if (single) {
mp-wp_genesis 3567 if (value == index) {
mp-wp_genesis 3568 opt.selected = true;
mp-wp_genesis 3569 return;
mp-wp_genesis 3570 }
mp-wp_genesis 3571 }
mp-wp_genesis 3572 else opt.selected = index.include(value);
mp-wp_genesis 3573 }
mp-wp_genesis 3574 }
mp-wp_genesis 3575 },
mp-wp_genesis 3576
mp-wp_genesis 3577 selectOne: function(element) {
mp-wp_genesis 3578 var index = element.selectedIndex;
mp-wp_genesis 3579 return index >= 0 ? this.optionValue(element.options[index]) : null;
mp-wp_genesis 3580 },
mp-wp_genesis 3581
mp-wp_genesis 3582 selectMany: function(element) {
mp-wp_genesis 3583 var values, length = element.length;
mp-wp_genesis 3584 if (!length) return null;
mp-wp_genesis 3585
mp-wp_genesis 3586 for (var i = 0, values = []; i < length; i++) {
mp-wp_genesis 3587 var opt = element.options[i];
mp-wp_genesis 3588 if (opt.selected) values.push(this.optionValue(opt));
mp-wp_genesis 3589 }
mp-wp_genesis 3590 return values;
mp-wp_genesis 3591 },
mp-wp_genesis 3592
mp-wp_genesis 3593 optionValue: function(opt) {
mp-wp_genesis 3594 // extend element because hasAttribute may not be native
mp-wp_genesis 3595 return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
mp-wp_genesis 3596 }
mp-wp_genesis 3597 };
mp-wp_genesis 3598
mp-wp_genesis 3599 /*--------------------------------------------------------------------------*/
mp-wp_genesis 3600
mp-wp_genesis 3601 Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
mp-wp_genesis 3602 initialize: function($super, element, frequency, callback) {
mp-wp_genesis 3603 $super(callback, frequency);
mp-wp_genesis 3604 this.element = $(element);
mp-wp_genesis 3605 this.lastValue = this.getValue();
mp-wp_genesis 3606 },
mp-wp_genesis 3607
mp-wp_genesis 3608 execute: function() {
mp-wp_genesis 3609 var value = this.getValue();
mp-wp_genesis 3610 if (Object.isString(this.lastValue) && Object.isString(value) ?
mp-wp_genesis 3611 this.lastValue != value : String(this.lastValue) != String(value)) {
mp-wp_genesis 3612 this.callback(this.element, value);
mp-wp_genesis 3613 this.lastValue = value;
mp-wp_genesis 3614 }
mp-wp_genesis 3615 }
mp-wp_genesis 3616 });
mp-wp_genesis 3617
mp-wp_genesis 3618 Form.Element.Observer = Class.create(Abstract.TimedObserver, {
mp-wp_genesis 3619 getValue: function() {
mp-wp_genesis 3620 return Form.Element.getValue(this.element);
mp-wp_genesis 3621 }
mp-wp_genesis 3622 });
mp-wp_genesis 3623
mp-wp_genesis 3624 Form.Observer = Class.create(Abstract.TimedObserver, {
mp-wp_genesis 3625 getValue: function() {
mp-wp_genesis 3626 return Form.serialize(this.element);
mp-wp_genesis 3627 }
mp-wp_genesis 3628 });
mp-wp_genesis 3629
mp-wp_genesis 3630 /*--------------------------------------------------------------------------*/
mp-wp_genesis 3631
mp-wp_genesis 3632 Abstract.EventObserver = Class.create({
mp-wp_genesis 3633 initialize: function(element, callback) {
mp-wp_genesis 3634 this.element = $(element);
mp-wp_genesis 3635 this.callback = callback;
mp-wp_genesis 3636
mp-wp_genesis 3637 this.lastValue = this.getValue();
mp-wp_genesis 3638 if (this.element.tagName.toLowerCase() == 'form')
mp-wp_genesis 3639 this.registerFormCallbacks();
mp-wp_genesis 3640 else
mp-wp_genesis 3641 this.registerCallback(this.element);
mp-wp_genesis 3642 },
mp-wp_genesis 3643
mp-wp_genesis 3644 onElementEvent: function() {
mp-wp_genesis 3645 var value = this.getValue();
mp-wp_genesis 3646 if (this.lastValue != value) {
mp-wp_genesis 3647 this.callback(this.element, value);
mp-wp_genesis 3648 this.lastValue = value;
mp-wp_genesis 3649 }
mp-wp_genesis 3650 },
mp-wp_genesis 3651
mp-wp_genesis 3652 registerFormCallbacks: function() {
mp-wp_genesis 3653 Form.getElements(this.element).each(this.registerCallback, this);
mp-wp_genesis 3654 },
mp-wp_genesis 3655
mp-wp_genesis 3656 registerCallback: function(element) {
mp-wp_genesis 3657 if (element.type) {
mp-wp_genesis 3658 switch (element.type.toLowerCase()) {
mp-wp_genesis 3659 case 'checkbox':
mp-wp_genesis 3660 case 'radio':
mp-wp_genesis 3661 Event.observe(element, 'click', this.onElementEvent.bind(this));
mp-wp_genesis 3662 break;
mp-wp_genesis 3663 default:
mp-wp_genesis 3664 Event.observe(element, 'change', this.onElementEvent.bind(this));
mp-wp_genesis 3665 break;
mp-wp_genesis 3666 }
mp-wp_genesis 3667 }
mp-wp_genesis 3668 }
mp-wp_genesis 3669 });
mp-wp_genesis 3670
mp-wp_genesis 3671 Form.Element.EventObserver = Class.create(Abstract.EventObserver, {
mp-wp_genesis 3672 getValue: function() {
mp-wp_genesis 3673 return Form.Element.getValue(this.element);
mp-wp_genesis 3674 }
mp-wp_genesis 3675 });
mp-wp_genesis 3676
mp-wp_genesis 3677 Form.EventObserver = Class.create(Abstract.EventObserver, {
mp-wp_genesis 3678 getValue: function() {
mp-wp_genesis 3679 return Form.serialize(this.element);
mp-wp_genesis 3680 }
mp-wp_genesis 3681 });
mp-wp_genesis 3682 if (!window.Event) var Event = { };
mp-wp_genesis 3683
mp-wp_genesis 3684 Object.extend(Event, {
mp-wp_genesis 3685 KEY_BACKSPACE: 8,
mp-wp_genesis 3686 KEY_TAB: 9,
mp-wp_genesis 3687 KEY_RETURN: 13,
mp-wp_genesis 3688 KEY_ESC: 27,
mp-wp_genesis 3689 KEY_LEFT: 37,
mp-wp_genesis 3690 KEY_UP: 38,
mp-wp_genesis 3691 KEY_RIGHT: 39,
mp-wp_genesis 3692 KEY_DOWN: 40,
mp-wp_genesis 3693 KEY_DELETE: 46,
mp-wp_genesis 3694 KEY_HOME: 36,
mp-wp_genesis 3695 KEY_END: 35,
mp-wp_genesis 3696 KEY_PAGEUP: 33,
mp-wp_genesis 3697 KEY_PAGEDOWN: 34,
mp-wp_genesis 3698 KEY_INSERT: 45,
mp-wp_genesis 3699
mp-wp_genesis 3700 cache: { },
mp-wp_genesis 3701
mp-wp_genesis 3702 relatedTarget: function(event) {
mp-wp_genesis 3703 var element;
mp-wp_genesis 3704 switch(event.type) {
mp-wp_genesis 3705 case 'mouseover': element = event.fromElement; break;
mp-wp_genesis 3706 case 'mouseout': element = event.toElement; break;
mp-wp_genesis 3707 default: return null;
mp-wp_genesis 3708 }
mp-wp_genesis 3709 return Element.extend(element);
mp-wp_genesis 3710 }
mp-wp_genesis 3711 });
mp-wp_genesis 3712
mp-wp_genesis 3713 Event.Methods = (function() {
mp-wp_genesis 3714 var isButton;
mp-wp_genesis 3715
mp-wp_genesis 3716 if (Prototype.Browser.IE) {
mp-wp_genesis 3717 var buttonMap = { 0: 1, 1: 4, 2: 2 };
mp-wp_genesis 3718 isButton = function(event, code) {
mp-wp_genesis 3719 return event.button == buttonMap[code];
mp-wp_genesis 3720 };
mp-wp_genesis 3721
mp-wp_genesis 3722 } else if (Prototype.Browser.WebKit) {
mp-wp_genesis 3723 isButton = function(event, code) {
mp-wp_genesis 3724 switch (code) {
mp-wp_genesis 3725 case 0: return event.which == 1 && !event.metaKey;
mp-wp_genesis 3726 case 1: return event.which == 1 && event.metaKey;
mp-wp_genesis 3727 default: return false;
mp-wp_genesis 3728 }
mp-wp_genesis 3729 };
mp-wp_genesis 3730
mp-wp_genesis 3731 } else {
mp-wp_genesis 3732 isButton = function(event, code) {
mp-wp_genesis 3733 return event.which ? (event.which === code + 1) : (event.button === code);
mp-wp_genesis 3734 };
mp-wp_genesis 3735 }
mp-wp_genesis 3736
mp-wp_genesis 3737 return {
mp-wp_genesis 3738 isLeftClick: function(event) { return isButton(event, 0) },
mp-wp_genesis 3739 isMiddleClick: function(event) { return isButton(event, 1) },
mp-wp_genesis 3740 isRightClick: function(event) { return isButton(event, 2) },
mp-wp_genesis 3741
mp-wp_genesis 3742 element: function(event) {
mp-wp_genesis 3743 var node = Event.extend(event).target;
mp-wp_genesis 3744 return Element.extend(node.nodeType == Node.TEXT_NODE ? node.parentNode : node);
mp-wp_genesis 3745 },
mp-wp_genesis 3746
mp-wp_genesis 3747 findElement: function(event, expression) {
mp-wp_genesis 3748 var element = Event.element(event);
mp-wp_genesis 3749 return element.match(expression) ? element : element.up(expression);
mp-wp_genesis 3750 },
mp-wp_genesis 3751
mp-wp_genesis 3752 pointer: function(event) {
mp-wp_genesis 3753 return {
mp-wp_genesis 3754 x: event.pageX || (event.clientX +
mp-wp_genesis 3755 (document.documentElement.scrollLeft || document.body.scrollLeft)),
mp-wp_genesis 3756 y: event.pageY || (event.clientY +
mp-wp_genesis 3757 (document.documentElement.scrollTop || document.body.scrollTop))
mp-wp_genesis 3758 };
mp-wp_genesis 3759 },
mp-wp_genesis 3760
mp-wp_genesis 3761 pointerX: function(event) { return Event.pointer(event).x },
mp-wp_genesis 3762 pointerY: function(event) { return Event.pointer(event).y },
mp-wp_genesis 3763
mp-wp_genesis 3764 stop: function(event) {
mp-wp_genesis 3765 Event.extend(event);
mp-wp_genesis 3766 event.preventDefault();
mp-wp_genesis 3767 event.stopPropagation();
mp-wp_genesis 3768 event.stopped = true;
mp-wp_genesis 3769 }
mp-wp_genesis 3770 };
mp-wp_genesis 3771 })();
mp-wp_genesis 3772
mp-wp_genesis 3773 Event.extend = (function() {
mp-wp_genesis 3774 var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
mp-wp_genesis 3775 m[name] = Event.Methods[name].methodize();
mp-wp_genesis 3776 return m;
mp-wp_genesis 3777 });
mp-wp_genesis 3778
mp-wp_genesis 3779 if (Prototype.Browser.IE) {
mp-wp_genesis 3780 Object.extend(methods, {
mp-wp_genesis 3781 stopPropagation: function() { this.cancelBubble = true },
mp-wp_genesis 3782 preventDefault: function() { this.returnValue = false },
mp-wp_genesis 3783 inspect: function() { return "[object Event]" }
mp-wp_genesis 3784 });
mp-wp_genesis 3785
mp-wp_genesis 3786 return function(event) {
mp-wp_genesis 3787 if (!event) return false;
mp-wp_genesis 3788 if (event._extendedByPrototype) return event;
mp-wp_genesis 3789
mp-wp_genesis 3790 event._extendedByPrototype = Prototype.emptyFunction;
mp-wp_genesis 3791 var pointer = Event.pointer(event);
mp-wp_genesis 3792 Object.extend(event, {
mp-wp_genesis 3793 target: event.srcElement,
mp-wp_genesis 3794 relatedTarget: Event.relatedTarget(event),
mp-wp_genesis 3795 pageX: pointer.x,
mp-wp_genesis 3796 pageY: pointer.y
mp-wp_genesis 3797 });
mp-wp_genesis 3798 return Object.extend(event, methods);
mp-wp_genesis 3799 };
mp-wp_genesis 3800
mp-wp_genesis 3801 } else {
mp-wp_genesis 3802 Event.prototype = Event.prototype || document.createEvent("HTMLEvents").__proto__;
mp-wp_genesis 3803 Object.extend(Event.prototype, methods);
mp-wp_genesis 3804 return Prototype.K;
mp-wp_genesis 3805 }
mp-wp_genesis 3806 })();
mp-wp_genesis 3807
mp-wp_genesis 3808 Object.extend(Event, (function() {
mp-wp_genesis 3809 var cache = Event.cache;
mp-wp_genesis 3810
mp-wp_genesis 3811 function getEventID(element) {
mp-wp_genesis 3812 if (element._eventID) return element._eventID;
mp-wp_genesis 3813 arguments.callee.id = arguments.callee.id || 1;
mp-wp_genesis 3814 return element._eventID = ++arguments.callee.id;
mp-wp_genesis 3815 }
mp-wp_genesis 3816
mp-wp_genesis 3817 function getDOMEventName(eventName) {
mp-wp_genesis 3818 if (eventName && eventName.include(':')) return "dataavailable";
mp-wp_genesis 3819 return eventName;
mp-wp_genesis 3820 }
mp-wp_genesis 3821
mp-wp_genesis 3822 function getCacheForID(id) {
mp-wp_genesis 3823 return cache[id] = cache[id] || { };
mp-wp_genesis 3824 }
mp-wp_genesis 3825
mp-wp_genesis 3826 function getWrappersForEventName(id, eventName) {
mp-wp_genesis 3827 var c = getCacheForID(id);
mp-wp_genesis 3828 return c[eventName] = c[eventName] || [];
mp-wp_genesis 3829 }
mp-wp_genesis 3830
mp-wp_genesis 3831 function createWrapper(element, eventName, handler) {
mp-wp_genesis 3832 var id = getEventID(element);
mp-wp_genesis 3833 var c = getWrappersForEventName(id, eventName);
mp-wp_genesis 3834 if (c.pluck("handler").include(handler)) return false;
mp-wp_genesis 3835
mp-wp_genesis 3836 var wrapper = function(event) {
mp-wp_genesis 3837 if (!Event || !Event.extend ||
mp-wp_genesis 3838 (event.eventName && event.eventName != eventName))
mp-wp_genesis 3839 return false;
mp-wp_genesis 3840
mp-wp_genesis 3841 Event.extend(event);
mp-wp_genesis 3842 handler.call(element, event)
mp-wp_genesis 3843 };
mp-wp_genesis 3844
mp-wp_genesis 3845 wrapper.handler = handler;
mp-wp_genesis 3846 c.push(wrapper);
mp-wp_genesis 3847 return wrapper;
mp-wp_genesis 3848 }
mp-wp_genesis 3849
mp-wp_genesis 3850 function findWrapper(id, eventName, handler) {
mp-wp_genesis 3851 var c = getWrappersForEventName(id, eventName);
mp-wp_genesis 3852 return c.find(function(wrapper) { return wrapper.handler == handler });
mp-wp_genesis 3853 }
mp-wp_genesis 3854
mp-wp_genesis 3855 function destroyWrapper(id, eventName, handler) {
mp-wp_genesis 3856 var c = getCacheForID(id);
mp-wp_genesis 3857 if (!c[eventName]) return false;
mp-wp_genesis 3858 c[eventName] = c[eventName].without(findWrapper(id, eventName, handler));
mp-wp_genesis 3859 }
mp-wp_genesis 3860
mp-wp_genesis 3861 function destroyCache() {
mp-wp_genesis 3862 for (var id in cache)
mp-wp_genesis 3863 for (var eventName in cache[id])
mp-wp_genesis 3864 cache[id][eventName] = null;
mp-wp_genesis 3865 }
mp-wp_genesis 3866
mp-wp_genesis 3867 if (window.attachEvent) {
mp-wp_genesis 3868 window.attachEvent("onunload", destroyCache);
mp-wp_genesis 3869 }
mp-wp_genesis 3870
mp-wp_genesis 3871 return {
mp-wp_genesis 3872 observe: function(element, eventName, handler) {
mp-wp_genesis 3873 element = $(element);
mp-wp_genesis 3874 var name = getDOMEventName(eventName);
mp-wp_genesis 3875
mp-wp_genesis 3876 var wrapper = createWrapper(element, eventName, handler);
mp-wp_genesis 3877 if (!wrapper) return element;
mp-wp_genesis 3878
mp-wp_genesis 3879 if (element.addEventListener) {
mp-wp_genesis 3880 element.addEventListener(name, wrapper, false);
mp-wp_genesis 3881 } else {
mp-wp_genesis 3882 element.attachEvent("on" + name, wrapper);
mp-wp_genesis 3883 }
mp-wp_genesis 3884
mp-wp_genesis 3885 return element;
mp-wp_genesis 3886 },
mp-wp_genesis 3887
mp-wp_genesis 3888 stopObserving: function(element, eventName, handler) {
mp-wp_genesis 3889 element = $(element);
mp-wp_genesis 3890 var id = getEventID(element), name = getDOMEventName(eventName);
mp-wp_genesis 3891
mp-wp_genesis 3892 if (!handler && eventName) {
mp-wp_genesis 3893 getWrappersForEventName(id, eventName).each(function(wrapper) {
mp-wp_genesis 3894 element.stopObserving(eventName, wrapper.handler);
mp-wp_genesis 3895 });
mp-wp_genesis 3896 return element;
mp-wp_genesis 3897
mp-wp_genesis 3898 } else if (!eventName) {
mp-wp_genesis 3899 Object.keys(getCacheForID(id)).each(function(eventName) {
mp-wp_genesis 3900 element.stopObserving(eventName);
mp-wp_genesis 3901 });
mp-wp_genesis 3902 return element;
mp-wp_genesis 3903 }
mp-wp_genesis 3904
mp-wp_genesis 3905 var wrapper = findWrapper(id, eventName, handler);
mp-wp_genesis 3906 if (!wrapper) return element;
mp-wp_genesis 3907
mp-wp_genesis 3908 if (element.removeEventListener) {
mp-wp_genesis 3909 element.removeEventListener(name, wrapper, false);
mp-wp_genesis 3910 } else {
mp-wp_genesis 3911 element.detachEvent("on" + name, wrapper);
mp-wp_genesis 3912 }
mp-wp_genesis 3913
mp-wp_genesis 3914 destroyWrapper(id, eventName, handler);
mp-wp_genesis 3915
mp-wp_genesis 3916 return element;
mp-wp_genesis 3917 },
mp-wp_genesis 3918
mp-wp_genesis 3919 fire: function(element, eventName, memo) {
mp-wp_genesis 3920 element = $(element);
mp-wp_genesis 3921 if (element == document && document.createEvent && !element.dispatchEvent)
mp-wp_genesis 3922 element = document.documentElement;
mp-wp_genesis 3923
mp-wp_genesis 3924 if (document.createEvent) {
mp-wp_genesis 3925 var event = document.createEvent("HTMLEvents");
mp-wp_genesis 3926 event.initEvent("dataavailable", true, true);
mp-wp_genesis 3927 } else {
mp-wp_genesis 3928 var event = document.createEventObject();
mp-wp_genesis 3929 event.eventType = "ondataavailable";
mp-wp_genesis 3930 }
mp-wp_genesis 3931
mp-wp_genesis 3932 event.eventName = eventName;
mp-wp_genesis 3933 event.memo = memo || { };
mp-wp_genesis 3934
mp-wp_genesis 3935 if (document.createEvent) {
mp-wp_genesis 3936 element.dispatchEvent(event);
mp-wp_genesis 3937 } else {
mp-wp_genesis 3938 element.fireEvent(event.eventType, event);
mp-wp_genesis 3939 }
mp-wp_genesis 3940
mp-wp_genesis 3941 return event;
mp-wp_genesis 3942 }
mp-wp_genesis 3943 };
mp-wp_genesis 3944 })());
mp-wp_genesis 3945
mp-wp_genesis 3946 Object.extend(Event, Event.Methods);
mp-wp_genesis 3947
mp-wp_genesis 3948 Element.addMethods({
mp-wp_genesis 3949 fire: Event.fire,
mp-wp_genesis 3950 observe: Event.observe,
mp-wp_genesis 3951 stopObserving: Event.stopObserving
mp-wp_genesis 3952 });
mp-wp_genesis 3953
mp-wp_genesis 3954 Object.extend(document, {
mp-wp_genesis 3955 fire: Element.Methods.fire.methodize(),
mp-wp_genesis 3956 observe: Element.Methods.observe.methodize(),
mp-wp_genesis 3957 stopObserving: Element.Methods.stopObserving.methodize()
mp-wp_genesis 3958 });
mp-wp_genesis 3959
mp-wp_genesis 3960 (function() {
mp-wp_genesis 3961 /* Support for the DOMContentLoaded event is based on work by Dan Webb,
mp-wp_genesis 3962 Matthias Miller, Dean Edwards and John Resig. */
mp-wp_genesis 3963
mp-wp_genesis 3964 var timer, fired = false;
mp-wp_genesis 3965
mp-wp_genesis 3966 function fireContentLoadedEvent() {
mp-wp_genesis 3967 if (fired) return;
mp-wp_genesis 3968 if (timer) window.clearInterval(timer);
mp-wp_genesis 3969 document.fire("dom:loaded");
mp-wp_genesis 3970 fired = true;
mp-wp_genesis 3971 }
mp-wp_genesis 3972
mp-wp_genesis 3973 if (document.addEventListener) {
mp-wp_genesis 3974 if (Prototype.Browser.WebKit) {
mp-wp_genesis 3975 timer = window.setInterval(function() {
mp-wp_genesis 3976 if (/loaded|complete/.test(document.readyState))
mp-wp_genesis 3977 fireContentLoadedEvent();
mp-wp_genesis 3978 }, 0);
mp-wp_genesis 3979
mp-wp_genesis 3980 Event.observe(window, "load", fireContentLoadedEvent);
mp-wp_genesis 3981
mp-wp_genesis 3982 } else {
mp-wp_genesis 3983 document.addEventListener("DOMContentLoaded",
mp-wp_genesis 3984 fireContentLoadedEvent, false);
mp-wp_genesis 3985 }
mp-wp_genesis 3986
mp-wp_genesis 3987 } else {
mp-wp_genesis 3988 document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");
mp-wp_genesis 3989 $("__onDOMContentLoaded").onreadystatechange = function() {
mp-wp_genesis 3990 if (this.readyState == "complete") {
mp-wp_genesis 3991 this.onreadystatechange = null;
mp-wp_genesis 3992 fireContentLoadedEvent();
mp-wp_genesis 3993 }
mp-wp_genesis 3994 };
mp-wp_genesis 3995 }
mp-wp_genesis 3996 })();
mp-wp_genesis 3997 /*------------------------------- DEPRECATED -------------------------------*/
mp-wp_genesis 3998
mp-wp_genesis 3999 Hash.toQueryString = Object.toQueryString;
mp-wp_genesis 4000
mp-wp_genesis 4001 var Toggle = { display: Element.toggle };
mp-wp_genesis 4002
mp-wp_genesis 4003 Element.Methods.childOf = Element.Methods.descendantOf;
mp-wp_genesis 4004
mp-wp_genesis 4005 var Insertion = {
mp-wp_genesis 4006 Before: function(element, content) {
mp-wp_genesis 4007 return Element.insert(element, {before:content});
mp-wp_genesis 4008 },
mp-wp_genesis 4009
mp-wp_genesis 4010 Top: function(element, content) {
mp-wp_genesis 4011 return Element.insert(element, {top:content});
mp-wp_genesis 4012 },
mp-wp_genesis 4013
mp-wp_genesis 4014 Bottom: function(element, content) {
mp-wp_genesis 4015 return Element.insert(element, {bottom:content});
mp-wp_genesis 4016 },
mp-wp_genesis 4017
mp-wp_genesis 4018 After: function(element, content) {
mp-wp_genesis 4019 return Element.insert(element, {after:content});
mp-wp_genesis 4020 }
mp-wp_genesis 4021 };
mp-wp_genesis 4022
mp-wp_genesis 4023 var $continue = new Error('"throw $continue" is deprecated, use "return" instead');
mp-wp_genesis 4024
mp-wp_genesis 4025 // This should be moved to script.aculo.us; notice the deprecated methods
mp-wp_genesis 4026 // further below, that map to the newer Element methods.
mp-wp_genesis 4027 var Position = {
mp-wp_genesis 4028 // set to true if needed, warning: firefox performance problems
mp-wp_genesis 4029 // NOT neeeded for page scrolling, only if draggable contained in
mp-wp_genesis 4030 // scrollable elements
mp-wp_genesis 4031 includeScrollOffsets: false,
mp-wp_genesis 4032
mp-wp_genesis 4033 // must be called before calling withinIncludingScrolloffset, every time the
mp-wp_genesis 4034 // page is scrolled
mp-wp_genesis 4035 prepare: function() {
mp-wp_genesis 4036 this.deltaX = window.pageXOffset
mp-wp_genesis 4037 || document.documentElement.scrollLeft
mp-wp_genesis 4038 || document.body.scrollLeft
mp-wp_genesis 4039 || 0;
mp-wp_genesis 4040 this.deltaY = window.pageYOffset
mp-wp_genesis 4041 || document.documentElement.scrollTop
mp-wp_genesis 4042 || document.body.scrollTop
mp-wp_genesis 4043 || 0;
mp-wp_genesis 4044 },
mp-wp_genesis 4045
mp-wp_genesis 4046 // caches x/y coordinate pair to use with overlap
mp-wp_genesis 4047 within: function(element, x, y) {
mp-wp_genesis 4048 if (this.includeScrollOffsets)
mp-wp_genesis 4049 return this.withinIncludingScrolloffsets(element, x, y);
mp-wp_genesis 4050 this.xcomp = x;
mp-wp_genesis 4051 this.ycomp = y;
mp-wp_genesis 4052 this.offset = Element.cumulativeOffset(element);
mp-wp_genesis 4053
mp-wp_genesis 4054 return (y >= this.offset[1] &&
mp-wp_genesis 4055 y < this.offset[1] + element.offsetHeight &&
mp-wp_genesis 4056 x >= this.offset[0] &&
mp-wp_genesis 4057 x < this.offset[0] + element.offsetWidth);
mp-wp_genesis 4058 },
mp-wp_genesis 4059
mp-wp_genesis 4060 withinIncludingScrolloffsets: function(element, x, y) {
mp-wp_genesis 4061 var offsetcache = Element.cumulativeScrollOffset(element);
mp-wp_genesis 4062
mp-wp_genesis 4063 this.xcomp = x + offsetcache[0] - this.deltaX;
mp-wp_genesis 4064 this.ycomp = y + offsetcache[1] - this.deltaY;
mp-wp_genesis 4065 this.offset = Element.cumulativeOffset(element);
mp-wp_genesis 4066
mp-wp_genesis 4067 return (this.ycomp >= this.offset[1] &&
mp-wp_genesis 4068 this.ycomp < this.offset[1] + element.offsetHeight &&
mp-wp_genesis 4069 this.xcomp >= this.offset[0] &&
mp-wp_genesis 4070 this.xcomp < this.offset[0] + element.offsetWidth);
mp-wp_genesis 4071 },
mp-wp_genesis 4072
mp-wp_genesis 4073 // within must be called directly before
mp-wp_genesis 4074 overlap: function(mode, element) {
mp-wp_genesis 4075 if (!mode) return 0;
mp-wp_genesis 4076 if (mode == 'vertical')
mp-wp_genesis 4077 return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
mp-wp_genesis 4078 element.offsetHeight;
mp-wp_genesis 4079 if (mode == 'horizontal')
mp-wp_genesis 4080 return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
mp-wp_genesis 4081 element.offsetWidth;
mp-wp_genesis 4082 },
mp-wp_genesis 4083
mp-wp_genesis 4084 // Deprecation layer -- use newer Element methods now (1.5.2).
mp-wp_genesis 4085
mp-wp_genesis 4086 cumulativeOffset: Element.Methods.cumulativeOffset,
mp-wp_genesis 4087
mp-wp_genesis 4088 positionedOffset: Element.Methods.positionedOffset,
mp-wp_genesis 4089
mp-wp_genesis 4090 absolutize: function(element) {
mp-wp_genesis 4091 Position.prepare();
mp-wp_genesis 4092 return Element.absolutize(element);
mp-wp_genesis 4093 },
mp-wp_genesis 4094
mp-wp_genesis 4095 relativize: function(element) {
mp-wp_genesis 4096 Position.prepare();
mp-wp_genesis 4097 return Element.relativize(element);
mp-wp_genesis 4098 },
mp-wp_genesis 4099
mp-wp_genesis 4100 realOffset: Element.Methods.cumulativeScrollOffset,
mp-wp_genesis 4101
mp-wp_genesis 4102 offsetParent: Element.Methods.getOffsetParent,
mp-wp_genesis 4103
mp-wp_genesis 4104 page: Element.Methods.viewportOffset,
mp-wp_genesis 4105
mp-wp_genesis 4106 clone: function(source, target, options) {
mp-wp_genesis 4107 options = options || { };
mp-wp_genesis 4108 return Element.clonePosition(target, source, options);
mp-wp_genesis 4109 }
mp-wp_genesis 4110 };
mp-wp_genesis 4111
mp-wp_genesis 4112 /*--------------------------------------------------------------------------*/
mp-wp_genesis 4113
mp-wp_genesis 4114 if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){
mp-wp_genesis 4115 function iter(name) {
mp-wp_genesis 4116 return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]";
mp-wp_genesis 4117 }
mp-wp_genesis 4118
mp-wp_genesis 4119 instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?
mp-wp_genesis 4120 function(element, className) {
mp-wp_genesis 4121 className = className.toString().strip();
mp-wp_genesis 4122 var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className);
mp-wp_genesis 4123 return cond ? document._getElementsByXPath('.//*' + cond, element) : [];
mp-wp_genesis 4124 } : function(element, className) {
mp-wp_genesis 4125 className = className.toString().strip();
mp-wp_genesis 4126 var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
mp-wp_genesis 4127 if (!classNames && !className) return elements;
mp-wp_genesis 4128
mp-wp_genesis 4129 var nodes = $(element).getElementsByTagName('*');
mp-wp_genesis 4130 className = ' ' + className + ' ';
mp-wp_genesis 4131
mp-wp_genesis 4132 for (var i = 0, child, cn; child = nodes[i]; i++) {
mp-wp_genesis 4133 if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||
mp-wp_genesis 4134 (classNames && classNames.all(function(name) {
mp-wp_genesis 4135 return !name.toString().blank() && cn.include(' ' + name + ' ');
mp-wp_genesis 4136 }))))
mp-wp_genesis 4137 elements.push(Element.extend(child));
mp-wp_genesis 4138 }
mp-wp_genesis 4139 return elements;
mp-wp_genesis 4140 };
mp-wp_genesis 4141
mp-wp_genesis 4142 return function(className, parentElement) {
mp-wp_genesis 4143 return $(parentElement || document.body).getElementsByClassName(className);
mp-wp_genesis 4144 };
mp-wp_genesis 4145 }(Element.Methods);
mp-wp_genesis 4146
mp-wp_genesis 4147 /*--------------------------------------------------------------------------*/
mp-wp_genesis 4148
mp-wp_genesis 4149 Element.ClassNames = Class.create();
mp-wp_genesis 4150 Element.ClassNames.prototype = {
mp-wp_genesis 4151 initialize: function(element) {
mp-wp_genesis 4152 this.element = $(element);
mp-wp_genesis 4153 },
mp-wp_genesis 4154
mp-wp_genesis 4155 _each: function(iterator) {
mp-wp_genesis 4156 this.element.className.split(/\s+/).select(function(name) {
mp-wp_genesis 4157 return name.length > 0;
mp-wp_genesis 4158 })._each(iterator);
mp-wp_genesis 4159 },
mp-wp_genesis 4160
mp-wp_genesis 4161 set: function(className) {
mp-wp_genesis 4162 this.element.className = className;
mp-wp_genesis 4163 },
mp-wp_genesis 4164
mp-wp_genesis 4165 add: function(classNameToAdd) {
mp-wp_genesis 4166 if (this.include(classNameToAdd)) return;
mp-wp_genesis 4167 this.set($A(this).concat(classNameToAdd).join(' '));
mp-wp_genesis 4168 },
mp-wp_genesis 4169
mp-wp_genesis 4170 remove: function(classNameToRemove) {
mp-wp_genesis 4171 if (!this.include(classNameToRemove)) return;
mp-wp_genesis 4172 this.set($A(this).without(classNameToRemove).join(' '));
mp-wp_genesis 4173 },
mp-wp_genesis 4174
mp-wp_genesis 4175 toString: function() {
mp-wp_genesis 4176 return $A(this).join(' ');
mp-wp_genesis 4177 }
mp-wp_genesis 4178 };
mp-wp_genesis 4179
mp-wp_genesis 4180 Object.extend(Element.ClassNames.prototype, Enumerable);
mp-wp_genesis 4181
mp-wp_genesis 4182 /*--------------------------------------------------------------------------*/
mp-wp_genesis 4183
mp-wp_genesis 4184 Element.addMethods();