Mercurial > laserkard
changeset 37:021a9ab1ed5b laserkard
[svn r38] added echo.pl, a test program for the backend of the website
author | rlm |
---|---|
date | Sun, 24 Jan 2010 09:37:47 -0500 |
parents | bb048e29406b |
children | 07c19a58ba5a |
files | awesome_js/Base64.js awesome_js/prototype.js buy.html buy.pl data.xml echo.css echo.html echo.pl faq.css generatecard.html log/error_log.log megamail.pl out.svg out.xml paypal/basic_acrylic_clear.paylist paypal/basic_acrylic_green.paylist paypal/big_acrylic_clear.paylist paypal/big_acrylic_green.paylist paypal/classic_acrylic_clear.paylist paypal/classic_acrylic_green.paylist paypal/generate_paylists.pm paypal/lines_acrylic_clear.paylist paypal/lines_acrylic_green.paylist svgparsetest.pl test.html |
diffstat | 25 files changed, 5742 insertions(+), 47 deletions(-) [+] |
line wrap: on
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/awesome_js/Base64.js Sun Jan 24 09:37:47 2010 -0500 1.3 @@ -0,0 +1,142 @@ 1.4 +/** 1.5 +* 1.6 +* Base64 encode / decode 1.7 +* http://www.webtoolkit.info/ 1.8 +* 1.9 +**/ 1.10 + 1.11 +var Base64 = { 1.12 + 1.13 + // private property 1.14 + _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", 1.15 + 1.16 + // public method for encoding 1.17 + encode : function (input) { 1.18 + var output = ""; 1.19 + var chr1, chr2, chr3, enc1, enc2, enc3, enc4; 1.20 + var i = 0; 1.21 + 1.22 + input = Base64._utf8_encode(input); 1.23 + 1.24 + while (i < input.length) { 1.25 + 1.26 + chr1 = input.charCodeAt(i++); 1.27 + chr2 = input.charCodeAt(i++); 1.28 + chr3 = input.charCodeAt(i++); 1.29 + 1.30 + enc1 = chr1 >> 2; 1.31 + enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); 1.32 + enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); 1.33 + enc4 = chr3 & 63; 1.34 + 1.35 + if (isNaN(chr2)) { 1.36 + enc3 = enc4 = 64; 1.37 + } else if (isNaN(chr3)) { 1.38 + enc4 = 64; 1.39 + } 1.40 + 1.41 + output = output + 1.42 + this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) + 1.43 + this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4); 1.44 + 1.45 + } 1.46 + 1.47 + return output; 1.48 + }, 1.49 + 1.50 + // public method for decoding 1.51 + decode : function (input) { 1.52 + var output = ""; 1.53 + var chr1, chr2, chr3; 1.54 + var enc1, enc2, enc3, enc4; 1.55 + var i = 0; 1.56 + 1.57 + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); 1.58 + 1.59 + while (i < input.length) { 1.60 + 1.61 + enc1 = this._keyStr.indexOf(input.charAt(i++)); 1.62 + enc2 = this._keyStr.indexOf(input.charAt(i++)); 1.63 + enc3 = this._keyStr.indexOf(input.charAt(i++)); 1.64 + enc4 = this._keyStr.indexOf(input.charAt(i++)); 1.65 + 1.66 + chr1 = (enc1 << 2) | (enc2 >> 4); 1.67 + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); 1.68 + chr3 = ((enc3 & 3) << 6) | enc4; 1.69 + 1.70 + output = output + String.fromCharCode(chr1); 1.71 + 1.72 + if (enc3 != 64) { 1.73 + output = output + String.fromCharCode(chr2); 1.74 + } 1.75 + if (enc4 != 64) { 1.76 + output = output + String.fromCharCode(chr3); 1.77 + } 1.78 + 1.79 + } 1.80 + 1.81 + output = Base64._utf8_decode(output); 1.82 + 1.83 + return output; 1.84 + 1.85 + }, 1.86 + 1.87 + // private method for UTF-8 encoding 1.88 + _utf8_encode : function (string) { 1.89 + string = string.replace(/\r\n/g,"\n"); 1.90 + var utftext = ""; 1.91 + 1.92 + for (var n = 0; n < string.length; n++) { 1.93 + 1.94 + var c = string.charCodeAt(n); 1.95 + 1.96 + if (c < 128) { 1.97 + utftext += String.fromCharCode(c); 1.98 + } 1.99 + else if((c > 127) && (c < 2048)) { 1.100 + utftext += String.fromCharCode((c >> 6) | 192); 1.101 + utftext += String.fromCharCode((c & 63) | 128); 1.102 + } 1.103 + else { 1.104 + utftext += String.fromCharCode((c >> 12) | 224); 1.105 + utftext += String.fromCharCode(((c >> 6) & 63) | 128); 1.106 + utftext += String.fromCharCode((c & 63) | 128); 1.107 + } 1.108 + 1.109 + } 1.110 + 1.111 + return utftext; 1.112 + }, 1.113 + 1.114 + // private method for UTF-8 decoding 1.115 + _utf8_decode : function (utftext) { 1.116 + var string = ""; 1.117 + var i = 0; 1.118 + var c = c1 = c2 = 0; 1.119 + 1.120 + while ( i < utftext.length ) { 1.121 + 1.122 + c = utftext.charCodeAt(i); 1.123 + 1.124 + if (c < 128) { 1.125 + string += String.fromCharCode(c); 1.126 + i++; 1.127 + } 1.128 + else if((c > 191) && (c < 224)) { 1.129 + c2 = utftext.charCodeAt(i+1); 1.130 + string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); 1.131 + i += 2; 1.132 + } 1.133 + else { 1.134 + c2 = utftext.charCodeAt(i+1); 1.135 + c3 = utftext.charCodeAt(i+2); 1.136 + string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); 1.137 + i += 3; 1.138 + } 1.139 + 1.140 + } 1.141 + 1.142 + return string; 1.143 + } 1.144 + 1.145 +}
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 2.2 +++ b/awesome_js/prototype.js Sun Jan 24 09:37:47 2010 -0500 2.3 @@ -0,0 +1,4874 @@ 2.4 +/* Prototype JavaScript framework, version 1.6.1 2.5 + * (c) 2005-2009 Sam Stephenson 2.6 + * 2.7 + * Prototype is freely distributable under the terms of an MIT-style license. 2.8 + * For details, see the Prototype web site: http://www.prototypejs.org/ 2.9 + * 2.10 + *--------------------------------------------------------------------------*/ 2.11 + 2.12 +var Prototype = { 2.13 + Version: '1.6.1', 2.14 + 2.15 + Browser: (function(){ 2.16 + var ua = navigator.userAgent; 2.17 + var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]'; 2.18 + return { 2.19 + IE: !!window.attachEvent && !isOpera, 2.20 + Opera: isOpera, 2.21 + WebKit: ua.indexOf('AppleWebKit/') > -1, 2.22 + Gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1, 2.23 + MobileSafari: /Apple.*Mobile.*Safari/.test(ua) 2.24 + } 2.25 + })(), 2.26 + 2.27 + BrowserFeatures: { 2.28 + XPath: !!document.evaluate, 2.29 + SelectorsAPI: !!document.querySelector, 2.30 + ElementExtensions: (function() { 2.31 + var constructor = window.Element || window.HTMLElement; 2.32 + return !!(constructor && constructor.prototype); 2.33 + })(), 2.34 + SpecificElementExtensions: (function() { 2.35 + if (typeof window.HTMLDivElement !== 'undefined') 2.36 + return true; 2.37 + 2.38 + var div = document.createElement('div'); 2.39 + var form = document.createElement('form'); 2.40 + var isSupported = false; 2.41 + 2.42 + if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) { 2.43 + isSupported = true; 2.44 + } 2.45 + 2.46 + div = form = null; 2.47 + 2.48 + return isSupported; 2.49 + })() 2.50 + }, 2.51 + 2.52 + ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>', 2.53 + JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/, 2.54 + 2.55 + emptyFunction: function() { }, 2.56 + K: function(x) { return x } 2.57 +}; 2.58 + 2.59 +if (Prototype.Browser.MobileSafari) 2.60 + Prototype.BrowserFeatures.SpecificElementExtensions = false; 2.61 + 2.62 + 2.63 +var Abstract = { }; 2.64 + 2.65 + 2.66 +var Try = { 2.67 + these: function() { 2.68 + var returnValue; 2.69 + 2.70 + for (var i = 0, length = arguments.length; i < length; i++) { 2.71 + var lambda = arguments[i]; 2.72 + try { 2.73 + returnValue = lambda(); 2.74 + break; 2.75 + } catch (e) { } 2.76 + } 2.77 + 2.78 + return returnValue; 2.79 + } 2.80 +}; 2.81 + 2.82 +/* Based on Alex Arnell's inheritance implementation. */ 2.83 + 2.84 +var Class = (function() { 2.85 + function subclass() {}; 2.86 + function create() { 2.87 + var parent = null, properties = $A(arguments); 2.88 + if (Object.isFunction(properties[0])) 2.89 + parent = properties.shift(); 2.90 + 2.91 + function klass() { 2.92 + this.initialize.apply(this, arguments); 2.93 + } 2.94 + 2.95 + Object.extend(klass, Class.Methods); 2.96 + klass.superclass = parent; 2.97 + klass.subclasses = []; 2.98 + 2.99 + if (parent) { 2.100 + subclass.prototype = parent.prototype; 2.101 + klass.prototype = new subclass; 2.102 + parent.subclasses.push(klass); 2.103 + } 2.104 + 2.105 + for (var i = 0; i < properties.length; i++) 2.106 + klass.addMethods(properties[i]); 2.107 + 2.108 + if (!klass.prototype.initialize) 2.109 + klass.prototype.initialize = Prototype.emptyFunction; 2.110 + 2.111 + klass.prototype.constructor = klass; 2.112 + return klass; 2.113 + } 2.114 + 2.115 + function addMethods(source) { 2.116 + var ancestor = this.superclass && this.superclass.prototype; 2.117 + var properties = Object.keys(source); 2.118 + 2.119 + if (!Object.keys({ toString: true }).length) { 2.120 + if (source.toString != Object.prototype.toString) 2.121 + properties.push("toString"); 2.122 + if (source.valueOf != Object.prototype.valueOf) 2.123 + properties.push("valueOf"); 2.124 + } 2.125 + 2.126 + for (var i = 0, length = properties.length; i < length; i++) { 2.127 + var property = properties[i], value = source[property]; 2.128 + if (ancestor && Object.isFunction(value) && 2.129 + value.argumentNames().first() == "$super") { 2.130 + var method = value; 2.131 + value = (function(m) { 2.132 + return function() { return ancestor[m].apply(this, arguments); }; 2.133 + })(property).wrap(method); 2.134 + 2.135 + value.valueOf = method.valueOf.bind(method); 2.136 + value.toString = method.toString.bind(method); 2.137 + } 2.138 + this.prototype[property] = value; 2.139 + } 2.140 + 2.141 + return this; 2.142 + } 2.143 + 2.144 + return { 2.145 + create: create, 2.146 + Methods: { 2.147 + addMethods: addMethods 2.148 + } 2.149 + }; 2.150 +})(); 2.151 +(function() { 2.152 + 2.153 + var _toString = Object.prototype.toString; 2.154 + 2.155 + function extend(destination, source) { 2.156 + for (var property in source) 2.157 + destination[property] = source[property]; 2.158 + return destination; 2.159 + } 2.160 + 2.161 + function inspect(object) { 2.162 + try { 2.163 + if (isUndefined(object)) return 'undefined'; 2.164 + if (object === null) return 'null'; 2.165 + return object.inspect ? object.inspect() : String(object); 2.166 + } catch (e) { 2.167 + if (e instanceof RangeError) return '...'; 2.168 + throw e; 2.169 + } 2.170 + } 2.171 + 2.172 + function toJSON(object) { 2.173 + var type = typeof object; 2.174 + switch (type) { 2.175 + case 'undefined': 2.176 + case 'function': 2.177 + case 'unknown': return; 2.178 + case 'boolean': return object.toString(); 2.179 + } 2.180 + 2.181 + if (object === null) return 'null'; 2.182 + if (object.toJSON) return object.toJSON(); 2.183 + if (isElement(object)) return; 2.184 + 2.185 + var results = []; 2.186 + for (var property in object) { 2.187 + var value = toJSON(object[property]); 2.188 + if (!isUndefined(value)) 2.189 + results.push(property.toJSON() + ': ' + value); 2.190 + } 2.191 + 2.192 + return '{' + results.join(', ') + '}'; 2.193 + } 2.194 + 2.195 + function toQueryString(object) { 2.196 + return $H(object).toQueryString(); 2.197 + } 2.198 + 2.199 + function toHTML(object) { 2.200 + return object && object.toHTML ? object.toHTML() : String.interpret(object); 2.201 + } 2.202 + 2.203 + function keys(object) { 2.204 + var results = []; 2.205 + for (var property in object) 2.206 + results.push(property); 2.207 + return results; 2.208 + } 2.209 + 2.210 + function values(object) { 2.211 + var results = []; 2.212 + for (var property in object) 2.213 + results.push(object[property]); 2.214 + return results; 2.215 + } 2.216 + 2.217 + function clone(object) { 2.218 + return extend({ }, object); 2.219 + } 2.220 + 2.221 + function isElement(object) { 2.222 + return !!(object && object.nodeType == 1); 2.223 + } 2.224 + 2.225 + function isArray(object) { 2.226 + return _toString.call(object) == "[object Array]"; 2.227 + } 2.228 + 2.229 + 2.230 + function isHash(object) { 2.231 + return object instanceof Hash; 2.232 + } 2.233 + 2.234 + function isFunction(object) { 2.235 + return typeof object === "function"; 2.236 + } 2.237 + 2.238 + function isString(object) { 2.239 + return _toString.call(object) == "[object String]"; 2.240 + } 2.241 + 2.242 + function isNumber(object) { 2.243 + return _toString.call(object) == "[object Number]"; 2.244 + } 2.245 + 2.246 + function isUndefined(object) { 2.247 + return typeof object === "undefined"; 2.248 + } 2.249 + 2.250 + extend(Object, { 2.251 + extend: extend, 2.252 + inspect: inspect, 2.253 + toJSON: toJSON, 2.254 + toQueryString: toQueryString, 2.255 + toHTML: toHTML, 2.256 + keys: keys, 2.257 + values: values, 2.258 + clone: clone, 2.259 + isElement: isElement, 2.260 + isArray: isArray, 2.261 + isHash: isHash, 2.262 + isFunction: isFunction, 2.263 + isString: isString, 2.264 + isNumber: isNumber, 2.265 + isUndefined: isUndefined 2.266 + }); 2.267 +})(); 2.268 +Object.extend(Function.prototype, (function() { 2.269 + var slice = Array.prototype.slice; 2.270 + 2.271 + function update(array, args) { 2.272 + var arrayLength = array.length, length = args.length; 2.273 + while (length--) array[arrayLength + length] = args[length]; 2.274 + return array; 2.275 + } 2.276 + 2.277 + function merge(array, args) { 2.278 + array = slice.call(array, 0); 2.279 + return update(array, args); 2.280 + } 2.281 + 2.282 + function argumentNames() { 2.283 + var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1] 2.284 + .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '') 2.285 + .replace(/\s+/g, '').split(','); 2.286 + return names.length == 1 && !names[0] ? [] : names; 2.287 + } 2.288 + 2.289 + function bind(context) { 2.290 + if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this; 2.291 + var __method = this, args = slice.call(arguments, 1); 2.292 + return function() { 2.293 + var a = merge(args, arguments); 2.294 + return __method.apply(context, a); 2.295 + } 2.296 + } 2.297 + 2.298 + function bindAsEventListener(context) { 2.299 + var __method = this, args = slice.call(arguments, 1); 2.300 + return function(event) { 2.301 + var a = update([event || window.event], args); 2.302 + return __method.apply(context, a); 2.303 + } 2.304 + } 2.305 + 2.306 + function curry() { 2.307 + if (!arguments.length) return this; 2.308 + var __method = this, args = slice.call(arguments, 0); 2.309 + return function() { 2.310 + var a = merge(args, arguments); 2.311 + return __method.apply(this, a); 2.312 + } 2.313 + } 2.314 + 2.315 + function delay(timeout) { 2.316 + var __method = this, args = slice.call(arguments, 1); 2.317 + timeout = timeout * 1000 2.318 + return window.setTimeout(function() { 2.319 + return __method.apply(__method, args); 2.320 + }, timeout); 2.321 + } 2.322 + 2.323 + function defer() { 2.324 + var args = update([0.01], arguments); 2.325 + return this.delay.apply(this, args); 2.326 + } 2.327 + 2.328 + function wrap(wrapper) { 2.329 + var __method = this; 2.330 + return function() { 2.331 + var a = update([__method.bind(this)], arguments); 2.332 + return wrapper.apply(this, a); 2.333 + } 2.334 + } 2.335 + 2.336 + function methodize() { 2.337 + if (this._methodized) return this._methodized; 2.338 + var __method = this; 2.339 + return this._methodized = function() { 2.340 + var a = update([this], arguments); 2.341 + return __method.apply(null, a); 2.342 + }; 2.343 + } 2.344 + 2.345 + return { 2.346 + argumentNames: argumentNames, 2.347 + bind: bind, 2.348 + bindAsEventListener: bindAsEventListener, 2.349 + curry: curry, 2.350 + delay: delay, 2.351 + defer: defer, 2.352 + wrap: wrap, 2.353 + methodize: methodize 2.354 + } 2.355 +})()); 2.356 + 2.357 + 2.358 +Date.prototype.toJSON = function() { 2.359 + return '"' + this.getUTCFullYear() + '-' + 2.360 + (this.getUTCMonth() + 1).toPaddedString(2) + '-' + 2.361 + this.getUTCDate().toPaddedString(2) + 'T' + 2.362 + this.getUTCHours().toPaddedString(2) + ':' + 2.363 + this.getUTCMinutes().toPaddedString(2) + ':' + 2.364 + this.getUTCSeconds().toPaddedString(2) + 'Z"'; 2.365 +}; 2.366 + 2.367 + 2.368 +RegExp.prototype.match = RegExp.prototype.test; 2.369 + 2.370 +RegExp.escape = function(str) { 2.371 + return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); 2.372 +}; 2.373 +var PeriodicalExecuter = Class.create({ 2.374 + initialize: function(callback, frequency) { 2.375 + this.callback = callback; 2.376 + this.frequency = frequency; 2.377 + this.currentlyExecuting = false; 2.378 + 2.379 + this.registerCallback(); 2.380 + }, 2.381 + 2.382 + registerCallback: function() { 2.383 + this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); 2.384 + }, 2.385 + 2.386 + execute: function() { 2.387 + this.callback(this); 2.388 + }, 2.389 + 2.390 + stop: function() { 2.391 + if (!this.timer) return; 2.392 + clearInterval(this.timer); 2.393 + this.timer = null; 2.394 + }, 2.395 + 2.396 + onTimerEvent: function() { 2.397 + if (!this.currentlyExecuting) { 2.398 + try { 2.399 + this.currentlyExecuting = true; 2.400 + this.execute(); 2.401 + this.currentlyExecuting = false; 2.402 + } catch(e) { 2.403 + this.currentlyExecuting = false; 2.404 + throw e; 2.405 + } 2.406 + } 2.407 + } 2.408 +}); 2.409 +Object.extend(String, { 2.410 + interpret: function(value) { 2.411 + return value == null ? '' : String(value); 2.412 + }, 2.413 + specialChar: { 2.414 + '\b': '\\b', 2.415 + '\t': '\\t', 2.416 + '\n': '\\n', 2.417 + '\f': '\\f', 2.418 + '\r': '\\r', 2.419 + '\\': '\\\\' 2.420 + } 2.421 +}); 2.422 + 2.423 +Object.extend(String.prototype, (function() { 2.424 + 2.425 + function prepareReplacement(replacement) { 2.426 + if (Object.isFunction(replacement)) return replacement; 2.427 + var template = new Template(replacement); 2.428 + return function(match) { return template.evaluate(match) }; 2.429 + } 2.430 + 2.431 + function gsub(pattern, replacement) { 2.432 + var result = '', source = this, match; 2.433 + replacement = prepareReplacement(replacement); 2.434 + 2.435 + if (Object.isString(pattern)) 2.436 + pattern = RegExp.escape(pattern); 2.437 + 2.438 + if (!(pattern.length || pattern.source)) { 2.439 + replacement = replacement(''); 2.440 + return replacement + source.split('').join(replacement) + replacement; 2.441 + } 2.442 + 2.443 + while (source.length > 0) { 2.444 + if (match = source.match(pattern)) { 2.445 + result += source.slice(0, match.index); 2.446 + result += String.interpret(replacement(match)); 2.447 + source = source.slice(match.index + match[0].length); 2.448 + } else { 2.449 + result += source, source = ''; 2.450 + } 2.451 + } 2.452 + return result; 2.453 + } 2.454 + 2.455 + function sub(pattern, replacement, count) { 2.456 + replacement = prepareReplacement(replacement); 2.457 + count = Object.isUndefined(count) ? 1 : count; 2.458 + 2.459 + return this.gsub(pattern, function(match) { 2.460 + if (--count < 0) return match[0]; 2.461 + return replacement(match); 2.462 + }); 2.463 + } 2.464 + 2.465 + function scan(pattern, iterator) { 2.466 + this.gsub(pattern, iterator); 2.467 + return String(this); 2.468 + } 2.469 + 2.470 + function truncate(length, truncation) { 2.471 + length = length || 30; 2.472 + truncation = Object.isUndefined(truncation) ? '...' : truncation; 2.473 + return this.length > length ? 2.474 + this.slice(0, length - truncation.length) + truncation : String(this); 2.475 + } 2.476 + 2.477 + function strip() { 2.478 + return this.replace(/^\s+/, '').replace(/\s+$/, ''); 2.479 + } 2.480 + 2.481 + function stripTags() { 2.482 + return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, ''); 2.483 + } 2.484 + 2.485 + function stripScripts() { 2.486 + return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); 2.487 + } 2.488 + 2.489 + function extractScripts() { 2.490 + var matchAll = new RegExp(Prototype.ScriptFragment, 'img'); 2.491 + var matchOne = new RegExp(Prototype.ScriptFragment, 'im'); 2.492 + return (this.match(matchAll) || []).map(function(scriptTag) { 2.493 + return (scriptTag.match(matchOne) || ['', ''])[1]; 2.494 + }); 2.495 + } 2.496 + 2.497 + function evalScripts() { 2.498 + return this.extractScripts().map(function(script) { return eval(script) }); 2.499 + } 2.500 + 2.501 + function escapeHTML() { 2.502 + return this.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>'); 2.503 + } 2.504 + 2.505 + function unescapeHTML() { 2.506 + return this.stripTags().replace(/</g,'<').replace(/>/g,'>').replace(/&/g,'&'); 2.507 + } 2.508 + 2.509 + 2.510 + function toQueryParams(separator) { 2.511 + var match = this.strip().match(/([^?#]*)(#.*)?$/); 2.512 + if (!match) return { }; 2.513 + 2.514 + return match[1].split(separator || '&').inject({ }, function(hash, pair) { 2.515 + if ((pair = pair.split('='))[0]) { 2.516 + var key = decodeURIComponent(pair.shift()); 2.517 + var value = pair.length > 1 ? pair.join('=') : pair[0]; 2.518 + if (value != undefined) value = decodeURIComponent(value); 2.519 + 2.520 + if (key in hash) { 2.521 + if (!Object.isArray(hash[key])) hash[key] = [hash[key]]; 2.522 + hash[key].push(value); 2.523 + } 2.524 + else hash[key] = value; 2.525 + } 2.526 + return hash; 2.527 + }); 2.528 + } 2.529 + 2.530 + function toArray() { 2.531 + return this.split(''); 2.532 + } 2.533 + 2.534 + function succ() { 2.535 + return this.slice(0, this.length - 1) + 2.536 + String.fromCharCode(this.charCodeAt(this.length - 1) + 1); 2.537 + } 2.538 + 2.539 + function times(count) { 2.540 + return count < 1 ? '' : new Array(count + 1).join(this); 2.541 + } 2.542 + 2.543 + function camelize() { 2.544 + var parts = this.split('-'), len = parts.length; 2.545 + if (len == 1) return parts[0]; 2.546 + 2.547 + var camelized = this.charAt(0) == '-' 2.548 + ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1) 2.549 + : parts[0]; 2.550 + 2.551 + for (var i = 1; i < len; i++) 2.552 + camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1); 2.553 + 2.554 + return camelized; 2.555 + } 2.556 + 2.557 + function capitalize() { 2.558 + return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); 2.559 + } 2.560 + 2.561 + function underscore() { 2.562 + return this.replace(/::/g, '/') 2.563 + .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2') 2.564 + .replace(/([a-z\d])([A-Z])/g, '$1_$2') 2.565 + .replace(/-/g, '_') 2.566 + .toLowerCase(); 2.567 + } 2.568 + 2.569 + function dasherize() { 2.570 + return this.replace(/_/g, '-'); 2.571 + } 2.572 + 2.573 + function inspect(useDoubleQuotes) { 2.574 + var escapedString = this.replace(/[\x00-\x1f\\]/g, function(character) { 2.575 + if (character in String.specialChar) { 2.576 + return String.specialChar[character]; 2.577 + } 2.578 + return '\\u00' + character.charCodeAt().toPaddedString(2, 16); 2.579 + }); 2.580 + if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"'; 2.581 + return "'" + escapedString.replace(/'/g, '\\\'') + "'"; 2.582 + } 2.583 + 2.584 + function toJSON() { 2.585 + return this.inspect(true); 2.586 + } 2.587 + 2.588 + function unfilterJSON(filter) { 2.589 + return this.replace(filter || Prototype.JSONFilter, '$1'); 2.590 + } 2.591 + 2.592 + function isJSON() { 2.593 + var str = this; 2.594 + if (str.blank()) return false; 2.595 + str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, ''); 2.596 + return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str); 2.597 + } 2.598 + 2.599 + function evalJSON(sanitize) { 2.600 + var json = this.unfilterJSON(); 2.601 + try { 2.602 + if (!sanitize || json.isJSON()) return eval('(' + json + ')'); 2.603 + } catch (e) { } 2.604 + throw new SyntaxError('Badly formed JSON string: ' + this.inspect()); 2.605 + } 2.606 + 2.607 + function include(pattern) { 2.608 + return this.indexOf(pattern) > -1; 2.609 + } 2.610 + 2.611 + function startsWith(pattern) { 2.612 + return this.indexOf(pattern) === 0; 2.613 + } 2.614 + 2.615 + function endsWith(pattern) { 2.616 + var d = this.length - pattern.length; 2.617 + return d >= 0 && this.lastIndexOf(pattern) === d; 2.618 + } 2.619 + 2.620 + function empty() { 2.621 + return this == ''; 2.622 + } 2.623 + 2.624 + function blank() { 2.625 + return /^\s*$/.test(this); 2.626 + } 2.627 + 2.628 + function interpolate(object, pattern) { 2.629 + return new Template(this, pattern).evaluate(object); 2.630 + } 2.631 + 2.632 + return { 2.633 + gsub: gsub, 2.634 + sub: sub, 2.635 + scan: scan, 2.636 + truncate: truncate, 2.637 + strip: String.prototype.trim ? String.prototype.trim : strip, 2.638 + stripTags: stripTags, 2.639 + stripScripts: stripScripts, 2.640 + extractScripts: extractScripts, 2.641 + evalScripts: evalScripts, 2.642 + escapeHTML: escapeHTML, 2.643 + unescapeHTML: unescapeHTML, 2.644 + toQueryParams: toQueryParams, 2.645 + parseQuery: toQueryParams, 2.646 + toArray: toArray, 2.647 + succ: succ, 2.648 + times: times, 2.649 + camelize: camelize, 2.650 + capitalize: capitalize, 2.651 + underscore: underscore, 2.652 + dasherize: dasherize, 2.653 + inspect: inspect, 2.654 + toJSON: toJSON, 2.655 + unfilterJSON: unfilterJSON, 2.656 + isJSON: isJSON, 2.657 + evalJSON: evalJSON, 2.658 + include: include, 2.659 + startsWith: startsWith, 2.660 + endsWith: endsWith, 2.661 + empty: empty, 2.662 + blank: blank, 2.663 + interpolate: interpolate 2.664 + }; 2.665 +})()); 2.666 + 2.667 +var Template = Class.create({ 2.668 + initialize: function(template, pattern) { 2.669 + this.template = template.toString(); 2.670 + this.pattern = pattern || Template.Pattern; 2.671 + }, 2.672 + 2.673 + evaluate: function(object) { 2.674 + if (object && Object.isFunction(object.toTemplateReplacements)) 2.675 + object = object.toTemplateReplacements(); 2.676 + 2.677 + return this.template.gsub(this.pattern, function(match) { 2.678 + if (object == null) return (match[1] + ''); 2.679 + 2.680 + var before = match[1] || ''; 2.681 + if (before == '\\') return match[2]; 2.682 + 2.683 + var ctx = object, expr = match[3]; 2.684 + var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/; 2.685 + match = pattern.exec(expr); 2.686 + if (match == null) return before; 2.687 + 2.688 + while (match != null) { 2.689 + var comp = match[1].startsWith('[') ? match[2].replace(/\\\\]/g, ']') : match[1]; 2.690 + ctx = ctx[comp]; 2.691 + if (null == ctx || '' == match[3]) break; 2.692 + expr = expr.substring('[' == match[3] ? match[1].length : match[0].length); 2.693 + match = pattern.exec(expr); 2.694 + } 2.695 + 2.696 + return before + String.interpret(ctx); 2.697 + }); 2.698 + } 2.699 +}); 2.700 +Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; 2.701 + 2.702 +var $break = { }; 2.703 + 2.704 +var Enumerable = (function() { 2.705 + function each(iterator, context) { 2.706 + var index = 0; 2.707 + try { 2.708 + this._each(function(value) { 2.709 + iterator.call(context, value, index++); 2.710 + }); 2.711 + } catch (e) { 2.712 + if (e != $break) throw e; 2.713 + } 2.714 + return this; 2.715 + } 2.716 + 2.717 + function eachSlice(number, iterator, context) { 2.718 + var index = -number, slices = [], array = this.toArray(); 2.719 + if (number < 1) return array; 2.720 + while ((index += number) < array.length) 2.721 + slices.push(array.slice(index, index+number)); 2.722 + return slices.collect(iterator, context); 2.723 + } 2.724 + 2.725 + function all(iterator, context) { 2.726 + iterator = iterator || Prototype.K; 2.727 + var result = true; 2.728 + this.each(function(value, index) { 2.729 + result = result && !!iterator.call(context, value, index); 2.730 + if (!result) throw $break; 2.731 + }); 2.732 + return result; 2.733 + } 2.734 + 2.735 + function any(iterator, context) { 2.736 + iterator = iterator || Prototype.K; 2.737 + var result = false; 2.738 + this.each(function(value, index) { 2.739 + if (result = !!iterator.call(context, value, index)) 2.740 + throw $break; 2.741 + }); 2.742 + return result; 2.743 + } 2.744 + 2.745 + function collect(iterator, context) { 2.746 + iterator = iterator || Prototype.K; 2.747 + var results = []; 2.748 + this.each(function(value, index) { 2.749 + results.push(iterator.call(context, value, index)); 2.750 + }); 2.751 + return results; 2.752 + } 2.753 + 2.754 + function detect(iterator, context) { 2.755 + var result; 2.756 + this.each(function(value, index) { 2.757 + if (iterator.call(context, value, index)) { 2.758 + result = value; 2.759 + throw $break; 2.760 + } 2.761 + }); 2.762 + return result; 2.763 + } 2.764 + 2.765 + function findAll(iterator, context) { 2.766 + var results = []; 2.767 + this.each(function(value, index) { 2.768 + if (iterator.call(context, value, index)) 2.769 + results.push(value); 2.770 + }); 2.771 + return results; 2.772 + } 2.773 + 2.774 + function grep(filter, iterator, context) { 2.775 + iterator = iterator || Prototype.K; 2.776 + var results = []; 2.777 + 2.778 + if (Object.isString(filter)) 2.779 + filter = new RegExp(RegExp.escape(filter)); 2.780 + 2.781 + this.each(function(value, index) { 2.782 + if (filter.match(value)) 2.783 + results.push(iterator.call(context, value, index)); 2.784 + }); 2.785 + return results; 2.786 + } 2.787 + 2.788 + function include(object) { 2.789 + if (Object.isFunction(this.indexOf)) 2.790 + if (this.indexOf(object) != -1) return true; 2.791 + 2.792 + var found = false; 2.793 + this.each(function(value) { 2.794 + if (value == object) { 2.795 + found = true; 2.796 + throw $break; 2.797 + } 2.798 + }); 2.799 + return found; 2.800 + } 2.801 + 2.802 + function inGroupsOf(number, fillWith) { 2.803 + fillWith = Object.isUndefined(fillWith) ? null : fillWith; 2.804 + return this.eachSlice(number, function(slice) { 2.805 + while(slice.length < number) slice.push(fillWith); 2.806 + return slice; 2.807 + }); 2.808 + } 2.809 + 2.810 + function inject(memo, iterator, context) { 2.811 + this.each(function(value, index) { 2.812 + memo = iterator.call(context, memo, value, index); 2.813 + }); 2.814 + return memo; 2.815 + } 2.816 + 2.817 + function invoke(method) { 2.818 + var args = $A(arguments).slice(1); 2.819 + return this.map(function(value) { 2.820 + return value[method].apply(value, args); 2.821 + }); 2.822 + } 2.823 + 2.824 + function max(iterator, context) { 2.825 + iterator = iterator || Prototype.K; 2.826 + var result; 2.827 + this.each(function(value, index) { 2.828 + value = iterator.call(context, value, index); 2.829 + if (result == null || value >= result) 2.830 + result = value; 2.831 + }); 2.832 + return result; 2.833 + } 2.834 + 2.835 + function min(iterator, context) { 2.836 + iterator = iterator || Prototype.K; 2.837 + var result; 2.838 + this.each(function(value, index) { 2.839 + value = iterator.call(context, value, index); 2.840 + if (result == null || value < result) 2.841 + result = value; 2.842 + }); 2.843 + return result; 2.844 + } 2.845 + 2.846 + function partition(iterator, context) { 2.847 + iterator = iterator || Prototype.K; 2.848 + var trues = [], falses = []; 2.849 + this.each(function(value, index) { 2.850 + (iterator.call(context, value, index) ? 2.851 + trues : falses).push(value); 2.852 + }); 2.853 + return [trues, falses]; 2.854 + } 2.855 + 2.856 + function pluck(property) { 2.857 + var results = []; 2.858 + this.each(function(value) { 2.859 + results.push(value[property]); 2.860 + }); 2.861 + return results; 2.862 + } 2.863 + 2.864 + function reject(iterator, context) { 2.865 + var results = []; 2.866 + this.each(function(value, index) { 2.867 + if (!iterator.call(context, value, index)) 2.868 + results.push(value); 2.869 + }); 2.870 + return results; 2.871 + } 2.872 + 2.873 + function sortBy(iterator, context) { 2.874 + return this.map(function(value, index) { 2.875 + return { 2.876 + value: value, 2.877 + criteria: iterator.call(context, value, index) 2.878 + }; 2.879 + }).sort(function(left, right) { 2.880 + var a = left.criteria, b = right.criteria; 2.881 + return a < b ? -1 : a > b ? 1 : 0; 2.882 + }).pluck('value'); 2.883 + } 2.884 + 2.885 + function toArray() { 2.886 + return this.map(); 2.887 + } 2.888 + 2.889 + function zip() { 2.890 + var iterator = Prototype.K, args = $A(arguments); 2.891 + if (Object.isFunction(args.last())) 2.892 + iterator = args.pop(); 2.893 + 2.894 + var collections = [this].concat(args).map($A); 2.895 + return this.map(function(value, index) { 2.896 + return iterator(collections.pluck(index)); 2.897 + }); 2.898 + } 2.899 + 2.900 + function size() { 2.901 + return this.toArray().length; 2.902 + } 2.903 + 2.904 + function inspect() { 2.905 + return '#<Enumerable:' + this.toArray().inspect() + '>'; 2.906 + } 2.907 + 2.908 + 2.909 + 2.910 + 2.911 + 2.912 + 2.913 + 2.914 + 2.915 + 2.916 + return { 2.917 + each: each, 2.918 + eachSlice: eachSlice, 2.919 + all: all, 2.920 + every: all, 2.921 + any: any, 2.922 + some: any, 2.923 + collect: collect, 2.924 + map: collect, 2.925 + detect: detect, 2.926 + findAll: findAll, 2.927 + select: findAll, 2.928 + filter: findAll, 2.929 + grep: grep, 2.930 + include: include, 2.931 + member: include, 2.932 + inGroupsOf: inGroupsOf, 2.933 + inject: inject, 2.934 + invoke: invoke, 2.935 + max: max, 2.936 + min: min, 2.937 + partition: partition, 2.938 + pluck: pluck, 2.939 + reject: reject, 2.940 + sortBy: sortBy, 2.941 + toArray: toArray, 2.942 + entries: toArray, 2.943 + zip: zip, 2.944 + size: size, 2.945 + inspect: inspect, 2.946 + find: detect 2.947 + }; 2.948 +})(); 2.949 +function $A(iterable) { 2.950 + if (!iterable) return []; 2.951 + if ('toArray' in Object(iterable)) return iterable.toArray(); 2.952 + var length = iterable.length || 0, results = new Array(length); 2.953 + while (length--) results[length] = iterable[length]; 2.954 + return results; 2.955 +} 2.956 + 2.957 +function $w(string) { 2.958 + if (!Object.isString(string)) return []; 2.959 + string = string.strip(); 2.960 + return string ? string.split(/\s+/) : []; 2.961 +} 2.962 + 2.963 +Array.from = $A; 2.964 + 2.965 + 2.966 +(function() { 2.967 + var arrayProto = Array.prototype, 2.968 + slice = arrayProto.slice, 2.969 + _each = arrayProto.forEach; // use native browser JS 1.6 implementation if available 2.970 + 2.971 + function each(iterator) { 2.972 + for (var i = 0, length = this.length; i < length; i++) 2.973 + iterator(this[i]); 2.974 + } 2.975 + if (!_each) _each = each; 2.976 + 2.977 + function clear() { 2.978 + this.length = 0; 2.979 + return this; 2.980 + } 2.981 + 2.982 + function first() { 2.983 + return this[0]; 2.984 + } 2.985 + 2.986 + function last() { 2.987 + return this[this.length - 1]; 2.988 + } 2.989 + 2.990 + function compact() { 2.991 + return this.select(function(value) { 2.992 + return value != null; 2.993 + }); 2.994 + } 2.995 + 2.996 + function flatten() { 2.997 + return this.inject([], function(array, value) { 2.998 + if (Object.isArray(value)) 2.999 + return array.concat(value.flatten()); 2.1000 + array.push(value); 2.1001 + return array; 2.1002 + }); 2.1003 + } 2.1004 + 2.1005 + function without() { 2.1006 + var values = slice.call(arguments, 0); 2.1007 + return this.select(function(value) { 2.1008 + return !values.include(value); 2.1009 + }); 2.1010 + } 2.1011 + 2.1012 + function reverse(inline) { 2.1013 + return (inline !== false ? this : this.toArray())._reverse(); 2.1014 + } 2.1015 + 2.1016 + function uniq(sorted) { 2.1017 + return this.inject([], function(array, value, index) { 2.1018 + if (0 == index || (sorted ? array.last() != value : !array.include(value))) 2.1019 + array.push(value); 2.1020 + return array; 2.1021 + }); 2.1022 + } 2.1023 + 2.1024 + function intersect(array) { 2.1025 + return this.uniq().findAll(function(item) { 2.1026 + return array.detect(function(value) { return item === value }); 2.1027 + }); 2.1028 + } 2.1029 + 2.1030 + 2.1031 + function clone() { 2.1032 + return slice.call(this, 0); 2.1033 + } 2.1034 + 2.1035 + function size() { 2.1036 + return this.length; 2.1037 + } 2.1038 + 2.1039 + function inspect() { 2.1040 + return '[' + this.map(Object.inspect).join(', ') + ']'; 2.1041 + } 2.1042 + 2.1043 + function toJSON() { 2.1044 + var results = []; 2.1045 + this.each(function(object) { 2.1046 + var value = Object.toJSON(object); 2.1047 + if (!Object.isUndefined(value)) results.push(value); 2.1048 + }); 2.1049 + return '[' + results.join(', ') + ']'; 2.1050 + } 2.1051 + 2.1052 + function indexOf(item, i) { 2.1053 + i || (i = 0); 2.1054 + var length = this.length; 2.1055 + if (i < 0) i = length + i; 2.1056 + for (; i < length; i++) 2.1057 + if (this[i] === item) return i; 2.1058 + return -1; 2.1059 + } 2.1060 + 2.1061 + function lastIndexOf(item, i) { 2.1062 + i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1; 2.1063 + var n = this.slice(0, i).reverse().indexOf(item); 2.1064 + return (n < 0) ? n : i - n - 1; 2.1065 + } 2.1066 + 2.1067 + function concat() { 2.1068 + var array = slice.call(this, 0), item; 2.1069 + for (var i = 0, length = arguments.length; i < length; i++) { 2.1070 + item = arguments[i]; 2.1071 + if (Object.isArray(item) && !('callee' in item)) { 2.1072 + for (var j = 0, arrayLength = item.length; j < arrayLength; j++) 2.1073 + array.push(item[j]); 2.1074 + } else { 2.1075 + array.push(item); 2.1076 + } 2.1077 + } 2.1078 + return array; 2.1079 + } 2.1080 + 2.1081 + Object.extend(arrayProto, Enumerable); 2.1082 + 2.1083 + if (!arrayProto._reverse) 2.1084 + arrayProto._reverse = arrayProto.reverse; 2.1085 + 2.1086 + Object.extend(arrayProto, { 2.1087 + _each: _each, 2.1088 + clear: clear, 2.1089 + first: first, 2.1090 + last: last, 2.1091 + compact: compact, 2.1092 + flatten: flatten, 2.1093 + without: without, 2.1094 + reverse: reverse, 2.1095 + uniq: uniq, 2.1096 + intersect: intersect, 2.1097 + clone: clone, 2.1098 + toArray: clone, 2.1099 + size: size, 2.1100 + inspect: inspect, 2.1101 + toJSON: toJSON 2.1102 + }); 2.1103 + 2.1104 + var CONCAT_ARGUMENTS_BUGGY = (function() { 2.1105 + return [].concat(arguments)[0][0] !== 1; 2.1106 + })(1,2) 2.1107 + 2.1108 + if (CONCAT_ARGUMENTS_BUGGY) arrayProto.concat = concat; 2.1109 + 2.1110 + if (!arrayProto.indexOf) arrayProto.indexOf = indexOf; 2.1111 + if (!arrayProto.lastIndexOf) arrayProto.lastIndexOf = lastIndexOf; 2.1112 +})(); 2.1113 +function $H(object) { 2.1114 + return new Hash(object); 2.1115 +}; 2.1116 + 2.1117 +var Hash = Class.create(Enumerable, (function() { 2.1118 + function initialize(object) { 2.1119 + this._object = Object.isHash(object) ? object.toObject() : Object.clone(object); 2.1120 + } 2.1121 + 2.1122 + function _each(iterator) { 2.1123 + for (var key in this._object) { 2.1124 + var value = this._object[key], pair = [key, value]; 2.1125 + pair.key = key; 2.1126 + pair.value = value; 2.1127 + iterator(pair); 2.1128 + } 2.1129 + } 2.1130 + 2.1131 + function set(key, value) { 2.1132 + return this._object[key] = value; 2.1133 + } 2.1134 + 2.1135 + function get(key) { 2.1136 + if (this._object[key] !== Object.prototype[key]) 2.1137 + return this._object[key]; 2.1138 + } 2.1139 + 2.1140 + function unset(key) { 2.1141 + var value = this._object[key]; 2.1142 + delete this._object[key]; 2.1143 + return value; 2.1144 + } 2.1145 + 2.1146 + function toObject() { 2.1147 + return Object.clone(this._object); 2.1148 + } 2.1149 + 2.1150 + function keys() { 2.1151 + return this.pluck('key'); 2.1152 + } 2.1153 + 2.1154 + function values() { 2.1155 + return this.pluck('value'); 2.1156 + } 2.1157 + 2.1158 + function index(value) { 2.1159 + var match = this.detect(function(pair) { 2.1160 + return pair.value === value; 2.1161 + }); 2.1162 + return match && match.key; 2.1163 + } 2.1164 + 2.1165 + function merge(object) { 2.1166 + return this.clone().update(object); 2.1167 + } 2.1168 + 2.1169 + function update(object) { 2.1170 + return new Hash(object).inject(this, function(result, pair) { 2.1171 + result.set(pair.key, pair.value); 2.1172 + return result; 2.1173 + }); 2.1174 + } 2.1175 + 2.1176 + function toQueryPair(key, value) { 2.1177 + if (Object.isUndefined(value)) return key; 2.1178 + return key + '=' + encodeURIComponent(String.interpret(value)); 2.1179 + } 2.1180 + 2.1181 + function toQueryString() { 2.1182 + return this.inject([], function(results, pair) { 2.1183 + var key = encodeURIComponent(pair.key), values = pair.value; 2.1184 + 2.1185 + if (values && typeof values == 'object') { 2.1186 + if (Object.isArray(values)) 2.1187 + return results.concat(values.map(toQueryPair.curry(key))); 2.1188 + } else results.push(toQueryPair(key, values)); 2.1189 + return results; 2.1190 + }).join('&'); 2.1191 + } 2.1192 + 2.1193 + function inspect() { 2.1194 + return '#<Hash:{' + this.map(function(pair) { 2.1195 + return pair.map(Object.inspect).join(': '); 2.1196 + }).join(', ') + '}>'; 2.1197 + } 2.1198 + 2.1199 + function toJSON() { 2.1200 + return Object.toJSON(this.toObject()); 2.1201 + } 2.1202 + 2.1203 + function clone() { 2.1204 + return new Hash(this); 2.1205 + } 2.1206 + 2.1207 + return { 2.1208 + initialize: initialize, 2.1209 + _each: _each, 2.1210 + set: set, 2.1211 + get: get, 2.1212 + unset: unset, 2.1213 + toObject: toObject, 2.1214 + toTemplateReplacements: toObject, 2.1215 + keys: keys, 2.1216 + values: values, 2.1217 + index: index, 2.1218 + merge: merge, 2.1219 + update: update, 2.1220 + toQueryString: toQueryString, 2.1221 + inspect: inspect, 2.1222 + toJSON: toJSON, 2.1223 + clone: clone 2.1224 + }; 2.1225 +})()); 2.1226 + 2.1227 +Hash.from = $H; 2.1228 +Object.extend(Number.prototype, (function() { 2.1229 + function toColorPart() { 2.1230 + return this.toPaddedString(2, 16); 2.1231 + } 2.1232 + 2.1233 + function succ() { 2.1234 + return this + 1; 2.1235 + } 2.1236 + 2.1237 + function times(iterator, context) { 2.1238 + $R(0, this, true).each(iterator, context); 2.1239 + return this; 2.1240 + } 2.1241 + 2.1242 + function toPaddedString(length, radix) { 2.1243 + var string = this.toString(radix || 10); 2.1244 + return '0'.times(length - string.length) + string; 2.1245 + } 2.1246 + 2.1247 + function toJSON() { 2.1248 + return isFinite(this) ? this.toString() : 'null'; 2.1249 + } 2.1250 + 2.1251 + function abs() { 2.1252 + return Math.abs(this); 2.1253 + } 2.1254 + 2.1255 + function round() { 2.1256 + return Math.round(this); 2.1257 + } 2.1258 + 2.1259 + function ceil() { 2.1260 + return Math.ceil(this); 2.1261 + } 2.1262 + 2.1263 + function floor() { 2.1264 + return Math.floor(this); 2.1265 + } 2.1266 + 2.1267 + return { 2.1268 + toColorPart: toColorPart, 2.1269 + succ: succ, 2.1270 + times: times, 2.1271 + toPaddedString: toPaddedString, 2.1272 + toJSON: toJSON, 2.1273 + abs: abs, 2.1274 + round: round, 2.1275 + ceil: ceil, 2.1276 + floor: floor 2.1277 + }; 2.1278 +})()); 2.1279 + 2.1280 +function $R(start, end, exclusive) { 2.1281 + return new ObjectRange(start, end, exclusive); 2.1282 +} 2.1283 + 2.1284 +var ObjectRange = Class.create(Enumerable, (function() { 2.1285 + function initialize(start, end, exclusive) { 2.1286 + this.start = start; 2.1287 + this.end = end; 2.1288 + this.exclusive = exclusive; 2.1289 + } 2.1290 + 2.1291 + function _each(iterator) { 2.1292 + var value = this.start; 2.1293 + while (this.include(value)) { 2.1294 + iterator(value); 2.1295 + value = value.succ(); 2.1296 + } 2.1297 + } 2.1298 + 2.1299 + function include(value) { 2.1300 + if (value < this.start) 2.1301 + return false; 2.1302 + if (this.exclusive) 2.1303 + return value < this.end; 2.1304 + return value <= this.end; 2.1305 + } 2.1306 + 2.1307 + return { 2.1308 + initialize: initialize, 2.1309 + _each: _each, 2.1310 + include: include 2.1311 + }; 2.1312 +})()); 2.1313 + 2.1314 + 2.1315 + 2.1316 +var Ajax = { 2.1317 + getTransport: function() { 2.1318 + return Try.these( 2.1319 + function() {return new XMLHttpRequest()}, 2.1320 + function() {return new ActiveXObject('Msxml2.XMLHTTP')}, 2.1321 + function() {return new ActiveXObject('Microsoft.XMLHTTP')} 2.1322 + ) || false; 2.1323 + }, 2.1324 + 2.1325 + activeRequestCount: 0 2.1326 +}; 2.1327 + 2.1328 +Ajax.Responders = { 2.1329 + responders: [], 2.1330 + 2.1331 + _each: function(iterator) { 2.1332 + this.responders._each(iterator); 2.1333 + }, 2.1334 + 2.1335 + register: function(responder) { 2.1336 + if (!this.include(responder)) 2.1337 + this.responders.push(responder); 2.1338 + }, 2.1339 + 2.1340 + unregister: function(responder) { 2.1341 + this.responders = this.responders.without(responder); 2.1342 + }, 2.1343 + 2.1344 + dispatch: function(callback, request, transport, json) { 2.1345 + this.each(function(responder) { 2.1346 + if (Object.isFunction(responder[callback])) { 2.1347 + try { 2.1348 + responder[callback].apply(responder, [request, transport, json]); 2.1349 + } catch (e) { } 2.1350 + } 2.1351 + }); 2.1352 + } 2.1353 +}; 2.1354 + 2.1355 +Object.extend(Ajax.Responders, Enumerable); 2.1356 + 2.1357 +Ajax.Responders.register({ 2.1358 + onCreate: function() { Ajax.activeRequestCount++ }, 2.1359 + onComplete: function() { Ajax.activeRequestCount-- } 2.1360 +}); 2.1361 +Ajax.Base = Class.create({ 2.1362 + initialize: function(options) { 2.1363 + this.options = { 2.1364 + method: 'post', 2.1365 + asynchronous: true, 2.1366 + contentType: 'application/x-www-form-urlencoded', 2.1367 + encoding: 'UTF-8', 2.1368 + parameters: '', 2.1369 + evalJSON: true, 2.1370 + evalJS: true 2.1371 + }; 2.1372 + Object.extend(this.options, options || { }); 2.1373 + 2.1374 + this.options.method = this.options.method.toLowerCase(); 2.1375 + 2.1376 + if (Object.isString(this.options.parameters)) 2.1377 + this.options.parameters = this.options.parameters.toQueryParams(); 2.1378 + else if (Object.isHash(this.options.parameters)) 2.1379 + this.options.parameters = this.options.parameters.toObject(); 2.1380 + } 2.1381 +}); 2.1382 +Ajax.Request = Class.create(Ajax.Base, { 2.1383 + _complete: false, 2.1384 + 2.1385 + initialize: function($super, url, options) { 2.1386 + $super(options); 2.1387 + this.transport = Ajax.getTransport(); 2.1388 + this.request(url); 2.1389 + }, 2.1390 + 2.1391 + request: function(url) { 2.1392 + this.url = url; 2.1393 + this.method = this.options.method; 2.1394 + var params = Object.clone(this.options.parameters); 2.1395 + 2.1396 + if (!['get', 'post'].include(this.method)) { 2.1397 + params['_method'] = this.method; 2.1398 + this.method = 'post'; 2.1399 + } 2.1400 + 2.1401 + this.parameters = params; 2.1402 + 2.1403 + if (params = Object.toQueryString(params)) { 2.1404 + if (this.method == 'get') 2.1405 + this.url += (this.url.include('?') ? '&' : '?') + params; 2.1406 + else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) 2.1407 + params += '&_='; 2.1408 + } 2.1409 + 2.1410 + try { 2.1411 + var response = new Ajax.Response(this); 2.1412 + if (this.options.onCreate) this.options.onCreate(response); 2.1413 + Ajax.Responders.dispatch('onCreate', this, response); 2.1414 + 2.1415 + this.transport.open(this.method.toUpperCase(), this.url, 2.1416 + this.options.asynchronous); 2.1417 + 2.1418 + if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1); 2.1419 + 2.1420 + this.transport.onreadystatechange = this.onStateChange.bind(this); 2.1421 + this.setRequestHeaders(); 2.1422 + 2.1423 + this.body = this.method == 'post' ? (this.options.postBody || params) : null; 2.1424 + this.transport.send(this.body); 2.1425 + 2.1426 + /* Force Firefox to handle ready state 4 for synchronous requests */ 2.1427 + if (!this.options.asynchronous && this.transport.overrideMimeType) 2.1428 + this.onStateChange(); 2.1429 + 2.1430 + } 2.1431 + catch (e) { 2.1432 + this.dispatchException(e); 2.1433 + } 2.1434 + }, 2.1435 + 2.1436 + onStateChange: function() { 2.1437 + var readyState = this.transport.readyState; 2.1438 + if (readyState > 1 && !((readyState == 4) && this._complete)) 2.1439 + this.respondToReadyState(this.transport.readyState); 2.1440 + }, 2.1441 + 2.1442 + setRequestHeaders: function() { 2.1443 + var headers = { 2.1444 + 'X-Requested-With': 'XMLHttpRequest', 2.1445 + 'X-Prototype-Version': Prototype.Version, 2.1446 + 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' 2.1447 + }; 2.1448 + 2.1449 + if (this.method == 'post') { 2.1450 + headers['Content-type'] = this.options.contentType + 2.1451 + (this.options.encoding ? '; charset=' + this.options.encoding : ''); 2.1452 + 2.1453 + /* Force "Connection: close" for older Mozilla browsers to work 2.1454 + * around a bug where XMLHttpRequest sends an incorrect 2.1455 + * Content-length header. See Mozilla Bugzilla #246651. 2.1456 + */ 2.1457 + if (this.transport.overrideMimeType && 2.1458 + (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) 2.1459 + headers['Connection'] = 'close'; 2.1460 + } 2.1461 + 2.1462 + if (typeof this.options.requestHeaders == 'object') { 2.1463 + var extras = this.options.requestHeaders; 2.1464 + 2.1465 + if (Object.isFunction(extras.push)) 2.1466 + for (var i = 0, length = extras.length; i < length; i += 2) 2.1467 + headers[extras[i]] = extras[i+1]; 2.1468 + else 2.1469 + $H(extras).each(function(pair) { headers[pair.key] = pair.value }); 2.1470 + } 2.1471 + 2.1472 + for (var name in headers) 2.1473 + this.transport.setRequestHeader(name, headers[name]); 2.1474 + }, 2.1475 + 2.1476 + success: function() { 2.1477 + var status = this.getStatus(); 2.1478 + return !status || (status >= 200 && status < 300); 2.1479 + }, 2.1480 + 2.1481 + getStatus: function() { 2.1482 + try { 2.1483 + return this.transport.status || 0; 2.1484 + } catch (e) { return 0 } 2.1485 + }, 2.1486 + 2.1487 + respondToReadyState: function(readyState) { 2.1488 + var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this); 2.1489 + 2.1490 + if (state == 'Complete') { 2.1491 + try { 2.1492 + this._complete = true; 2.1493 + (this.options['on' + response.status] 2.1494 + || this.options['on' + (this.success() ? 'Success' : 'Failure')] 2.1495 + || Prototype.emptyFunction)(response, response.headerJSON); 2.1496 + } catch (e) { 2.1497 + this.dispatchException(e); 2.1498 + } 2.1499 + 2.1500 + var contentType = response.getHeader('Content-type'); 2.1501 + if (this.options.evalJS == 'force' 2.1502 + || (this.options.evalJS && this.isSameOrigin() && contentType 2.1503 + && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))) 2.1504 + this.evalResponse(); 2.1505 + } 2.1506 + 2.1507 + try { 2.1508 + (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON); 2.1509 + Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON); 2.1510 + } catch (e) { 2.1511 + this.dispatchException(e); 2.1512 + } 2.1513 + 2.1514 + if (state == 'Complete') { 2.1515 + this.transport.onreadystatechange = Prototype.emptyFunction; 2.1516 + } 2.1517 + }, 2.1518 + 2.1519 + isSameOrigin: function() { 2.1520 + var m = this.url.match(/^\s*https?:\/\/[^\/]*/); 2.1521 + return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({ 2.1522 + protocol: location.protocol, 2.1523 + domain: document.domain, 2.1524 + port: location.port ? ':' + location.port : '' 2.1525 + })); 2.1526 + }, 2.1527 + 2.1528 + getHeader: function(name) { 2.1529 + try { 2.1530 + return this.transport.getResponseHeader(name) || null; 2.1531 + } catch (e) { return null; } 2.1532 + }, 2.1533 + 2.1534 + evalResponse: function() { 2.1535 + try { 2.1536 + return eval((this.transport.responseText || '').unfilterJSON()); 2.1537 + } catch (e) { 2.1538 + this.dispatchException(e); 2.1539 + } 2.1540 + }, 2.1541 + 2.1542 + dispatchException: function(exception) { 2.1543 + (this.options.onException || Prototype.emptyFunction)(this, exception); 2.1544 + Ajax.Responders.dispatch('onException', this, exception); 2.1545 + } 2.1546 +}); 2.1547 + 2.1548 +Ajax.Request.Events = 2.1549 + ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; 2.1550 + 2.1551 + 2.1552 + 2.1553 + 2.1554 + 2.1555 + 2.1556 + 2.1557 + 2.1558 +Ajax.Response = Class.create({ 2.1559 + initialize: function(request){ 2.1560 + this.request = request; 2.1561 + var transport = this.transport = request.transport, 2.1562 + readyState = this.readyState = transport.readyState; 2.1563 + 2.1564 + if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) { 2.1565 + this.status = this.getStatus(); 2.1566 + this.statusText = this.getStatusText(); 2.1567 + this.responseText = String.interpret(transport.responseText); 2.1568 + this.headerJSON = this._getHeaderJSON(); 2.1569 + } 2.1570 + 2.1571 + if(readyState == 4) { 2.1572 + var xml = transport.responseXML; 2.1573 + this.responseXML = Object.isUndefined(xml) ? null : xml; 2.1574 + this.responseJSON = this._getResponseJSON(); 2.1575 + } 2.1576 + }, 2.1577 + 2.1578 + status: 0, 2.1579 + 2.1580 + statusText: '', 2.1581 + 2.1582 + getStatus: Ajax.Request.prototype.getStatus, 2.1583 + 2.1584 + getStatusText: function() { 2.1585 + try { 2.1586 + return this.transport.statusText || ''; 2.1587 + } catch (e) { return '' } 2.1588 + }, 2.1589 + 2.1590 + getHeader: Ajax.Request.prototype.getHeader, 2.1591 + 2.1592 + getAllHeaders: function() { 2.1593 + try { 2.1594 + return this.getAllResponseHeaders(); 2.1595 + } catch (e) { return null } 2.1596 + }, 2.1597 + 2.1598 + getResponseHeader: function(name) { 2.1599 + return this.transport.getResponseHeader(name); 2.1600 + }, 2.1601 + 2.1602 + getAllResponseHeaders: function() { 2.1603 + return this.transport.getAllResponseHeaders(); 2.1604 + }, 2.1605 + 2.1606 + _getHeaderJSON: function() { 2.1607 + var json = this.getHeader('X-JSON'); 2.1608 + if (!json) return null; 2.1609 + json = decodeURIComponent(escape(json)); 2.1610 + try { 2.1611 + return json.evalJSON(this.request.options.sanitizeJSON || 2.1612 + !this.request.isSameOrigin()); 2.1613 + } catch (e) { 2.1614 + this.request.dispatchException(e); 2.1615 + } 2.1616 + }, 2.1617 + 2.1618 + _getResponseJSON: function() { 2.1619 + var options = this.request.options; 2.1620 + if (!options.evalJSON || (options.evalJSON != 'force' && 2.1621 + !(this.getHeader('Content-type') || '').include('application/json')) || 2.1622 + this.responseText.blank()) 2.1623 + return null; 2.1624 + try { 2.1625 + return this.responseText.evalJSON(options.sanitizeJSON || 2.1626 + !this.request.isSameOrigin()); 2.1627 + } catch (e) { 2.1628 + this.request.dispatchException(e); 2.1629 + } 2.1630 + } 2.1631 +}); 2.1632 + 2.1633 +Ajax.Updater = Class.create(Ajax.Request, { 2.1634 + initialize: function($super, container, url, options) { 2.1635 + this.container = { 2.1636 + success: (container.success || container), 2.1637 + failure: (container.failure || (container.success ? null : container)) 2.1638 + }; 2.1639 + 2.1640 + options = Object.clone(options); 2.1641 + var onComplete = options.onComplete; 2.1642 + options.onComplete = (function(response, json) { 2.1643 + this.updateContent(response.responseText); 2.1644 + if (Object.isFunction(onComplete)) onComplete(response, json); 2.1645 + }).bind(this); 2.1646 + 2.1647 + $super(url, options); 2.1648 + }, 2.1649 + 2.1650 + updateContent: function(responseText) { 2.1651 + var receiver = this.container[this.success() ? 'success' : 'failure'], 2.1652 + options = this.options; 2.1653 + 2.1654 + if (!options.evalScripts) responseText = responseText.stripScripts(); 2.1655 + 2.1656 + if (receiver = $(receiver)) { 2.1657 + if (options.insertion) { 2.1658 + if (Object.isString(options.insertion)) { 2.1659 + var insertion = { }; insertion[options.insertion] = responseText; 2.1660 + receiver.insert(insertion); 2.1661 + } 2.1662 + else options.insertion(receiver, responseText); 2.1663 + } 2.1664 + else receiver.update(responseText); 2.1665 + } 2.1666 + } 2.1667 +}); 2.1668 + 2.1669 +Ajax.PeriodicalUpdater = Class.create(Ajax.Base, { 2.1670 + initialize: function($super, container, url, options) { 2.1671 + $super(options); 2.1672 + this.onComplete = this.options.onComplete; 2.1673 + 2.1674 + this.frequency = (this.options.frequency || 2); 2.1675 + this.decay = (this.options.decay || 1); 2.1676 + 2.1677 + this.updater = { }; 2.1678 + this.container = container; 2.1679 + this.url = url; 2.1680 + 2.1681 + this.start(); 2.1682 + }, 2.1683 + 2.1684 + start: function() { 2.1685 + this.options.onComplete = this.updateComplete.bind(this); 2.1686 + this.onTimerEvent(); 2.1687 + }, 2.1688 + 2.1689 + stop: function() { 2.1690 + this.updater.options.onComplete = undefined; 2.1691 + clearTimeout(this.timer); 2.1692 + (this.onComplete || Prototype.emptyFunction).apply(this, arguments); 2.1693 + }, 2.1694 + 2.1695 + updateComplete: function(response) { 2.1696 + if (this.options.decay) { 2.1697 + this.decay = (response.responseText == this.lastText ? 2.1698 + this.decay * this.options.decay : 1); 2.1699 + 2.1700 + this.lastText = response.responseText; 2.1701 + } 2.1702 + this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency); 2.1703 + }, 2.1704 + 2.1705 + onTimerEvent: function() { 2.1706 + this.updater = new Ajax.Updater(this.container, this.url, this.options); 2.1707 + } 2.1708 +}); 2.1709 + 2.1710 + 2.1711 + 2.1712 +function $(element) { 2.1713 + if (arguments.length > 1) { 2.1714 + for (var i = 0, elements = [], length = arguments.length; i < length; i++) 2.1715 + elements.push($(arguments[i])); 2.1716 + return elements; 2.1717 + } 2.1718 + if (Object.isString(element)) 2.1719 + element = document.getElementById(element); 2.1720 + return Element.extend(element); 2.1721 +} 2.1722 + 2.1723 +if (Prototype.BrowserFeatures.XPath) { 2.1724 + document._getElementsByXPath = function(expression, parentElement) { 2.1725 + var results = []; 2.1726 + var query = document.evaluate(expression, $(parentElement) || document, 2.1727 + null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); 2.1728 + for (var i = 0, length = query.snapshotLength; i < length; i++) 2.1729 + results.push(Element.extend(query.snapshotItem(i))); 2.1730 + return results; 2.1731 + }; 2.1732 +} 2.1733 + 2.1734 +/*--------------------------------------------------------------------------*/ 2.1735 + 2.1736 +if (!window.Node) var Node = { }; 2.1737 + 2.1738 +if (!Node.ELEMENT_NODE) { 2.1739 + Object.extend(Node, { 2.1740 + ELEMENT_NODE: 1, 2.1741 + ATTRIBUTE_NODE: 2, 2.1742 + TEXT_NODE: 3, 2.1743 + CDATA_SECTION_NODE: 4, 2.1744 + ENTITY_REFERENCE_NODE: 5, 2.1745 + ENTITY_NODE: 6, 2.1746 + PROCESSING_INSTRUCTION_NODE: 7, 2.1747 + COMMENT_NODE: 8, 2.1748 + DOCUMENT_NODE: 9, 2.1749 + DOCUMENT_TYPE_NODE: 10, 2.1750 + DOCUMENT_FRAGMENT_NODE: 11, 2.1751 + NOTATION_NODE: 12 2.1752 + }); 2.1753 +} 2.1754 + 2.1755 + 2.1756 +(function(global) { 2.1757 + 2.1758 + var SETATTRIBUTE_IGNORES_NAME = (function(){ 2.1759 + var elForm = document.createElement("form"); 2.1760 + var elInput = document.createElement("input"); 2.1761 + var root = document.documentElement; 2.1762 + elInput.setAttribute("name", "test"); 2.1763 + elForm.appendChild(elInput); 2.1764 + root.appendChild(elForm); 2.1765 + var isBuggy = elForm.elements 2.1766 + ? (typeof elForm.elements.test == "undefined") 2.1767 + : null; 2.1768 + root.removeChild(elForm); 2.1769 + elForm = elInput = null; 2.1770 + return isBuggy; 2.1771 + })(); 2.1772 + 2.1773 + var element = global.Element; 2.1774 + global.Element = function(tagName, attributes) { 2.1775 + attributes = attributes || { }; 2.1776 + tagName = tagName.toLowerCase(); 2.1777 + var cache = Element.cache; 2.1778 + if (SETATTRIBUTE_IGNORES_NAME && attributes.name) { 2.1779 + tagName = '<' + tagName + ' name="' + attributes.name + '">'; 2.1780 + delete attributes.name; 2.1781 + return Element.writeAttribute(document.createElement(tagName), attributes); 2.1782 + } 2.1783 + if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName)); 2.1784 + return Element.writeAttribute(cache[tagName].cloneNode(false), attributes); 2.1785 + }; 2.1786 + Object.extend(global.Element, element || { }); 2.1787 + if (element) global.Element.prototype = element.prototype; 2.1788 +})(this); 2.1789 + 2.1790 +Element.cache = { }; 2.1791 +Element.idCounter = 1; 2.1792 + 2.1793 +Element.Methods = { 2.1794 + visible: function(element) { 2.1795 + return $(element).style.display != 'none'; 2.1796 + }, 2.1797 + 2.1798 + toggle: function(element) { 2.1799 + element = $(element); 2.1800 + Element[Element.visible(element) ? 'hide' : 'show'](element); 2.1801 + return element; 2.1802 + }, 2.1803 + 2.1804 + 2.1805 + hide: function(element) { 2.1806 + element = $(element); 2.1807 + element.style.display = 'none'; 2.1808 + return element; 2.1809 + }, 2.1810 + 2.1811 + show: function(element) { 2.1812 + element = $(element); 2.1813 + element.style.display = ''; 2.1814 + return element; 2.1815 + }, 2.1816 + 2.1817 + remove: function(element) { 2.1818 + element = $(element); 2.1819 + element.parentNode.removeChild(element); 2.1820 + return element; 2.1821 + }, 2.1822 + 2.1823 + update: (function(){ 2.1824 + 2.1825 + var SELECT_ELEMENT_INNERHTML_BUGGY = (function(){ 2.1826 + var el = document.createElement("select"), 2.1827 + isBuggy = true; 2.1828 + el.innerHTML = "<option value=\"test\">test</option>"; 2.1829 + if (el.options && el.options[0]) { 2.1830 + isBuggy = el.options[0].nodeName.toUpperCase() !== "OPTION"; 2.1831 + } 2.1832 + el = null; 2.1833 + return isBuggy; 2.1834 + })(); 2.1835 + 2.1836 + var TABLE_ELEMENT_INNERHTML_BUGGY = (function(){ 2.1837 + try { 2.1838 + var el = document.createElement("table"); 2.1839 + if (el && el.tBodies) { 2.1840 + el.innerHTML = "<tbody><tr><td>test</td></tr></tbody>"; 2.1841 + var isBuggy = typeof el.tBodies[0] == "undefined"; 2.1842 + el = null; 2.1843 + return isBuggy; 2.1844 + } 2.1845 + } catch (e) { 2.1846 + return true; 2.1847 + } 2.1848 + })(); 2.1849 + 2.1850 + var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING = (function () { 2.1851 + var s = document.createElement("script"), 2.1852 + isBuggy = false; 2.1853 + try { 2.1854 + s.appendChild(document.createTextNode("")); 2.1855 + isBuggy = !s.firstChild || 2.1856 + s.firstChild && s.firstChild.nodeType !== 3; 2.1857 + } catch (e) { 2.1858 + isBuggy = true; 2.1859 + } 2.1860 + s = null; 2.1861 + return isBuggy; 2.1862 + })(); 2.1863 + 2.1864 + function update(element, content) { 2.1865 + element = $(element); 2.1866 + 2.1867 + if (content && content.toElement) 2.1868 + content = content.toElement(); 2.1869 + 2.1870 + if (Object.isElement(content)) 2.1871 + return element.update().insert(content); 2.1872 + 2.1873 + content = Object.toHTML(content); 2.1874 + 2.1875 + var tagName = element.tagName.toUpperCase(); 2.1876 + 2.1877 + if (tagName === 'SCRIPT' && SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING) { 2.1878 + element.text = content; 2.1879 + return element; 2.1880 + } 2.1881 + 2.1882 + if (SELECT_ELEMENT_INNERHTML_BUGGY || TABLE_ELEMENT_INNERHTML_BUGGY) { 2.1883 + if (tagName in Element._insertionTranslations.tags) { 2.1884 + while (element.firstChild) { 2.1885 + element.removeChild(element.firstChild); 2.1886 + } 2.1887 + Element._getContentFromAnonymousElement(tagName, content.stripScripts()) 2.1888 + .each(function(node) { 2.1889 + element.appendChild(node) 2.1890 + }); 2.1891 + } 2.1892 + else { 2.1893 + element.innerHTML = content.stripScripts(); 2.1894 + } 2.1895 + } 2.1896 + else { 2.1897 + element.innerHTML = content.stripScripts(); 2.1898 + } 2.1899 + 2.1900 + content.evalScripts.bind(content).defer(); 2.1901 + return element; 2.1902 + } 2.1903 + 2.1904 + return update; 2.1905 + })(), 2.1906 + 2.1907 + replace: function(element, content) { 2.1908 + element = $(element); 2.1909 + if (content && content.toElement) content = content.toElement(); 2.1910 + else if (!Object.isElement(content)) { 2.1911 + content = Object.toHTML(content); 2.1912 + var range = element.ownerDocument.createRange(); 2.1913 + range.selectNode(element); 2.1914 + content.evalScripts.bind(content).defer(); 2.1915 + content = range.createContextualFragment(content.stripScripts()); 2.1916 + } 2.1917 + element.parentNode.replaceChild(content, element); 2.1918 + return element; 2.1919 + }, 2.1920 + 2.1921 + insert: function(element, insertions) { 2.1922 + element = $(element); 2.1923 + 2.1924 + if (Object.isString(insertions) || Object.isNumber(insertions) || 2.1925 + Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML))) 2.1926 + insertions = {bottom:insertions}; 2.1927 + 2.1928 + var content, insert, tagName, childNodes; 2.1929 + 2.1930 + for (var position in insertions) { 2.1931 + content = insertions[position]; 2.1932 + position = position.toLowerCase(); 2.1933 + insert = Element._insertionTranslations[position]; 2.1934 + 2.1935 + if (content && content.toElement) content = content.toElement(); 2.1936 + if (Object.isElement(content)) { 2.1937 + insert(element, content); 2.1938 + continue; 2.1939 + } 2.1940 + 2.1941 + content = Object.toHTML(content); 2.1942 + 2.1943 + tagName = ((position == 'before' || position == 'after') 2.1944 + ? element.parentNode : element).tagName.toUpperCase(); 2.1945 + 2.1946 + childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts()); 2.1947 + 2.1948 + if (position == 'top' || position == 'after') childNodes.reverse(); 2.1949 + childNodes.each(insert.curry(element)); 2.1950 + 2.1951 + content.evalScripts.bind(content).defer(); 2.1952 + } 2.1953 + 2.1954 + return element; 2.1955 + }, 2.1956 + 2.1957 + wrap: function(element, wrapper, attributes) { 2.1958 + element = $(element); 2.1959 + if (Object.isElement(wrapper)) 2.1960 + $(wrapper).writeAttribute(attributes || { }); 2.1961 + else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes); 2.1962 + else wrapper = new Element('div', wrapper); 2.1963 + if (element.parentNode) 2.1964 + element.parentNode.replaceChild(wrapper, element); 2.1965 + wrapper.appendChild(element); 2.1966 + return wrapper; 2.1967 + }, 2.1968 + 2.1969 + inspect: function(element) { 2.1970 + element = $(element); 2.1971 + var result = '<' + element.tagName.toLowerCase(); 2.1972 + $H({'id': 'id', 'className': 'class'}).each(function(pair) { 2.1973 + var property = pair.first(), attribute = pair.last(); 2.1974 + var value = (element[property] || '').toString(); 2.1975 + if (value) result += ' ' + attribute + '=' + value.inspect(true); 2.1976 + }); 2.1977 + return result + '>'; 2.1978 + }, 2.1979 + 2.1980 + recursivelyCollect: function(element, property) { 2.1981 + element = $(element); 2.1982 + var elements = []; 2.1983 + while (element = element[property]) 2.1984 + if (element.nodeType == 1) 2.1985 + elements.push(Element.extend(element)); 2.1986 + return elements; 2.1987 + }, 2.1988 + 2.1989 + ancestors: function(element) { 2.1990 + return Element.recursivelyCollect(element, 'parentNode'); 2.1991 + }, 2.1992 + 2.1993 + descendants: function(element) { 2.1994 + return Element.select(element, "*"); 2.1995 + }, 2.1996 + 2.1997 + firstDescendant: function(element) { 2.1998 + element = $(element).firstChild; 2.1999 + while (element && element.nodeType != 1) element = element.nextSibling; 2.2000 + return $(element); 2.2001 + }, 2.2002 + 2.2003 + immediateDescendants: function(element) { 2.2004 + if (!(element = $(element).firstChild)) return []; 2.2005 + while (element && element.nodeType != 1) element = element.nextSibling; 2.2006 + if (element) return [element].concat($(element).nextSiblings()); 2.2007 + return []; 2.2008 + }, 2.2009 + 2.2010 + previousSiblings: function(element) { 2.2011 + return Element.recursivelyCollect(element, 'previousSibling'); 2.2012 + }, 2.2013 + 2.2014 + nextSiblings: function(element) { 2.2015 + return Element.recursivelyCollect(element, 'nextSibling'); 2.2016 + }, 2.2017 + 2.2018 + siblings: function(element) { 2.2019 + element = $(element); 2.2020 + return Element.previousSiblings(element).reverse() 2.2021 + .concat(Element.nextSiblings(element)); 2.2022 + }, 2.2023 + 2.2024 + match: function(element, selector) { 2.2025 + if (Object.isString(selector)) 2.2026 + selector = new Selector(selector); 2.2027 + return selector.match($(element)); 2.2028 + }, 2.2029 + 2.2030 + up: function(element, expression, index) { 2.2031 + element = $(element); 2.2032 + if (arguments.length == 1) return $(element.parentNode); 2.2033 + var ancestors = Element.ancestors(element); 2.2034 + return Object.isNumber(expression) ? ancestors[expression] : 2.2035 + Selector.findElement(ancestors, expression, index); 2.2036 + }, 2.2037 + 2.2038 + down: function(element, expression, index) { 2.2039 + element = $(element); 2.2040 + if (arguments.length == 1) return Element.firstDescendant(element); 2.2041 + return Object.isNumber(expression) ? Element.descendants(element)[expression] : 2.2042 + Element.select(element, expression)[index || 0]; 2.2043 + }, 2.2044 + 2.2045 + previous: function(element, expression, index) { 2.2046 + element = $(element); 2.2047 + if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element)); 2.2048 + var previousSiblings = Element.previousSiblings(element); 2.2049 + return Object.isNumber(expression) ? previousSiblings[expression] : 2.2050 + Selector.findElement(previousSiblings, expression, index); 2.2051 + }, 2.2052 + 2.2053 + next: function(element, expression, index) { 2.2054 + element = $(element); 2.2055 + if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element)); 2.2056 + var nextSiblings = Element.nextSiblings(element); 2.2057 + return Object.isNumber(expression) ? nextSiblings[expression] : 2.2058 + Selector.findElement(nextSiblings, expression, index); 2.2059 + }, 2.2060 + 2.2061 + 2.2062 + select: function(element) { 2.2063 + var args = Array.prototype.slice.call(arguments, 1); 2.2064 + return Selector.findChildElements(element, args); 2.2065 + }, 2.2066 + 2.2067 + adjacent: function(element) { 2.2068 + var args = Array.prototype.slice.call(arguments, 1); 2.2069 + return Selector.findChildElements(element.parentNode, args).without(element); 2.2070 + }, 2.2071 + 2.2072 + identify: function(element) { 2.2073 + element = $(element); 2.2074 + var id = Element.readAttribute(element, 'id'); 2.2075 + if (id) return id; 2.2076 + do { id = 'anonymous_element_' + Element.idCounter++ } while ($(id)); 2.2077 + Element.writeAttribute(element, 'id', id); 2.2078 + return id; 2.2079 + }, 2.2080 + 2.2081 + readAttribute: function(element, name) { 2.2082 + element = $(element); 2.2083 + if (Prototype.Browser.IE) { 2.2084 + var t = Element._attributeTranslations.read; 2.2085 + if (t.values[name]) return t.values[name](element, name); 2.2086 + if (t.names[name]) name = t.names[name]; 2.2087 + if (name.include(':')) { 2.2088 + return (!element.attributes || !element.attributes[name]) ? null : 2.2089 + element.attributes[name].value; 2.2090 + } 2.2091 + } 2.2092 + return element.getAttribute(name); 2.2093 + }, 2.2094 + 2.2095 + writeAttribute: function(element, name, value) { 2.2096 + element = $(element); 2.2097 + var attributes = { }, t = Element._attributeTranslations.write; 2.2098 + 2.2099 + if (typeof name == 'object') attributes = name; 2.2100 + else attributes[name] = Object.isUndefined(value) ? true : value; 2.2101 + 2.2102 + for (var attr in attributes) { 2.2103 + name = t.names[attr] || attr; 2.2104 + value = attributes[attr]; 2.2105 + if (t.values[attr]) name = t.values[attr](element, value); 2.2106 + if (value === false || value === null) 2.2107 + element.removeAttribute(name); 2.2108 + else if (value === true) 2.2109 + element.setAttribute(name, name); 2.2110 + else element.setAttribute(name, value); 2.2111 + } 2.2112 + return element; 2.2113 + }, 2.2114 + 2.2115 + getHeight: function(element) { 2.2116 + return Element.getDimensions(element).height; 2.2117 + }, 2.2118 + 2.2119 + getWidth: function(element) { 2.2120 + return Element.getDimensions(element).width; 2.2121 + }, 2.2122 + 2.2123 + classNames: function(element) { 2.2124 + return new Element.ClassNames(element); 2.2125 + }, 2.2126 + 2.2127 + hasClassName: function(element, className) { 2.2128 + if (!(element = $(element))) return; 2.2129 + var elementClassName = element.className; 2.2130 + return (elementClassName.length > 0 && (elementClassName == className || 2.2131 + new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName))); 2.2132 + }, 2.2133 + 2.2134 + addClassName: function(element, className) { 2.2135 + if (!(element = $(element))) return; 2.2136 + if (!Element.hasClassName(element, className)) 2.2137 + element.className += (element.className ? ' ' : '') + className; 2.2138 + return element; 2.2139 + }, 2.2140 + 2.2141 + removeClassName: function(element, className) { 2.2142 + if (!(element = $(element))) return; 2.2143 + element.className = element.className.replace( 2.2144 + new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip(); 2.2145 + return element; 2.2146 + }, 2.2147 + 2.2148 + toggleClassName: function(element, className) { 2.2149 + if (!(element = $(element))) return; 2.2150 + return Element[Element.hasClassName(element, className) ? 2.2151 + 'removeClassName' : 'addClassName'](element, className); 2.2152 + }, 2.2153 + 2.2154 + cleanWhitespace: function(element) { 2.2155 + element = $(element); 2.2156 + var node = element.firstChild; 2.2157 + while (node) { 2.2158 + var nextNode = node.nextSibling; 2.2159 + if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) 2.2160 + element.removeChild(node); 2.2161 + node = nextNode; 2.2162 + } 2.2163 + return element; 2.2164 + }, 2.2165 + 2.2166 + empty: function(element) { 2.2167 + return $(element).innerHTML.blank(); 2.2168 + }, 2.2169 + 2.2170 + descendantOf: function(element, ancestor) { 2.2171 + element = $(element), ancestor = $(ancestor); 2.2172 + 2.2173 + if (element.compareDocumentPosition) 2.2174 + return (element.compareDocumentPosition(ancestor) & 8) === 8; 2.2175 + 2.2176 + if (ancestor.contains) 2.2177 + return ancestor.contains(element) && ancestor !== element; 2.2178 + 2.2179 + while (element = element.parentNode) 2.2180 + if (element == ancestor) return true; 2.2181 + 2.2182 + return false; 2.2183 + }, 2.2184 + 2.2185 + scrollTo: function(element) { 2.2186 + element = $(element); 2.2187 + var pos = Element.cumulativeOffset(element); 2.2188 + window.scrollTo(pos[0], pos[1]); 2.2189 + return element; 2.2190 + }, 2.2191 + 2.2192 + getStyle: function(element, style) { 2.2193 + element = $(element); 2.2194 + style = style == 'float' ? 'cssFloat' : style.camelize(); 2.2195 + var value = element.style[style]; 2.2196 + if (!value || value == 'auto') { 2.2197 + var css = document.defaultView.getComputedStyle(element, null); 2.2198 + value = css ? css[style] : null; 2.2199 + } 2.2200 + if (style == 'opacity') return value ? parseFloat(value) : 1.0; 2.2201 + return value == 'auto' ? null : value; 2.2202 + }, 2.2203 + 2.2204 + getOpacity: function(element) { 2.2205 + return $(element).getStyle('opacity'); 2.2206 + }, 2.2207 + 2.2208 + setStyle: function(element, styles) { 2.2209 + element = $(element); 2.2210 + var elementStyle = element.style, match; 2.2211 + if (Object.isString(styles)) { 2.2212 + element.style.cssText += ';' + styles; 2.2213 + return styles.include('opacity') ? 2.2214 + element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element; 2.2215 + } 2.2216 + for (var property in styles) 2.2217 + if (property == 'opacity') element.setOpacity(styles[property]); 2.2218 + else 2.2219 + elementStyle[(property == 'float' || property == 'cssFloat') ? 2.2220 + (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') : 2.2221 + property] = styles[property]; 2.2222 + 2.2223 + return element; 2.2224 + }, 2.2225 + 2.2226 + setOpacity: function(element, value) { 2.2227 + element = $(element); 2.2228 + element.style.opacity = (value == 1 || value === '') ? '' : 2.2229 + (value < 0.00001) ? 0 : value; 2.2230 + return element; 2.2231 + }, 2.2232 + 2.2233 + getDimensions: function(element) { 2.2234 + element = $(element); 2.2235 + var display = Element.getStyle(element, 'display'); 2.2236 + if (display != 'none' && display != null) // Safari bug 2.2237 + return {width: element.offsetWidth, height: element.offsetHeight}; 2.2238 + 2.2239 + var els = element.style; 2.2240 + var originalVisibility = els.visibility; 2.2241 + var originalPosition = els.position; 2.2242 + var originalDisplay = els.display; 2.2243 + els.visibility = 'hidden'; 2.2244 + if (originalPosition != 'fixed') // Switching fixed to absolute causes issues in Safari 2.2245 + els.position = 'absolute'; 2.2246 + els.display = 'block'; 2.2247 + var originalWidth = element.clientWidth; 2.2248 + var originalHeight = element.clientHeight; 2.2249 + els.display = originalDisplay; 2.2250 + els.position = originalPosition; 2.2251 + els.visibility = originalVisibility; 2.2252 + return {width: originalWidth, height: originalHeight}; 2.2253 + }, 2.2254 + 2.2255 + makePositioned: function(element) { 2.2256 + element = $(element); 2.2257 + var pos = Element.getStyle(element, 'position'); 2.2258 + if (pos == 'static' || !pos) { 2.2259 + element._madePositioned = true; 2.2260 + element.style.position = 'relative'; 2.2261 + if (Prototype.Browser.Opera) { 2.2262 + element.style.top = 0; 2.2263 + element.style.left = 0; 2.2264 + } 2.2265 + } 2.2266 + return element; 2.2267 + }, 2.2268 + 2.2269 + undoPositioned: function(element) { 2.2270 + element = $(element); 2.2271 + if (element._madePositioned) { 2.2272 + element._madePositioned = undefined; 2.2273 + element.style.position = 2.2274 + element.style.top = 2.2275 + element.style.left = 2.2276 + element.style.bottom = 2.2277 + element.style.right = ''; 2.2278 + } 2.2279 + return element; 2.2280 + }, 2.2281 + 2.2282 + makeClipping: function(element) { 2.2283 + element = $(element); 2.2284 + if (element._overflow) return element; 2.2285 + element._overflow = Element.getStyle(element, 'overflow') || 'auto'; 2.2286 + if (element._overflow !== 'hidden') 2.2287 + element.style.overflow = 'hidden'; 2.2288 + return element; 2.2289 + }, 2.2290 + 2.2291 + undoClipping: function(element) { 2.2292 + element = $(element); 2.2293 + if (!element._overflow) return element; 2.2294 + element.style.overflow = element._overflow == 'auto' ? '' : element._overflow; 2.2295 + element._overflow = null; 2.2296 + return element; 2.2297 + }, 2.2298 + 2.2299 + cumulativeOffset: function(element) { 2.2300 + var valueT = 0, valueL = 0; 2.2301 + do { 2.2302 + valueT += element.offsetTop || 0; 2.2303 + valueL += element.offsetLeft || 0; 2.2304 + element = element.offsetParent; 2.2305 + } while (element); 2.2306 + return Element._returnOffset(valueL, valueT); 2.2307 + }, 2.2308 + 2.2309 + positionedOffset: function(element) { 2.2310 + var valueT = 0, valueL = 0; 2.2311 + do { 2.2312 + valueT += element.offsetTop || 0; 2.2313 + valueL += element.offsetLeft || 0; 2.2314 + element = element.offsetParent; 2.2315 + if (element) { 2.2316 + if (element.tagName.toUpperCase() == 'BODY') break; 2.2317 + var p = Element.getStyle(element, 'position'); 2.2318 + if (p !== 'static') break; 2.2319 + } 2.2320 + } while (element); 2.2321 + return Element._returnOffset(valueL, valueT); 2.2322 + }, 2.2323 + 2.2324 + absolutize: function(element) { 2.2325 + element = $(element); 2.2326 + if (Element.getStyle(element, 'position') == 'absolute') return element; 2.2327 + 2.2328 + var offsets = Element.positionedOffset(element); 2.2329 + var top = offsets[1]; 2.2330 + var left = offsets[0]; 2.2331 + var width = element.clientWidth; 2.2332 + var height = element.clientHeight; 2.2333 + 2.2334 + element._originalLeft = left - parseFloat(element.style.left || 0); 2.2335 + element._originalTop = top - parseFloat(element.style.top || 0); 2.2336 + element._originalWidth = element.style.width; 2.2337 + element._originalHeight = element.style.height; 2.2338 + 2.2339 + element.style.position = 'absolute'; 2.2340 + element.style.top = top + 'px'; 2.2341 + element.style.left = left + 'px'; 2.2342 + element.style.width = width + 'px'; 2.2343 + element.style.height = height + 'px'; 2.2344 + return element; 2.2345 + }, 2.2346 + 2.2347 + relativize: function(element) { 2.2348 + element = $(element); 2.2349 + if (Element.getStyle(element, 'position') == 'relative') return element; 2.2350 + 2.2351 + element.style.position = 'relative'; 2.2352 + var top = parseFloat(element.style.top || 0) - (element._originalTop || 0); 2.2353 + var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0); 2.2354 + 2.2355 + element.style.top = top + 'px'; 2.2356 + element.style.left = left + 'px'; 2.2357 + element.style.height = element._originalHeight; 2.2358 + element.style.width = element._originalWidth; 2.2359 + return element; 2.2360 + }, 2.2361 + 2.2362 + cumulativeScrollOffset: function(element) { 2.2363 + var valueT = 0, valueL = 0; 2.2364 + do { 2.2365 + valueT += element.scrollTop || 0; 2.2366 + valueL += element.scrollLeft || 0; 2.2367 + element = element.parentNode; 2.2368 + } while (element); 2.2369 + return Element._returnOffset(valueL, valueT); 2.2370 + }, 2.2371 + 2.2372 + getOffsetParent: function(element) { 2.2373 + if (element.offsetParent) return $(element.offsetParent); 2.2374 + if (element == document.body) return $(element); 2.2375 + 2.2376 + while ((element = element.parentNode) && element != document.body) 2.2377 + if (Element.getStyle(element, 'position') != 'static') 2.2378 + return $(element); 2.2379 + 2.2380 + return $(document.body); 2.2381 + }, 2.2382 + 2.2383 + viewportOffset: function(forElement) { 2.2384 + var valueT = 0, valueL = 0; 2.2385 + 2.2386 + var element = forElement; 2.2387 + do { 2.2388 + valueT += element.offsetTop || 0; 2.2389 + valueL += element.offsetLeft || 0; 2.2390 + 2.2391 + if (element.offsetParent == document.body && 2.2392 + Element.getStyle(element, 'position') == 'absolute') break; 2.2393 + 2.2394 + } while (element = element.offsetParent); 2.2395 + 2.2396 + element = forElement; 2.2397 + do { 2.2398 + if (!Prototype.Browser.Opera || (element.tagName && (element.tagName.toUpperCase() == 'BODY'))) { 2.2399 + valueT -= element.scrollTop || 0; 2.2400 + valueL -= element.scrollLeft || 0; 2.2401 + } 2.2402 + } while (element = element.parentNode); 2.2403 + 2.2404 + return Element._returnOffset(valueL, valueT); 2.2405 + }, 2.2406 + 2.2407 + clonePosition: function(element, source) { 2.2408 + var options = Object.extend({ 2.2409 + setLeft: true, 2.2410 + setTop: true, 2.2411 + setWidth: true, 2.2412 + setHeight: true, 2.2413 + offsetTop: 0, 2.2414 + offsetLeft: 0 2.2415 + }, arguments[2] || { }); 2.2416 + 2.2417 + source = $(source); 2.2418 + var p = Element.viewportOffset(source); 2.2419 + 2.2420 + element = $(element); 2.2421 + var delta = [0, 0]; 2.2422 + var parent = null; 2.2423 + if (Element.getStyle(element, 'position') == 'absolute') { 2.2424 + parent = Element.getOffsetParent(element); 2.2425 + delta = Element.viewportOffset(parent); 2.2426 + } 2.2427 + 2.2428 + if (parent == document.body) { 2.2429 + delta[0] -= document.body.offsetLeft; 2.2430 + delta[1] -= document.body.offsetTop; 2.2431 + } 2.2432 + 2.2433 + if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; 2.2434 + if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px'; 2.2435 + if (options.setWidth) element.style.width = source.offsetWidth + 'px'; 2.2436 + if (options.setHeight) element.style.height = source.offsetHeight + 'px'; 2.2437 + return element; 2.2438 + } 2.2439 +}; 2.2440 + 2.2441 +Object.extend(Element.Methods, { 2.2442 + getElementsBySelector: Element.Methods.select, 2.2443 + 2.2444 + childElements: Element.Methods.immediateDescendants 2.2445 +}); 2.2446 + 2.2447 +Element._attributeTranslations = { 2.2448 + write: { 2.2449 + names: { 2.2450 + className: 'class', 2.2451 + htmlFor: 'for' 2.2452 + }, 2.2453 + values: { } 2.2454 + } 2.2455 +}; 2.2456 + 2.2457 +if (Prototype.Browser.Opera) { 2.2458 + Element.Methods.getStyle = Element.Methods.getStyle.wrap( 2.2459 + function(proceed, element, style) { 2.2460 + switch (style) { 2.2461 + case 'left': case 'top': case 'right': case 'bottom': 2.2462 + if (proceed(element, 'position') === 'static') return null; 2.2463 + case 'height': case 'width': 2.2464 + if (!Element.visible(element)) return null; 2.2465 + 2.2466 + var dim = parseInt(proceed(element, style), 10); 2.2467 + 2.2468 + if (dim !== element['offset' + style.capitalize()]) 2.2469 + return dim + 'px'; 2.2470 + 2.2471 + var properties; 2.2472 + if (style === 'height') { 2.2473 + properties = ['border-top-width', 'padding-top', 2.2474 + 'padding-bottom', 'border-bottom-width']; 2.2475 + } 2.2476 + else { 2.2477 + properties = ['border-left-width', 'padding-left', 2.2478 + 'padding-right', 'border-right-width']; 2.2479 + } 2.2480 + return properties.inject(dim, function(memo, property) { 2.2481 + var val = proceed(element, property); 2.2482 + return val === null ? memo : memo - parseInt(val, 10); 2.2483 + }) + 'px'; 2.2484 + default: return proceed(element, style); 2.2485 + } 2.2486 + } 2.2487 + ); 2.2488 + 2.2489 + Element.Methods.readAttribute = Element.Methods.readAttribute.wrap( 2.2490 + function(proceed, element, attribute) { 2.2491 + if (attribute === 'title') return element.title; 2.2492 + return proceed(element, attribute); 2.2493 + } 2.2494 + ); 2.2495 +} 2.2496 + 2.2497 +else if (Prototype.Browser.IE) { 2.2498 + Element.Methods.getOffsetParent = Element.Methods.getOffsetParent.wrap( 2.2499 + function(proceed, element) { 2.2500 + element = $(element); 2.2501 + try { element.offsetParent } 2.2502 + catch(e) { return $(document.body) } 2.2503 + var position = element.getStyle('position'); 2.2504 + if (position !== 'static') return proceed(element); 2.2505 + element.setStyle({ position: 'relative' }); 2.2506 + var value = proceed(element); 2.2507 + element.setStyle({ position: position }); 2.2508 + return value; 2.2509 + } 2.2510 + ); 2.2511 + 2.2512 + $w('positionedOffset viewportOffset').each(function(method) { 2.2513 + Element.Methods[method] = Element.Methods[method].wrap( 2.2514 + function(proceed, element) { 2.2515 + element = $(element); 2.2516 + try { element.offsetParent } 2.2517 + catch(e) { return Element._returnOffset(0,0) } 2.2518 + var position = element.getStyle('position'); 2.2519 + if (position !== 'static') return proceed(element); 2.2520 + var offsetParent = element.getOffsetParent(); 2.2521 + if (offsetParent && offsetParent.getStyle('position') === 'fixed') 2.2522 + offsetParent.setStyle({ zoom: 1 }); 2.2523 + element.setStyle({ position: 'relative' }); 2.2524 + var value = proceed(element); 2.2525 + element.setStyle({ position: position }); 2.2526 + return value; 2.2527 + } 2.2528 + ); 2.2529 + }); 2.2530 + 2.2531 + Element.Methods.cumulativeOffset = Element.Methods.cumulativeOffset.wrap( 2.2532 + function(proceed, element) { 2.2533 + try { element.offsetParent } 2.2534 + catch(e) { return Element._returnOffset(0,0) } 2.2535 + return proceed(element); 2.2536 + } 2.2537 + ); 2.2538 + 2.2539 + Element.Methods.getStyle = function(element, style) { 2.2540 + element = $(element); 2.2541 + style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize(); 2.2542 + var value = element.style[style]; 2.2543 + if (!value && element.currentStyle) value = element.currentStyle[style]; 2.2544 + 2.2545 + if (style == 'opacity') { 2.2546 + if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/)) 2.2547 + if (value[1]) return parseFloat(value[1]) / 100; 2.2548 + return 1.0; 2.2549 + } 2.2550 + 2.2551 + if (value == 'auto') { 2.2552 + if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none')) 2.2553 + return element['offset' + style.capitalize()] + 'px'; 2.2554 + return null; 2.2555 + } 2.2556 + return value; 2.2557 + }; 2.2558 + 2.2559 + Element.Methods.setOpacity = function(element, value) { 2.2560 + function stripAlpha(filter){ 2.2561 + return filter.replace(/alpha\([^\)]*\)/gi,''); 2.2562 + } 2.2563 + element = $(element); 2.2564 + var currentStyle = element.currentStyle; 2.2565 + if ((currentStyle && !currentStyle.hasLayout) || 2.2566 + (!currentStyle && element.style.zoom == 'normal')) 2.2567 + element.style.zoom = 1; 2.2568 + 2.2569 + var filter = element.getStyle('filter'), style = element.style; 2.2570 + if (value == 1 || value === '') { 2.2571 + (filter = stripAlpha(filter)) ? 2.2572 + style.filter = filter : style.removeAttribute('filter'); 2.2573 + return element; 2.2574 + } else if (value < 0.00001) value = 0; 2.2575 + style.filter = stripAlpha(filter) + 2.2576 + 'alpha(opacity=' + (value * 100) + ')'; 2.2577 + return element; 2.2578 + }; 2.2579 + 2.2580 + Element._attributeTranslations = (function(){ 2.2581 + 2.2582 + var classProp = 'className'; 2.2583 + var forProp = 'for'; 2.2584 + 2.2585 + var el = document.createElement('div'); 2.2586 + 2.2587 + el.setAttribute(classProp, 'x'); 2.2588 + 2.2589 + if (el.className !== 'x') { 2.2590 + el.setAttribute('class', 'x'); 2.2591 + if (el.className === 'x') { 2.2592 + classProp = 'class'; 2.2593 + } 2.2594 + } 2.2595 + el = null; 2.2596 + 2.2597 + el = document.createElement('label'); 2.2598 + el.setAttribute(forProp, 'x'); 2.2599 + if (el.htmlFor !== 'x') { 2.2600 + el.setAttribute('htmlFor', 'x'); 2.2601 + if (el.htmlFor === 'x') { 2.2602 + forProp = 'htmlFor'; 2.2603 + } 2.2604 + } 2.2605 + el = null; 2.2606 + 2.2607 + return { 2.2608 + read: { 2.2609 + names: { 2.2610 + 'class': classProp, 2.2611 + 'className': classProp, 2.2612 + 'for': forProp, 2.2613 + 'htmlFor': forProp 2.2614 + }, 2.2615 + values: { 2.2616 + _getAttr: function(element, attribute) { 2.2617 + return element.getAttribute(attribute); 2.2618 + }, 2.2619 + _getAttr2: function(element, attribute) { 2.2620 + return element.getAttribute(attribute, 2); 2.2621 + }, 2.2622 + _getAttrNode: function(element, attribute) { 2.2623 + var node = element.getAttributeNode(attribute); 2.2624 + return node ? node.value : ""; 2.2625 + }, 2.2626 + _getEv: (function(){ 2.2627 + 2.2628 + var el = document.createElement('div'); 2.2629 + el.onclick = Prototype.emptyFunction; 2.2630 + var value = el.getAttribute('onclick'); 2.2631 + var f; 2.2632 + 2.2633 + if (String(value).indexOf('{') > -1) { 2.2634 + f = function(element, attribute) { 2.2635 + attribute = element.getAttribute(attribute); 2.2636 + if (!attribute) return null; 2.2637 + attribute = attribute.toString(); 2.2638 + attribute = attribute.split('{')[1]; 2.2639 + attribute = attribute.split('}')[0]; 2.2640 + return attribute.strip(); 2.2641 + }; 2.2642 + } 2.2643 + else if (value === '') { 2.2644 + f = function(element, attribute) { 2.2645 + attribute = element.getAttribute(attribute); 2.2646 + if (!attribute) return null; 2.2647 + return attribute.strip(); 2.2648 + }; 2.2649 + } 2.2650 + el = null; 2.2651 + return f; 2.2652 + })(), 2.2653 + _flag: function(element, attribute) { 2.2654 + return $(element).hasAttribute(attribute) ? attribute : null; 2.2655 + }, 2.2656 + style: function(element) { 2.2657 + return element.style.cssText.toLowerCase(); 2.2658 + }, 2.2659 + title: function(element) { 2.2660 + return element.title; 2.2661 + } 2.2662 + } 2.2663 + } 2.2664 + } 2.2665 + })(); 2.2666 + 2.2667 + Element._attributeTranslations.write = { 2.2668 + names: Object.extend({ 2.2669 + cellpadding: 'cellPadding', 2.2670 + cellspacing: 'cellSpacing' 2.2671 + }, Element._attributeTranslations.read.names), 2.2672 + values: { 2.2673 + checked: function(element, value) { 2.2674 + element.checked = !!value; 2.2675 + }, 2.2676 + 2.2677 + style: function(element, value) { 2.2678 + element.style.cssText = value ? value : ''; 2.2679 + } 2.2680 + } 2.2681 + }; 2.2682 + 2.2683 + Element._attributeTranslations.has = {}; 2.2684 + 2.2685 + $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' + 2.2686 + 'encType maxLength readOnly longDesc frameBorder').each(function(attr) { 2.2687 + Element._attributeTranslations.write.names[attr.toLowerCase()] = attr; 2.2688 + Element._attributeTranslations.has[attr.toLowerCase()] = attr; 2.2689 + }); 2.2690 + 2.2691 + (function(v) { 2.2692 + Object.extend(v, { 2.2693 + href: v._getAttr2, 2.2694 + src: v._getAttr2, 2.2695 + type: v._getAttr, 2.2696 + action: v._getAttrNode, 2.2697 + disabled: v._flag, 2.2698 + checked: v._flag, 2.2699 + readonly: v._flag, 2.2700 + multiple: v._flag, 2.2701 + onload: v._getEv, 2.2702 + onunload: v._getEv, 2.2703 + onclick: v._getEv, 2.2704 + ondblclick: v._getEv, 2.2705 + onmousedown: v._getEv, 2.2706 + onmouseup: v._getEv, 2.2707 + onmouseover: v._getEv, 2.2708 + onmousemove: v._getEv, 2.2709 + onmouseout: v._getEv, 2.2710 + onfocus: v._getEv, 2.2711 + onblur: v._getEv, 2.2712 + onkeypress: v._getEv, 2.2713 + onkeydown: v._getEv, 2.2714 + onkeyup: v._getEv, 2.2715 + onsubmit: v._getEv, 2.2716 + onreset: v._getEv, 2.2717 + onselect: v._getEv, 2.2718 + onchange: v._getEv 2.2719 + }); 2.2720 + })(Element._attributeTranslations.read.values); 2.2721 + 2.2722 + if (Prototype.BrowserFeatures.ElementExtensions) { 2.2723 + (function() { 2.2724 + function _descendants(element) { 2.2725 + var nodes = element.getElementsByTagName('*'), results = []; 2.2726 + for (var i = 0, node; node = nodes[i]; i++) 2.2727 + if (node.tagName !== "!") // Filter out comment nodes. 2.2728 + results.push(node); 2.2729 + return results; 2.2730 + } 2.2731 + 2.2732 + Element.Methods.down = function(element, expression, index) { 2.2733 + element = $(element); 2.2734 + if (arguments.length == 1) return element.firstDescendant(); 2.2735 + return Object.isNumber(expression) ? _descendants(element)[expression] : 2.2736 + Element.select(element, expression)[index || 0]; 2.2737 + } 2.2738 + })(); 2.2739 + } 2.2740 + 2.2741 +} 2.2742 + 2.2743 +else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) { 2.2744 + Element.Methods.setOpacity = function(element, value) { 2.2745 + element = $(element); 2.2746 + element.style.opacity = (value == 1) ? 0.999999 : 2.2747 + (value === '') ? '' : (value < 0.00001) ? 0 : value; 2.2748 + return element; 2.2749 + }; 2.2750 +} 2.2751 + 2.2752 +else if (Prototype.Browser.WebKit) { 2.2753 + Element.Methods.setOpacity = function(element, value) { 2.2754 + element = $(element); 2.2755 + element.style.opacity = (value == 1 || value === '') ? '' : 2.2756 + (value < 0.00001) ? 0 : value; 2.2757 + 2.2758 + if (value == 1) 2.2759 + if(element.tagName.toUpperCase() == 'IMG' && element.width) { 2.2760 + element.width++; element.width--; 2.2761 + } else try { 2.2762 + var n = document.createTextNode(' '); 2.2763 + element.appendChild(n); 2.2764 + element.removeChild(n); 2.2765 + } catch (e) { } 2.2766 + 2.2767 + return element; 2.2768 + }; 2.2769 + 2.2770 + Element.Methods.cumulativeOffset = function(element) { 2.2771 + var valueT = 0, valueL = 0; 2.2772 + do { 2.2773 + valueT += element.offsetTop || 0; 2.2774 + valueL += element.offsetLeft || 0; 2.2775 + if (element.offsetParent == document.body) 2.2776 + if (Element.getStyle(element, 'position') == 'absolute') break; 2.2777 + 2.2778 + element = element.offsetParent; 2.2779 + } while (element); 2.2780 + 2.2781 + return Element._returnOffset(valueL, valueT); 2.2782 + }; 2.2783 +} 2.2784 + 2.2785 +if ('outerHTML' in document.documentElement) { 2.2786 + Element.Methods.replace = function(element, content) { 2.2787 + element = $(element); 2.2788 + 2.2789 + if (content && content.toElement) content = content.toElement(); 2.2790 + if (Object.isElement(content)) { 2.2791 + element.parentNode.replaceChild(content, element); 2.2792 + return element; 2.2793 + } 2.2794 + 2.2795 + content = Object.toHTML(content); 2.2796 + var parent = element.parentNode, tagName = parent.tagName.toUpperCase(); 2.2797 + 2.2798 + if (Element._insertionTranslations.tags[tagName]) { 2.2799 + var nextSibling = element.next(); 2.2800 + var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts()); 2.2801 + parent.removeChild(element); 2.2802 + if (nextSibling) 2.2803 + fragments.each(function(node) { parent.insertBefore(node, nextSibling) }); 2.2804 + else 2.2805 + fragments.each(function(node) { parent.appendChild(node) }); 2.2806 + } 2.2807 + else element.outerHTML = content.stripScripts(); 2.2808 + 2.2809 + content.evalScripts.bind(content).defer(); 2.2810 + return element; 2.2811 + }; 2.2812 +} 2.2813 + 2.2814 +Element._returnOffset = function(l, t) { 2.2815 + var result = [l, t]; 2.2816 + result.left = l; 2.2817 + result.top = t; 2.2818 + return result; 2.2819 +}; 2.2820 + 2.2821 +Element._getContentFromAnonymousElement = function(tagName, html) { 2.2822 + var div = new Element('div'), t = Element._insertionTranslations.tags[tagName]; 2.2823 + if (t) { 2.2824 + div.innerHTML = t[0] + html + t[1]; 2.2825 + t[2].times(function() { div = div.firstChild }); 2.2826 + } else div.innerHTML = html; 2.2827 + return $A(div.childNodes); 2.2828 +}; 2.2829 + 2.2830 +Element._insertionTranslations = { 2.2831 + before: function(element, node) { 2.2832 + element.parentNode.insertBefore(node, element); 2.2833 + }, 2.2834 + top: function(element, node) { 2.2835 + element.insertBefore(node, element.firstChild); 2.2836 + }, 2.2837 + bottom: function(element, node) { 2.2838 + element.appendChild(node); 2.2839 + }, 2.2840 + after: function(element, node) { 2.2841 + element.parentNode.insertBefore(node, element.nextSibling); 2.2842 + }, 2.2843 + tags: { 2.2844 + TABLE: ['<table>', '</table>', 1], 2.2845 + TBODY: ['<table><tbody>', '</tbody></table>', 2], 2.2846 + TR: ['<table><tbody><tr>', '</tr></tbody></table>', 3], 2.2847 + TD: ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4], 2.2848 + SELECT: ['<select>', '</select>', 1] 2.2849 + } 2.2850 +}; 2.2851 + 2.2852 +(function() { 2.2853 + var tags = Element._insertionTranslations.tags; 2.2854 + Object.extend(tags, { 2.2855 + THEAD: tags.TBODY, 2.2856 + TFOOT: tags.TBODY, 2.2857 + TH: tags.TD 2.2858 + }); 2.2859 +})(); 2.2860 + 2.2861 +Element.Methods.Simulated = { 2.2862 + hasAttribute: function(element, attribute) { 2.2863 + attribute = Element._attributeTranslations.has[attribute] || attribute; 2.2864 + var node = $(element).getAttributeNode(attribute); 2.2865 + return !!(node && node.specified); 2.2866 + } 2.2867 +}; 2.2868 + 2.2869 +Element.Methods.ByTag = { }; 2.2870 + 2.2871 +Object.extend(Element, Element.Methods); 2.2872 + 2.2873 +(function(div) { 2.2874 + 2.2875 + if (!Prototype.BrowserFeatures.ElementExtensions && div['__proto__']) { 2.2876 + window.HTMLElement = { }; 2.2877 + window.HTMLElement.prototype = div['__proto__']; 2.2878 + Prototype.BrowserFeatures.ElementExtensions = true; 2.2879 + } 2.2880 + 2.2881 + div = null; 2.2882 + 2.2883 +})(document.createElement('div')) 2.2884 + 2.2885 +Element.extend = (function() { 2.2886 + 2.2887 + function checkDeficiency(tagName) { 2.2888 + if (typeof window.Element != 'undefined') { 2.2889 + var proto = window.Element.prototype; 2.2890 + if (proto) { 2.2891 + var id = '_' + (Math.random()+'').slice(2); 2.2892 + var el = document.createElement(tagName); 2.2893 + proto[id] = 'x'; 2.2894 + var isBuggy = (el[id] !== 'x'); 2.2895 + delete proto[id]; 2.2896 + el = null; 2.2897 + return isBuggy; 2.2898 + } 2.2899 + } 2.2900 + return false; 2.2901 + } 2.2902 + 2.2903 + function extendElementWith(element, methods) { 2.2904 + for (var property in methods) { 2.2905 + var value = methods[property]; 2.2906 + if (Object.isFunction(value) && !(property in element)) 2.2907 + element[property] = value.methodize(); 2.2908 + } 2.2909 + } 2.2910 + 2.2911 + var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY = checkDeficiency('object'); 2.2912 + 2.2913 + if (Prototype.BrowserFeatures.SpecificElementExtensions) { 2.2914 + if (HTMLOBJECTELEMENT_PROTOTYPE_BUGGY) { 2.2915 + return function(element) { 2.2916 + if (element && typeof element._extendedByPrototype == 'undefined') { 2.2917 + var t = element.tagName; 2.2918 + if (t && (/^(?:object|applet|embed)$/i.test(t))) { 2.2919 + extendElementWith(element, Element.Methods); 2.2920 + extendElementWith(element, Element.Methods.Simulated); 2.2921 + extendElementWith(element, Element.Methods.ByTag[t.toUpperCase()]); 2.2922 + } 2.2923 + } 2.2924 + return element; 2.2925 + } 2.2926 + } 2.2927 + return Prototype.K; 2.2928 + } 2.2929 + 2.2930 + var Methods = { }, ByTag = Element.Methods.ByTag; 2.2931 + 2.2932 + var extend = Object.extend(function(element) { 2.2933 + if (!element || typeof element._extendedByPrototype != 'undefined' || 2.2934 + element.nodeType != 1 || element == window) return element; 2.2935 + 2.2936 + var methods = Object.clone(Methods), 2.2937 + tagName = element.tagName.toUpperCase(); 2.2938 + 2.2939 + if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]); 2.2940 + 2.2941 + extendElementWith(element, methods); 2.2942 + 2.2943 + element._extendedByPrototype = Prototype.emptyFunction; 2.2944 + return element; 2.2945 + 2.2946 + }, { 2.2947 + refresh: function() { 2.2948 + if (!Prototype.BrowserFeatures.ElementExtensions) { 2.2949 + Object.extend(Methods, Element.Methods); 2.2950 + Object.extend(Methods, Element.Methods.Simulated); 2.2951 + } 2.2952 + } 2.2953 + }); 2.2954 + 2.2955 + extend.refresh(); 2.2956 + return extend; 2.2957 +})(); 2.2958 + 2.2959 +Element.hasAttribute = function(element, attribute) { 2.2960 + if (element.hasAttribute) return element.hasAttribute(attribute); 2.2961 + return Element.Methods.Simulated.hasAttribute(element, attribute); 2.2962 +}; 2.2963 + 2.2964 +Element.addMethods = function(methods) { 2.2965 + var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag; 2.2966 + 2.2967 + if (!methods) { 2.2968 + Object.extend(Form, Form.Methods); 2.2969 + Object.extend(Form.Element, Form.Element.Methods); 2.2970 + Object.extend(Element.Methods.ByTag, { 2.2971 + "FORM": Object.clone(Form.Methods), 2.2972 + "INPUT": Object.clone(Form.Element.Methods), 2.2973 + "SELECT": Object.clone(Form.Element.Methods), 2.2974 + "TEXTAREA": Object.clone(Form.Element.Methods) 2.2975 + }); 2.2976 + } 2.2977 + 2.2978 + if (arguments.length == 2) { 2.2979 + var tagName = methods; 2.2980 + methods = arguments[1]; 2.2981 + } 2.2982 + 2.2983 + if (!tagName) Object.extend(Element.Methods, methods || { }); 2.2984 + else { 2.2985 + if (Object.isArray(tagName)) tagName.each(extend); 2.2986 + else extend(tagName); 2.2987 + } 2.2988 + 2.2989 + function extend(tagName) { 2.2990 + tagName = tagName.toUpperCase(); 2.2991 + if (!Element.Methods.ByTag[tagName]) 2.2992 + Element.Methods.ByTag[tagName] = { }; 2.2993 + Object.extend(Element.Methods.ByTag[tagName], methods); 2.2994 + } 2.2995 + 2.2996 + function copy(methods, destination, onlyIfAbsent) { 2.2997 + onlyIfAbsent = onlyIfAbsent || false; 2.2998 + for (var property in methods) { 2.2999 + var value = methods[property]; 2.3000 + if (!Object.isFunction(value)) continue; 2.3001 + if (!onlyIfAbsent || !(property in destination)) 2.3002 + destination[property] = value.methodize(); 2.3003 + } 2.3004 + } 2.3005 + 2.3006 + function findDOMClass(tagName) { 2.3007 + var klass; 2.3008 + var trans = { 2.3009 + "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph", 2.3010 + "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList", 2.3011 + "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading", 2.3012 + "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote", 2.3013 + "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION": 2.3014 + "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD": 2.3015 + "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR": 2.3016 + "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET": 2.3017 + "FrameSet", "IFRAME": "IFrame" 2.3018 + }; 2.3019 + if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element'; 2.3020 + if (window[klass]) return window[klass]; 2.3021 + klass = 'HTML' + tagName + 'Element'; 2.3022 + if (window[klass]) return window[klass]; 2.3023 + klass = 'HTML' + tagName.capitalize() + 'Element'; 2.3024 + if (window[klass]) return window[klass]; 2.3025 + 2.3026 + var element = document.createElement(tagName); 2.3027 + var proto = element['__proto__'] || element.constructor.prototype; 2.3028 + element = null; 2.3029 + return proto; 2.3030 + } 2.3031 + 2.3032 + var elementPrototype = window.HTMLElement ? HTMLElement.prototype : 2.3033 + Element.prototype; 2.3034 + 2.3035 + if (F.ElementExtensions) { 2.3036 + copy(Element.Methods, elementPrototype); 2.3037 + copy(Element.Methods.Simulated, elementPrototype, true); 2.3038 + } 2.3039 + 2.3040 + if (F.SpecificElementExtensions) { 2.3041 + for (var tag in Element.Methods.ByTag) { 2.3042 + var klass = findDOMClass(tag); 2.3043 + if (Object.isUndefined(klass)) continue; 2.3044 + copy(T[tag], klass.prototype); 2.3045 + } 2.3046 + } 2.3047 + 2.3048 + Object.extend(Element, Element.Methods); 2.3049 + delete Element.ByTag; 2.3050 + 2.3051 + if (Element.extend.refresh) Element.extend.refresh(); 2.3052 + Element.cache = { }; 2.3053 +}; 2.3054 + 2.3055 + 2.3056 +document.viewport = { 2.3057 + 2.3058 + getDimensions: function() { 2.3059 + return { width: this.getWidth(), height: this.getHeight() }; 2.3060 + }, 2.3061 + 2.3062 + getScrollOffsets: function() { 2.3063 + return Element._returnOffset( 2.3064 + window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft, 2.3065 + window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop); 2.3066 + } 2.3067 +}; 2.3068 + 2.3069 +(function(viewport) { 2.3070 + var B = Prototype.Browser, doc = document, element, property = {}; 2.3071 + 2.3072 + function getRootElement() { 2.3073 + if (B.WebKit && !doc.evaluate) 2.3074 + return document; 2.3075 + 2.3076 + if (B.Opera && window.parseFloat(window.opera.version()) < 9.5) 2.3077 + return document.body; 2.3078 + 2.3079 + return document.documentElement; 2.3080 + } 2.3081 + 2.3082 + function define(D) { 2.3083 + if (!element) element = getRootElement(); 2.3084 + 2.3085 + property[D] = 'client' + D; 2.3086 + 2.3087 + viewport['get' + D] = function() { return element[property[D]] }; 2.3088 + return viewport['get' + D](); 2.3089 + } 2.3090 + 2.3091 + viewport.getWidth = define.curry('Width'); 2.3092 + 2.3093 + viewport.getHeight = define.curry('Height'); 2.3094 +})(document.viewport); 2.3095 + 2.3096 + 2.3097 +Element.Storage = { 2.3098 + UID: 1 2.3099 +}; 2.3100 + 2.3101 +Element.addMethods({ 2.3102 + getStorage: function(element) { 2.3103 + if (!(element = $(element))) return; 2.3104 + 2.3105 + var uid; 2.3106 + if (element === window) { 2.3107 + uid = 0; 2.3108 + } else { 2.3109 + if (typeof element._prototypeUID === "undefined") 2.3110 + element._prototypeUID = [Element.Storage.UID++]; 2.3111 + uid = element._prototypeUID[0]; 2.3112 + } 2.3113 + 2.3114 + if (!Element.Storage[uid]) 2.3115 + Element.Storage[uid] = $H(); 2.3116 + 2.3117 + return Element.Storage[uid]; 2.3118 + }, 2.3119 + 2.3120 + store: function(element, key, value) { 2.3121 + if (!(element = $(element))) return; 2.3122 + 2.3123 + if (arguments.length === 2) { 2.3124 + Element.getStorage(element).update(key); 2.3125 + } else { 2.3126 + Element.getStorage(element).set(key, value); 2.3127 + } 2.3128 + 2.3129 + return element; 2.3130 + }, 2.3131 + 2.3132 + retrieve: function(element, key, defaultValue) { 2.3133 + if (!(element = $(element))) return; 2.3134 + var hash = Element.getStorage(element), value = hash.get(key); 2.3135 + 2.3136 + if (Object.isUndefined(value)) { 2.3137 + hash.set(key, defaultValue); 2.3138 + value = defaultValue; 2.3139 + } 2.3140 + 2.3141 + return value; 2.3142 + }, 2.3143 + 2.3144 + clone: function(element, deep) { 2.3145 + if (!(element = $(element))) return; 2.3146 + var clone = element.cloneNode(deep); 2.3147 + clone._prototypeUID = void 0; 2.3148 + if (deep) { 2.3149 + var descendants = Element.select(clone, '*'), 2.3150 + i = descendants.length; 2.3151 + while (i--) { 2.3152 + descendants[i]._prototypeUID = void 0; 2.3153 + } 2.3154 + } 2.3155 + return Element.extend(clone); 2.3156 + } 2.3157 +}); 2.3158 +/* Portions of the Selector class are derived from Jack Slocum's DomQuery, 2.3159 + * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style 2.3160 + * license. Please see http://www.yui-ext.com/ for more information. */ 2.3161 + 2.3162 +var Selector = Class.create({ 2.3163 + initialize: function(expression) { 2.3164 + this.expression = expression.strip(); 2.3165 + 2.3166 + if (this.shouldUseSelectorsAPI()) { 2.3167 + this.mode = 'selectorsAPI'; 2.3168 + } else if (this.shouldUseXPath()) { 2.3169 + this.mode = 'xpath'; 2.3170 + this.compileXPathMatcher(); 2.3171 + } else { 2.3172 + this.mode = "normal"; 2.3173 + this.compileMatcher(); 2.3174 + } 2.3175 + 2.3176 + }, 2.3177 + 2.3178 + shouldUseXPath: (function() { 2.3179 + 2.3180 + var IS_DESCENDANT_SELECTOR_BUGGY = (function(){ 2.3181 + var isBuggy = false; 2.3182 + if (document.evaluate && window.XPathResult) { 2.3183 + var el = document.createElement('div'); 2.3184 + el.innerHTML = '<ul><li></li></ul><div><ul><li></li></ul></div>'; 2.3185 + 2.3186 + var xpath = ".//*[local-name()='ul' or local-name()='UL']" + 2.3187 + "//*[local-name()='li' or local-name()='LI']"; 2.3188 + 2.3189 + var result = document.evaluate(xpath, el, null, 2.3190 + XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); 2.3191 + 2.3192 + isBuggy = (result.snapshotLength !== 2); 2.3193 + el = null; 2.3194 + } 2.3195 + return isBuggy; 2.3196 + })(); 2.3197 + 2.3198 + return function() { 2.3199 + if (!Prototype.BrowserFeatures.XPath) return false; 2.3200 + 2.3201 + var e = this.expression; 2.3202 + 2.3203 + if (Prototype.Browser.WebKit && 2.3204 + (e.include("-of-type") || e.include(":empty"))) 2.3205 + return false; 2.3206 + 2.3207 + if ((/(\[[\w-]*?:|:checked)/).test(e)) 2.3208 + return false; 2.3209 + 2.3210 + if (IS_DESCENDANT_SELECTOR_BUGGY) return false; 2.3211 + 2.3212 + return true; 2.3213 + } 2.3214 + 2.3215 + })(), 2.3216 + 2.3217 + shouldUseSelectorsAPI: function() { 2.3218 + if (!Prototype.BrowserFeatures.SelectorsAPI) return false; 2.3219 + 2.3220 + if (Selector.CASE_INSENSITIVE_CLASS_NAMES) return false; 2.3221 + 2.3222 + if (!Selector._div) Selector._div = new Element('div'); 2.3223 + 2.3224 + try { 2.3225 + Selector._div.querySelector(this.expression); 2.3226 + } catch(e) { 2.3227 + return false; 2.3228 + } 2.3229 + 2.3230 + return true; 2.3231 + }, 2.3232 + 2.3233 + compileMatcher: function() { 2.3234 + var e = this.expression, ps = Selector.patterns, h = Selector.handlers, 2.3235 + c = Selector.criteria, le, p, m, len = ps.length, name; 2.3236 + 2.3237 + if (Selector._cache[e]) { 2.3238 + this.matcher = Selector._cache[e]; 2.3239 + return; 2.3240 + } 2.3241 + 2.3242 + this.matcher = ["this.matcher = function(root) {", 2.3243 + "var r = root, h = Selector.handlers, c = false, n;"]; 2.3244 + 2.3245 + while (e && le != e && (/\S/).test(e)) { 2.3246 + le = e; 2.3247 + for (var i = 0; i<len; i++) { 2.3248 + p = ps[i].re; 2.3249 + name = ps[i].name; 2.3250 + if (m = e.match(p)) { 2.3251 + this.matcher.push(Object.isFunction(c[name]) ? c[name](m) : 2.3252 + new Template(c[name]).evaluate(m)); 2.3253 + e = e.replace(m[0], ''); 2.3254 + break; 2.3255 + } 2.3256 + } 2.3257 + } 2.3258 + 2.3259 + this.matcher.push("return h.unique(n);\n}"); 2.3260 + eval(this.matcher.join('\n')); 2.3261 + Selector._cache[this.expression] = this.matcher; 2.3262 + }, 2.3263 + 2.3264 + compileXPathMatcher: function() { 2.3265 + var e = this.expression, ps = Selector.patterns, 2.3266 + x = Selector.xpath, le, m, len = ps.length, name; 2.3267 + 2.3268 + if (Selector._cache[e]) { 2.3269 + this.xpath = Selector._cache[e]; return; 2.3270 + } 2.3271 + 2.3272 + this.matcher = ['.//*']; 2.3273 + while (e && le != e && (/\S/).test(e)) { 2.3274 + le = e; 2.3275 + for (var i = 0; i<len; i++) { 2.3276 + name = ps[i].name; 2.3277 + if (m = e.match(ps[i].re)) { 2.3278 + this.matcher.push(Object.isFunction(x[name]) ? x[name](m) : 2.3279 + new Template(x[name]).evaluate(m)); 2.3280 + e = e.replace(m[0], ''); 2.3281 + break; 2.3282 + } 2.3283 + } 2.3284 + } 2.3285 + 2.3286 + this.xpath = this.matcher.join(''); 2.3287 + Selector._cache[this.expression] = this.xpath; 2.3288 + }, 2.3289 + 2.3290 + findElements: function(root) { 2.3291 + root = root || document; 2.3292 + var e = this.expression, results; 2.3293 + 2.3294 + switch (this.mode) { 2.3295 + case 'selectorsAPI': 2.3296 + if (root !== document) { 2.3297 + var oldId = root.id, id = $(root).identify(); 2.3298 + id = id.replace(/([\.:])/g, "\\$1"); 2.3299 + e = "#" + id + " " + e; 2.3300 + } 2.3301 + 2.3302 + results = $A(root.querySelectorAll(e)).map(Element.extend); 2.3303 + root.id = oldId; 2.3304 + 2.3305 + return results; 2.3306 + case 'xpath': 2.3307 + return document._getElementsByXPath(this.xpath, root); 2.3308 + default: 2.3309 + return this.matcher(root); 2.3310 + } 2.3311 + }, 2.3312 + 2.3313 + match: function(element) { 2.3314 + this.tokens = []; 2.3315 + 2.3316 + var e = this.expression, ps = Selector.patterns, as = Selector.assertions; 2.3317 + var le, p, m, len = ps.length, name; 2.3318 + 2.3319 + while (e && le !== e && (/\S/).test(e)) { 2.3320 + le = e; 2.3321 + for (var i = 0; i<len; i++) { 2.3322 + p = ps[i].re; 2.3323 + name = ps[i].name; 2.3324 + if (m = e.match(p)) { 2.3325 + if (as[name]) { 2.3326 + this.tokens.push([name, Object.clone(m)]); 2.3327 + e = e.replace(m[0], ''); 2.3328 + } else { 2.3329 + return this.findElements(document).include(element); 2.3330 + } 2.3331 + } 2.3332 + } 2.3333 + } 2.3334 + 2.3335 + var match = true, name, matches; 2.3336 + for (var i = 0, token; token = this.tokens[i]; i++) { 2.3337 + name = token[0], matches = token[1]; 2.3338 + if (!Selector.assertions[name](element, matches)) { 2.3339 + match = false; break; 2.3340 + } 2.3341 + } 2.3342 + 2.3343 + return match; 2.3344 + }, 2.3345 + 2.3346 + toString: function() { 2.3347 + return this.expression; 2.3348 + }, 2.3349 + 2.3350 + inspect: function() { 2.3351 + return "#<Selector:" + this.expression.inspect() + ">"; 2.3352 + } 2.3353 +}); 2.3354 + 2.3355 +if (Prototype.BrowserFeatures.SelectorsAPI && 2.3356 + document.compatMode === 'BackCompat') { 2.3357 + Selector.CASE_INSENSITIVE_CLASS_NAMES = (function(){ 2.3358 + var div = document.createElement('div'), 2.3359 + span = document.createElement('span'); 2.3360 + 2.3361 + div.id = "prototype_test_id"; 2.3362 + span.className = 'Test'; 2.3363 + div.appendChild(span); 2.3364 + var isIgnored = (div.querySelector('#prototype_test_id .test') !== null); 2.3365 + div = span = null; 2.3366 + return isIgnored; 2.3367 + })(); 2.3368 +} 2.3369 + 2.3370 +Object.extend(Selector, { 2.3371 + _cache: { }, 2.3372 + 2.3373 + xpath: { 2.3374 + descendant: "//*", 2.3375 + child: "/*", 2.3376 + adjacent: "/following-sibling::*[1]", 2.3377 + laterSibling: '/following-sibling::*', 2.3378 + tagName: function(m) { 2.3379 + if (m[1] == '*') return ''; 2.3380 + return "[local-name()='" + m[1].toLowerCase() + 2.3381 + "' or local-name()='" + m[1].toUpperCase() + "']"; 2.3382 + }, 2.3383 + className: "[contains(concat(' ', @class, ' '), ' #{1} ')]", 2.3384 + id: "[@id='#{1}']", 2.3385 + attrPresence: function(m) { 2.3386 + m[1] = m[1].toLowerCase(); 2.3387 + return new Template("[@#{1}]").evaluate(m); 2.3388 + }, 2.3389 + attr: function(m) { 2.3390 + m[1] = m[1].toLowerCase(); 2.3391 + m[3] = m[5] || m[6]; 2.3392 + return new Template(Selector.xpath.operators[m[2]]).evaluate(m); 2.3393 + }, 2.3394 + pseudo: function(m) { 2.3395 + var h = Selector.xpath.pseudos[m[1]]; 2.3396 + if (!h) return ''; 2.3397 + if (Object.isFunction(h)) return h(m); 2.3398 + return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m); 2.3399 + }, 2.3400 + operators: { 2.3401 + '=': "[@#{1}='#{3}']", 2.3402 + '!=': "[@#{1}!='#{3}']", 2.3403 + '^=': "[starts-with(@#{1}, '#{3}')]", 2.3404 + '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']", 2.3405 + '*=': "[contains(@#{1}, '#{3}')]", 2.3406 + '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]", 2.3407 + '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]" 2.3408 + }, 2.3409 + pseudos: { 2.3410 + 'first-child': '[not(preceding-sibling::*)]', 2.3411 + 'last-child': '[not(following-sibling::*)]', 2.3412 + 'only-child': '[not(preceding-sibling::* or following-sibling::*)]', 2.3413 + 'empty': "[count(*) = 0 and (count(text()) = 0)]", 2.3414 + 'checked': "[@checked]", 2.3415 + 'disabled': "[(@disabled) and (@type!='hidden')]", 2.3416 + 'enabled': "[not(@disabled) and (@type!='hidden')]", 2.3417 + 'not': function(m) { 2.3418 + var e = m[6], p = Selector.patterns, 2.3419 + x = Selector.xpath, le, v, len = p.length, name; 2.3420 + 2.3421 + var exclusion = []; 2.3422 + while (e && le != e && (/\S/).test(e)) { 2.3423 + le = e; 2.3424 + for (var i = 0; i<len; i++) { 2.3425 + name = p[i].name 2.3426 + if (m = e.match(p[i].re)) { 2.3427 + v = Object.isFunction(x[name]) ? x[name](m) : new Template(x[name]).evaluate(m); 2.3428 + exclusion.push("(" + v.substring(1, v.length - 1) + ")"); 2.3429 + e = e.replace(m[0], ''); 2.3430 + break; 2.3431 + } 2.3432 + } 2.3433 + } 2.3434 + return "[not(" + exclusion.join(" and ") + ")]"; 2.3435 + }, 2.3436 + 'nth-child': function(m) { 2.3437 + return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m); 2.3438 + }, 2.3439 + 'nth-last-child': function(m) { 2.3440 + return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m); 2.3441 + }, 2.3442 + 'nth-of-type': function(m) { 2.3443 + return Selector.xpath.pseudos.nth("position() ", m); 2.3444 + }, 2.3445 + 'nth-last-of-type': function(m) { 2.3446 + return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m); 2.3447 + }, 2.3448 + 'first-of-type': function(m) { 2.3449 + m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m); 2.3450 + }, 2.3451 + 'last-of-type': function(m) { 2.3452 + m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m); 2.3453 + }, 2.3454 + 'only-of-type': function(m) { 2.3455 + var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m); 2.3456 + }, 2.3457 + nth: function(fragment, m) { 2.3458 + var mm, formula = m[6], predicate; 2.3459 + if (formula == 'even') formula = '2n+0'; 2.3460 + if (formula == 'odd') formula = '2n+1'; 2.3461 + if (mm = formula.match(/^(\d+)$/)) // digit only 2.3462 + return '[' + fragment + "= " + mm[1] + ']'; 2.3463 + if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b 2.3464 + if (mm[1] == "-") mm[1] = -1; 2.3465 + var a = mm[1] ? Number(mm[1]) : 1; 2.3466 + var b = mm[2] ? Number(mm[2]) : 0; 2.3467 + predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " + 2.3468 + "((#{fragment} - #{b}) div #{a} >= 0)]"; 2.3469 + return new Template(predicate).evaluate({ 2.3470 + fragment: fragment, a: a, b: b }); 2.3471 + } 2.3472 + } 2.3473 + } 2.3474 + }, 2.3475 + 2.3476 + criteria: { 2.3477 + tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;', 2.3478 + className: 'n = h.className(n, r, "#{1}", c); c = false;', 2.3479 + id: 'n = h.id(n, r, "#{1}", c); c = false;', 2.3480 + attrPresence: 'n = h.attrPresence(n, r, "#{1}", c); c = false;', 2.3481 + attr: function(m) { 2.3482 + m[3] = (m[5] || m[6]); 2.3483 + return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m); 2.3484 + }, 2.3485 + pseudo: function(m) { 2.3486 + if (m[6]) m[6] = m[6].replace(/"/g, '\\"'); 2.3487 + return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m); 2.3488 + }, 2.3489 + descendant: 'c = "descendant";', 2.3490 + child: 'c = "child";', 2.3491 + adjacent: 'c = "adjacent";', 2.3492 + laterSibling: 'c = "laterSibling";' 2.3493 + }, 2.3494 + 2.3495 + patterns: [ 2.3496 + { name: 'laterSibling', re: /^\s*~\s*/ }, 2.3497 + { name: 'child', re: /^\s*>\s*/ }, 2.3498 + { name: 'adjacent', re: /^\s*\+\s*/ }, 2.3499 + { name: 'descendant', re: /^\s/ }, 2.3500 + 2.3501 + { name: 'tagName', re: /^\s*(\*|[\w\-]+)(\b|$)?/ }, 2.3502 + { name: 'id', re: /^#([\w\-\*]+)(\b|$)/ }, 2.3503 + { name: 'className', re: /^\.([\w\-\*]+)(\b|$)/ }, 2.3504 + { name: 'pseudo', re: /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/ }, 2.3505 + { name: 'attrPresence', re: /^\[((?:[\w-]+:)?[\w-]+)\]/ }, 2.3506 + { name: 'attr', re: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/ } 2.3507 + ], 2.3508 + 2.3509 + assertions: { 2.3510 + tagName: function(element, matches) { 2.3511 + return matches[1].toUpperCase() == element.tagName.toUpperCase(); 2.3512 + }, 2.3513 + 2.3514 + className: function(element, matches) { 2.3515 + return Element.hasClassName(element, matches[1]); 2.3516 + }, 2.3517 + 2.3518 + id: function(element, matches) { 2.3519 + return element.id === matches[1]; 2.3520 + }, 2.3521 + 2.3522 + attrPresence: function(element, matches) { 2.3523 + return Element.hasAttribute(element, matches[1]); 2.3524 + }, 2.3525 + 2.3526 + attr: function(element, matches) { 2.3527 + var nodeValue = Element.readAttribute(element, matches[1]); 2.3528 + return nodeValue && Selector.operators[matches[2]](nodeValue, matches[5] || matches[6]); 2.3529 + } 2.3530 + }, 2.3531 + 2.3532 + handlers: { 2.3533 + concat: function(a, b) { 2.3534 + for (var i = 0, node; node = b[i]; i++) 2.3535 + a.push(node); 2.3536 + return a; 2.3537 + }, 2.3538 + 2.3539 + mark: function(nodes) { 2.3540 + var _true = Prototype.emptyFunction; 2.3541 + for (var i = 0, node; node = nodes[i]; i++) 2.3542 + node._countedByPrototype = _true; 2.3543 + return nodes; 2.3544 + }, 2.3545 + 2.3546 + unmark: (function(){ 2.3547 + 2.3548 + var PROPERTIES_ATTRIBUTES_MAP = (function(){ 2.3549 + var el = document.createElement('div'), 2.3550 + isBuggy = false, 2.3551 + propName = '_countedByPrototype', 2.3552 + value = 'x' 2.3553 + el[propName] = value; 2.3554 + isBuggy = (el.getAttribute(propName) === value); 2.3555 + el = null; 2.3556 + return isBuggy; 2.3557 + })(); 2.3558 + 2.3559 + return PROPERTIES_ATTRIBUTES_MAP ? 2.3560 + function(nodes) { 2.3561 + for (var i = 0, node; node = nodes[i]; i++) 2.3562 + node.removeAttribute('_countedByPrototype'); 2.3563 + return nodes; 2.3564 + } : 2.3565 + function(nodes) { 2.3566 + for (var i = 0, node; node = nodes[i]; i++) 2.3567 + node._countedByPrototype = void 0; 2.3568 + return nodes; 2.3569 + } 2.3570 + })(), 2.3571 + 2.3572 + index: function(parentNode, reverse, ofType) { 2.3573 + parentNode._countedByPrototype = Prototype.emptyFunction; 2.3574 + if (reverse) { 2.3575 + for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) { 2.3576 + var node = nodes[i]; 2.3577 + if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++; 2.3578 + } 2.3579 + } else { 2.3580 + for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++) 2.3581 + if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++; 2.3582 + } 2.3583 + }, 2.3584 + 2.3585 + unique: function(nodes) { 2.3586 + if (nodes.length == 0) return nodes; 2.3587 + var results = [], n; 2.3588 + for (var i = 0, l = nodes.length; i < l; i++) 2.3589 + if (typeof (n = nodes[i])._countedByPrototype == 'undefined') { 2.3590 + n._countedByPrototype = Prototype.emptyFunction; 2.3591 + results.push(Element.extend(n)); 2.3592 + } 2.3593 + return Selector.handlers.unmark(results); 2.3594 + }, 2.3595 + 2.3596 + descendant: function(nodes) { 2.3597 + var h = Selector.handlers; 2.3598 + for (var i = 0, results = [], node; node = nodes[i]; i++) 2.3599 + h.concat(results, node.getElementsByTagName('*')); 2.3600 + return results; 2.3601 + }, 2.3602 + 2.3603 + child: function(nodes) { 2.3604 + var h = Selector.handlers; 2.3605 + for (var i = 0, results = [], node; node = nodes[i]; i++) { 2.3606 + for (var j = 0, child; child = node.childNodes[j]; j++) 2.3607 + if (child.nodeType == 1 && child.tagName != '!') results.push(child); 2.3608 + } 2.3609 + return results; 2.3610 + }, 2.3611 + 2.3612 + adjacent: function(nodes) { 2.3613 + for (var i = 0, results = [], node; node = nodes[i]; i++) { 2.3614 + var next = this.nextElementSibling(node); 2.3615 + if (next) results.push(next); 2.3616 + } 2.3617 + return results; 2.3618 + }, 2.3619 + 2.3620 + laterSibling: function(nodes) { 2.3621 + var h = Selector.handlers; 2.3622 + for (var i = 0, results = [], node; node = nodes[i]; i++) 2.3623 + h.concat(results, Element.nextSiblings(node)); 2.3624 + return results; 2.3625 + }, 2.3626 + 2.3627 + nextElementSibling: function(node) { 2.3628 + while (node = node.nextSibling) 2.3629 + if (node.nodeType == 1) return node; 2.3630 + return null; 2.3631 + }, 2.3632 + 2.3633 + previousElementSibling: function(node) { 2.3634 + while (node = node.previousSibling) 2.3635 + if (node.nodeType == 1) return node; 2.3636 + return null; 2.3637 + }, 2.3638 + 2.3639 + tagName: function(nodes, root, tagName, combinator) { 2.3640 + var uTagName = tagName.toUpperCase(); 2.3641 + var results = [], h = Selector.handlers; 2.3642 + if (nodes) { 2.3643 + if (combinator) { 2.3644 + if (combinator == "descendant") { 2.3645 + for (var i = 0, node; node = nodes[i]; i++) 2.3646 + h.concat(results, node.getElementsByTagName(tagName)); 2.3647 + return results; 2.3648 + } else nodes = this[combinator](nodes); 2.3649 + if (tagName == "*") return nodes; 2.3650 + } 2.3651 + for (var i = 0, node; node = nodes[i]; i++) 2.3652 + if (node.tagName.toUpperCase() === uTagName) results.push(node); 2.3653 + return results; 2.3654 + } else return root.getElementsByTagName(tagName); 2.3655 + }, 2.3656 + 2.3657 + id: function(nodes, root, id, combinator) { 2.3658 + var targetNode = $(id), h = Selector.handlers; 2.3659 + 2.3660 + if (root == document) { 2.3661 + if (!targetNode) return []; 2.3662 + if (!nodes) return [targetNode]; 2.3663 + } else { 2.3664 + if (!root.sourceIndex || root.sourceIndex < 1) { 2.3665 + var nodes = root.getElementsByTagName('*'); 2.3666 + for (var j = 0, node; node = nodes[j]; j++) { 2.3667 + if (node.id === id) return [node]; 2.3668 + } 2.3669 + } 2.3670 + } 2.3671 + 2.3672 + if (nodes) { 2.3673 + if (combinator) { 2.3674 + if (combinator == 'child') { 2.3675 + for (var i = 0, node; node = nodes[i]; i++) 2.3676 + if (targetNode.parentNode == node) return [targetNode]; 2.3677 + } else if (combinator == 'descendant') { 2.3678 + for (var i = 0, node; node = nodes[i]; i++) 2.3679 + if (Element.descendantOf(targetNode, node)) return [targetNode]; 2.3680 + } else if (combinator == 'adjacent') { 2.3681 + for (var i = 0, node; node = nodes[i]; i++) 2.3682 + if (Selector.handlers.previousElementSibling(targetNode) == node) 2.3683 + return [targetNode]; 2.3684 + } else nodes = h[combinator](nodes); 2.3685 + } 2.3686 + for (var i = 0, node; node = nodes[i]; i++) 2.3687 + if (node == targetNode) return [targetNode]; 2.3688 + return []; 2.3689 + } 2.3690 + return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : []; 2.3691 + }, 2.3692 + 2.3693 + className: function(nodes, root, className, combinator) { 2.3694 + if (nodes && combinator) nodes = this[combinator](nodes); 2.3695 + return Selector.handlers.byClassName(nodes, root, className); 2.3696 + }, 2.3697 + 2.3698 + byClassName: function(nodes, root, className) { 2.3699 + if (!nodes) nodes = Selector.handlers.descendant([root]); 2.3700 + var needle = ' ' + className + ' '; 2.3701 + for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) { 2.3702 + nodeClassName = node.className; 2.3703 + if (nodeClassName.length == 0) continue; 2.3704 + if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle)) 2.3705 + results.push(node); 2.3706 + } 2.3707 + return results; 2.3708 + }, 2.3709 + 2.3710 + attrPresence: function(nodes, root, attr, combinator) { 2.3711 + if (!nodes) nodes = root.getElementsByTagName("*"); 2.3712 + if (nodes && combinator) nodes = this[combinator](nodes); 2.3713 + var results = []; 2.3714 + for (var i = 0, node; node = nodes[i]; i++) 2.3715 + if (Element.hasAttribute(node, attr)) results.push(node); 2.3716 + return results; 2.3717 + }, 2.3718 + 2.3719 + attr: function(nodes, root, attr, value, operator, combinator) { 2.3720 + if (!nodes) nodes = root.getElementsByTagName("*"); 2.3721 + if (nodes && combinator) nodes = this[combinator](nodes); 2.3722 + var handler = Selector.operators[operator], results = []; 2.3723 + for (var i = 0, node; node = nodes[i]; i++) { 2.3724 + var nodeValue = Element.readAttribute(node, attr); 2.3725 + if (nodeValue === null) continue; 2.3726 + if (handler(nodeValue, value)) results.push(node); 2.3727 + } 2.3728 + return results; 2.3729 + }, 2.3730 + 2.3731 + pseudo: function(nodes, name, value, root, combinator) { 2.3732 + if (nodes && combinator) nodes = this[combinator](nodes); 2.3733 + if (!nodes) nodes = root.getElementsByTagName("*"); 2.3734 + return Selector.pseudos[name](nodes, value, root); 2.3735 + } 2.3736 + }, 2.3737 + 2.3738 + pseudos: { 2.3739 + 'first-child': function(nodes, value, root) { 2.3740 + for (var i = 0, results = [], node; node = nodes[i]; i++) { 2.3741 + if (Selector.handlers.previousElementSibling(node)) continue; 2.3742 + results.push(node); 2.3743 + } 2.3744 + return results; 2.3745 + }, 2.3746 + 'last-child': function(nodes, value, root) { 2.3747 + for (var i = 0, results = [], node; node = nodes[i]; i++) { 2.3748 + if (Selector.handlers.nextElementSibling(node)) continue; 2.3749 + results.push(node); 2.3750 + } 2.3751 + return results; 2.3752 + }, 2.3753 + 'only-child': function(nodes, value, root) { 2.3754 + var h = Selector.handlers; 2.3755 + for (var i = 0, results = [], node; node = nodes[i]; i++) 2.3756 + if (!h.previousElementSibling(node) && !h.nextElementSibling(node)) 2.3757 + results.push(node); 2.3758 + return results; 2.3759 + }, 2.3760 + 'nth-child': function(nodes, formula, root) { 2.3761 + return Selector.pseudos.nth(nodes, formula, root); 2.3762 + }, 2.3763 + 'nth-last-child': function(nodes, formula, root) { 2.3764 + return Selector.pseudos.nth(nodes, formula, root, true); 2.3765 + }, 2.3766 + 'nth-of-type': function(nodes, formula, root) { 2.3767 + return Selector.pseudos.nth(nodes, formula, root, false, true); 2.3768 + }, 2.3769 + 'nth-last-of-type': function(nodes, formula, root) { 2.3770 + return Selector.pseudos.nth(nodes, formula, root, true, true); 2.3771 + }, 2.3772 + 'first-of-type': function(nodes, formula, root) { 2.3773 + return Selector.pseudos.nth(nodes, "1", root, false, true); 2.3774 + }, 2.3775 + 'last-of-type': function(nodes, formula, root) { 2.3776 + return Selector.pseudos.nth(nodes, "1", root, true, true); 2.3777 + }, 2.3778 + 'only-of-type': function(nodes, formula, root) { 2.3779 + var p = Selector.pseudos; 2.3780 + return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root); 2.3781 + }, 2.3782 + 2.3783 + getIndices: function(a, b, total) { 2.3784 + if (a == 0) return b > 0 ? [b] : []; 2.3785 + return $R(1, total).inject([], function(memo, i) { 2.3786 + if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i); 2.3787 + return memo; 2.3788 + }); 2.3789 + }, 2.3790 + 2.3791 + nth: function(nodes, formula, root, reverse, ofType) { 2.3792 + if (nodes.length == 0) return []; 2.3793 + if (formula == 'even') formula = '2n+0'; 2.3794 + if (formula == 'odd') formula = '2n+1'; 2.3795 + var h = Selector.handlers, results = [], indexed = [], m; 2.3796 + h.mark(nodes); 2.3797 + for (var i = 0, node; node = nodes[i]; i++) { 2.3798 + if (!node.parentNode._countedByPrototype) { 2.3799 + h.index(node.parentNode, reverse, ofType); 2.3800 + indexed.push(node.parentNode); 2.3801 + } 2.3802 + } 2.3803 + if (formula.match(/^\d+$/)) { // just a number 2.3804 + formula = Number(formula); 2.3805 + for (var i = 0, node; node = nodes[i]; i++) 2.3806 + if (node.nodeIndex == formula) results.push(node); 2.3807 + } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b 2.3808 + if (m[1] == "-") m[1] = -1; 2.3809 + var a = m[1] ? Number(m[1]) : 1; 2.3810 + var b = m[2] ? Number(m[2]) : 0; 2.3811 + var indices = Selector.pseudos.getIndices(a, b, nodes.length); 2.3812 + for (var i = 0, node, l = indices.length; node = nodes[i]; i++) { 2.3813 + for (var j = 0; j < l; j++) 2.3814 + if (node.nodeIndex == indices[j]) results.push(node); 2.3815 + } 2.3816 + } 2.3817 + h.unmark(nodes); 2.3818 + h.unmark(indexed); 2.3819 + return results; 2.3820 + }, 2.3821 + 2.3822 + 'empty': function(nodes, value, root) { 2.3823 + for (var i = 0, results = [], node; node = nodes[i]; i++) { 2.3824 + if (node.tagName == '!' || node.firstChild) continue; 2.3825 + results.push(node); 2.3826 + } 2.3827 + return results; 2.3828 + }, 2.3829 + 2.3830 + 'not': function(nodes, selector, root) { 2.3831 + var h = Selector.handlers, selectorType, m; 2.3832 + var exclusions = new Selector(selector).findElements(root); 2.3833 + h.mark(exclusions); 2.3834 + for (var i = 0, results = [], node; node = nodes[i]; i++) 2.3835 + if (!node._countedByPrototype) results.push(node); 2.3836 + h.unmark(exclusions); 2.3837 + return results; 2.3838 + }, 2.3839 + 2.3840 + 'enabled': function(nodes, value, root) { 2.3841 + for (var i = 0, results = [], node; node = nodes[i]; i++) 2.3842 + if (!node.disabled && (!node.type || node.type !== 'hidden')) 2.3843 + results.push(node); 2.3844 + return results; 2.3845 + }, 2.3846 + 2.3847 + 'disabled': function(nodes, value, root) { 2.3848 + for (var i = 0, results = [], node; node = nodes[i]; i++) 2.3849 + if (node.disabled) results.push(node); 2.3850 + return results; 2.3851 + }, 2.3852 + 2.3853 + 'checked': function(nodes, value, root) { 2.3854 + for (var i = 0, results = [], node; node = nodes[i]; i++) 2.3855 + if (node.checked) results.push(node); 2.3856 + return results; 2.3857 + } 2.3858 + }, 2.3859 + 2.3860 + operators: { 2.3861 + '=': function(nv, v) { return nv == v; }, 2.3862 + '!=': function(nv, v) { return nv != v; }, 2.3863 + '^=': function(nv, v) { return nv == v || nv && nv.startsWith(v); }, 2.3864 + '$=': function(nv, v) { return nv == v || nv && nv.endsWith(v); }, 2.3865 + '*=': function(nv, v) { return nv == v || nv && nv.include(v); }, 2.3866 + '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); }, 2.3867 + '|=': function(nv, v) { return ('-' + (nv || "").toUpperCase() + 2.3868 + '-').include('-' + (v || "").toUpperCase() + '-'); } 2.3869 + }, 2.3870 + 2.3871 + split: function(expression) { 2.3872 + var expressions = []; 2.3873 + expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) { 2.3874 + expressions.push(m[1].strip()); 2.3875 + }); 2.3876 + return expressions; 2.3877 + }, 2.3878 + 2.3879 + matchElements: function(elements, expression) { 2.3880 + var matches = $$(expression), h = Selector.handlers; 2.3881 + h.mark(matches); 2.3882 + for (var i = 0, results = [], element; element = elements[i]; i++) 2.3883 + if (element._countedByPrototype) results.push(element); 2.3884 + h.unmark(matches); 2.3885 + return results; 2.3886 + }, 2.3887 + 2.3888 + findElement: function(elements, expression, index) { 2.3889 + if (Object.isNumber(expression)) { 2.3890 + index = expression; expression = false; 2.3891 + } 2.3892 + return Selector.matchElements(elements, expression || '*')[index || 0]; 2.3893 + }, 2.3894 + 2.3895 + findChildElements: function(element, expressions) { 2.3896 + expressions = Selector.split(expressions.join(',')); 2.3897 + var results = [], h = Selector.handlers; 2.3898 + for (var i = 0, l = expressions.length, selector; i < l; i++) { 2.3899 + selector = new Selector(expressions[i].strip()); 2.3900 + h.concat(results, selector.findElements(element)); 2.3901 + } 2.3902 + return (l > 1) ? h.unique(results) : results; 2.3903 + } 2.3904 +}); 2.3905 + 2.3906 +if (Prototype.Browser.IE) { 2.3907 + Object.extend(Selector.handlers, { 2.3908 + concat: function(a, b) { 2.3909 + for (var i = 0, node; node = b[i]; i++) 2.3910 + if (node.tagName !== "!") a.push(node); 2.3911 + return a; 2.3912 + } 2.3913 + }); 2.3914 +} 2.3915 + 2.3916 +function $$() { 2.3917 + return Selector.findChildElements(document, $A(arguments)); 2.3918 +} 2.3919 + 2.3920 +var Form = { 2.3921 + reset: function(form) { 2.3922 + form = $(form); 2.3923 + form.reset(); 2.3924 + return form; 2.3925 + }, 2.3926 + 2.3927 + serializeElements: function(elements, options) { 2.3928 + if (typeof options != 'object') options = { hash: !!options }; 2.3929 + else if (Object.isUndefined(options.hash)) options.hash = true; 2.3930 + var key, value, submitted = false, submit = options.submit; 2.3931 + 2.3932 + var data = elements.inject({ }, function(result, element) { 2.3933 + if (!element.disabled && element.name) { 2.3934 + key = element.name; value = $(element).getValue(); 2.3935 + if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted && 2.3936 + submit !== false && (!submit || key == submit) && (submitted = true)))) { 2.3937 + if (key in result) { 2.3938 + if (!Object.isArray(result[key])) result[key] = [result[key]]; 2.3939 + result[key].push(value); 2.3940 + } 2.3941 + else result[key] = value; 2.3942 + } 2.3943 + } 2.3944 + return result; 2.3945 + }); 2.3946 + 2.3947 + return options.hash ? data : Object.toQueryString(data); 2.3948 + } 2.3949 +}; 2.3950 + 2.3951 +Form.Methods = { 2.3952 + serialize: function(form, options) { 2.3953 + return Form.serializeElements(Form.getElements(form), options); 2.3954 + }, 2.3955 + 2.3956 + getElements: function(form) { 2.3957 + var elements = $(form).getElementsByTagName('*'), 2.3958 + element, 2.3959 + arr = [ ], 2.3960 + serializers = Form.Element.Serializers; 2.3961 + for (var i = 0; element = elements[i]; i++) { 2.3962 + arr.push(element); 2.3963 + } 2.3964 + return arr.inject([], function(elements, child) { 2.3965 + if (serializers[child.tagName.toLowerCase()]) 2.3966 + elements.push(Element.extend(child)); 2.3967 + return elements; 2.3968 + }) 2.3969 + }, 2.3970 + 2.3971 + getInputs: function(form, typeName, name) { 2.3972 + form = $(form); 2.3973 + var inputs = form.getElementsByTagName('input'); 2.3974 + 2.3975 + if (!typeName && !name) return $A(inputs).map(Element.extend); 2.3976 + 2.3977 + for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) { 2.3978 + var input = inputs[i]; 2.3979 + if ((typeName && input.type != typeName) || (name && input.name != name)) 2.3980 + continue; 2.3981 + matchingInputs.push(Element.extend(input)); 2.3982 + } 2.3983 + 2.3984 + return matchingInputs; 2.3985 + }, 2.3986 + 2.3987 + disable: function(form) { 2.3988 + form = $(form); 2.3989 + Form.getElements(form).invoke('disable'); 2.3990 + return form; 2.3991 + }, 2.3992 + 2.3993 + enable: function(form) { 2.3994 + form = $(form); 2.3995 + Form.getElements(form).invoke('enable'); 2.3996 + return form; 2.3997 + }, 2.3998 + 2.3999 + findFirstElement: function(form) { 2.4000 + var elements = $(form).getElements().findAll(function(element) { 2.4001 + return 'hidden' != element.type && !element.disabled; 2.4002 + }); 2.4003 + var firstByIndex = elements.findAll(function(element) { 2.4004 + return element.hasAttribute('tabIndex') && element.tabIndex >= 0; 2.4005 + }).sortBy(function(element) { return element.tabIndex }).first(); 2.4006 + 2.4007 + return firstByIndex ? firstByIndex : elements.find(function(element) { 2.4008 + return /^(?:input|select|textarea)$/i.test(element.tagName); 2.4009 + }); 2.4010 + }, 2.4011 + 2.4012 + focusFirstElement: function(form) { 2.4013 + form = $(form); 2.4014 + form.findFirstElement().activate(); 2.4015 + return form; 2.4016 + }, 2.4017 + 2.4018 + request: function(form, options) { 2.4019 + form = $(form), options = Object.clone(options || { }); 2.4020 + 2.4021 + var params = options.parameters, action = form.readAttribute('action') || ''; 2.4022 + if (action.blank()) action = window.location.href; 2.4023 + options.parameters = form.serialize(true); 2.4024 + 2.4025 + if (params) { 2.4026 + if (Object.isString(params)) params = params.toQueryParams(); 2.4027 + Object.extend(options.parameters, params); 2.4028 + } 2.4029 + 2.4030 + if (form.hasAttribute('method') && !options.method) 2.4031 + options.method = form.method; 2.4032 + 2.4033 + return new Ajax.Request(action, options); 2.4034 + } 2.4035 +}; 2.4036 + 2.4037 +/*--------------------------------------------------------------------------*/ 2.4038 + 2.4039 + 2.4040 +Form.Element = { 2.4041 + focus: function(element) { 2.4042 + $(element).focus(); 2.4043 + return element; 2.4044 + }, 2.4045 + 2.4046 + select: function(element) { 2.4047 + $(element).select(); 2.4048 + return element; 2.4049 + } 2.4050 +}; 2.4051 + 2.4052 +Form.Element.Methods = { 2.4053 + 2.4054 + serialize: function(element) { 2.4055 + element = $(element); 2.4056 + if (!element.disabled && element.name) { 2.4057 + var value = element.getValue(); 2.4058 + if (value != undefined) { 2.4059 + var pair = { }; 2.4060 + pair[element.name] = value; 2.4061 + return Object.toQueryString(pair); 2.4062 + } 2.4063 + } 2.4064 + return ''; 2.4065 + }, 2.4066 + 2.4067 + getValue: function(element) { 2.4068 + element = $(element); 2.4069 + var method = element.tagName.toLowerCase(); 2.4070 + return Form.Element.Serializers[method](element); 2.4071 + }, 2.4072 + 2.4073 + setValue: function(element, value) { 2.4074 + element = $(element); 2.4075 + var method = element.tagName.toLowerCase(); 2.4076 + Form.Element.Serializers[method](element, value); 2.4077 + return element; 2.4078 + }, 2.4079 + 2.4080 + clear: function(element) { 2.4081 + $(element).value = ''; 2.4082 + return element; 2.4083 + }, 2.4084 + 2.4085 + present: function(element) { 2.4086 + return $(element).value != ''; 2.4087 + }, 2.4088 + 2.4089 + activate: function(element) { 2.4090 + element = $(element); 2.4091 + try { 2.4092 + element.focus(); 2.4093 + if (element.select && (element.tagName.toLowerCase() != 'input' || 2.4094 + !(/^(?:button|reset|submit)$/i.test(element.type)))) 2.4095 + element.select(); 2.4096 + } catch (e) { } 2.4097 + return element; 2.4098 + }, 2.4099 + 2.4100 + disable: function(element) { 2.4101 + element = $(element); 2.4102 + element.disabled = true; 2.4103 + return element; 2.4104 + }, 2.4105 + 2.4106 + enable: function(element) { 2.4107 + element = $(element); 2.4108 + element.disabled = false; 2.4109 + return element; 2.4110 + } 2.4111 +}; 2.4112 + 2.4113 +/*--------------------------------------------------------------------------*/ 2.4114 + 2.4115 +var Field = Form.Element; 2.4116 + 2.4117 +var $F = Form.Element.Methods.getValue; 2.4118 + 2.4119 +/*--------------------------------------------------------------------------*/ 2.4120 + 2.4121 +Form.Element.Serializers = { 2.4122 + input: function(element, value) { 2.4123 + switch (element.type.toLowerCase()) { 2.4124 + case 'checkbox': 2.4125 + case 'radio': 2.4126 + return Form.Element.Serializers.inputSelector(element, value); 2.4127 + default: 2.4128 + return Form.Element.Serializers.textarea(element, value); 2.4129 + } 2.4130 + }, 2.4131 + 2.4132 + inputSelector: function(element, value) { 2.4133 + if (Object.isUndefined(value)) return element.checked ? element.value : null; 2.4134 + else element.checked = !!value; 2.4135 + }, 2.4136 + 2.4137 + textarea: function(element, value) { 2.4138 + if (Object.isUndefined(value)) return element.value; 2.4139 + else element.value = value; 2.4140 + }, 2.4141 + 2.4142 + select: function(element, value) { 2.4143 + if (Object.isUndefined(value)) 2.4144 + return this[element.type == 'select-one' ? 2.4145 + 'selectOne' : 'selectMany'](element); 2.4146 + else { 2.4147 + var opt, currentValue, single = !Object.isArray(value); 2.4148 + for (var i = 0, length = element.length; i < length; i++) { 2.4149 + opt = element.options[i]; 2.4150 + currentValue = this.optionValue(opt); 2.4151 + if (single) { 2.4152 + if (currentValue == value) { 2.4153 + opt.selected = true; 2.4154 + return; 2.4155 + } 2.4156 + } 2.4157 + else opt.selected = value.include(currentValue); 2.4158 + } 2.4159 + } 2.4160 + }, 2.4161 + 2.4162 + selectOne: function(element) { 2.4163 + var index = element.selectedIndex; 2.4164 + return index >= 0 ? this.optionValue(element.options[index]) : null; 2.4165 + }, 2.4166 + 2.4167 + selectMany: function(element) { 2.4168 + var values, length = element.length; 2.4169 + if (!length) return null; 2.4170 + 2.4171 + for (var i = 0, values = []; i < length; i++) { 2.4172 + var opt = element.options[i]; 2.4173 + if (opt.selected) values.push(this.optionValue(opt)); 2.4174 + } 2.4175 + return values; 2.4176 + }, 2.4177 + 2.4178 + optionValue: function(opt) { 2.4179 + return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text; 2.4180 + } 2.4181 +}; 2.4182 + 2.4183 +/*--------------------------------------------------------------------------*/ 2.4184 + 2.4185 + 2.4186 +Abstract.TimedObserver = Class.create(PeriodicalExecuter, { 2.4187 + initialize: function($super, element, frequency, callback) { 2.4188 + $super(callback, frequency); 2.4189 + this.element = $(element); 2.4190 + this.lastValue = this.getValue(); 2.4191 + }, 2.4192 + 2.4193 + execute: function() { 2.4194 + var value = this.getValue(); 2.4195 + if (Object.isString(this.lastValue) && Object.isString(value) ? 2.4196 + this.lastValue != value : String(this.lastValue) != String(value)) { 2.4197 + this.callback(this.element, value); 2.4198 + this.lastValue = value; 2.4199 + } 2.4200 + } 2.4201 +}); 2.4202 + 2.4203 +Form.Element.Observer = Class.create(Abstract.TimedObserver, { 2.4204 + getValue: function() { 2.4205 + return Form.Element.getValue(this.element); 2.4206 + } 2.4207 +}); 2.4208 + 2.4209 +Form.Observer = Class.create(Abstract.TimedObserver, { 2.4210 + getValue: function() { 2.4211 + return Form.serialize(this.element); 2.4212 + } 2.4213 +}); 2.4214 + 2.4215 +/*--------------------------------------------------------------------------*/ 2.4216 + 2.4217 +Abstract.EventObserver = Class.create({ 2.4218 + initialize: function(element, callback) { 2.4219 + this.element = $(element); 2.4220 + this.callback = callback; 2.4221 + 2.4222 + this.lastValue = this.getValue(); 2.4223 + if (this.element.tagName.toLowerCase() == 'form') 2.4224 + this.registerFormCallbacks(); 2.4225 + else 2.4226 + this.registerCallback(this.element); 2.4227 + }, 2.4228 + 2.4229 + onElementEvent: function() { 2.4230 + var value = this.getValue(); 2.4231 + if (this.lastValue != value) { 2.4232 + this.callback(this.element, value); 2.4233 + this.lastValue = value; 2.4234 + } 2.4235 + }, 2.4236 + 2.4237 + registerFormCallbacks: function() { 2.4238 + Form.getElements(this.element).each(this.registerCallback, this); 2.4239 + }, 2.4240 + 2.4241 + registerCallback: function(element) { 2.4242 + if (element.type) { 2.4243 + switch (element.type.toLowerCase()) { 2.4244 + case 'checkbox': 2.4245 + case 'radio': 2.4246 + Event.observe(element, 'click', this.onElementEvent.bind(this)); 2.4247 + break; 2.4248 + default: 2.4249 + Event.observe(element, 'change', this.onElementEvent.bind(this)); 2.4250 + break; 2.4251 + } 2.4252 + } 2.4253 + } 2.4254 +}); 2.4255 + 2.4256 +Form.Element.EventObserver = Class.create(Abstract.EventObserver, { 2.4257 + getValue: function() { 2.4258 + return Form.Element.getValue(this.element); 2.4259 + } 2.4260 +}); 2.4261 + 2.4262 +Form.EventObserver = Class.create(Abstract.EventObserver, { 2.4263 + getValue: function() { 2.4264 + return Form.serialize(this.element); 2.4265 + } 2.4266 +}); 2.4267 +(function() { 2.4268 + 2.4269 + var Event = { 2.4270 + KEY_BACKSPACE: 8, 2.4271 + KEY_TAB: 9, 2.4272 + KEY_RETURN: 13, 2.4273 + KEY_ESC: 27, 2.4274 + KEY_LEFT: 37, 2.4275 + KEY_UP: 38, 2.4276 + KEY_RIGHT: 39, 2.4277 + KEY_DOWN: 40, 2.4278 + KEY_DELETE: 46, 2.4279 + KEY_HOME: 36, 2.4280 + KEY_END: 35, 2.4281 + KEY_PAGEUP: 33, 2.4282 + KEY_PAGEDOWN: 34, 2.4283 + KEY_INSERT: 45, 2.4284 + 2.4285 + cache: {} 2.4286 + }; 2.4287 + 2.4288 + var docEl = document.documentElement; 2.4289 + var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl 2.4290 + && 'onmouseleave' in docEl; 2.4291 + 2.4292 + var _isButton; 2.4293 + if (Prototype.Browser.IE) { 2.4294 + var buttonMap = { 0: 1, 1: 4, 2: 2 }; 2.4295 + _isButton = function(event, code) { 2.4296 + return event.button === buttonMap[code]; 2.4297 + }; 2.4298 + } else if (Prototype.Browser.WebKit) { 2.4299 + _isButton = function(event, code) { 2.4300 + switch (code) { 2.4301 + case 0: return event.which == 1 && !event.metaKey; 2.4302 + case 1: return event.which == 1 && event.metaKey; 2.4303 + default: return false; 2.4304 + } 2.4305 + }; 2.4306 + } else { 2.4307 + _isButton = function(event, code) { 2.4308 + return event.which ? (event.which === code + 1) : (event.button === code); 2.4309 + }; 2.4310 + } 2.4311 + 2.4312 + function isLeftClick(event) { return _isButton(event, 0) } 2.4313 + 2.4314 + function isMiddleClick(event) { return _isButton(event, 1) } 2.4315 + 2.4316 + function isRightClick(event) { return _isButton(event, 2) } 2.4317 + 2.4318 + function element(event) { 2.4319 + event = Event.extend(event); 2.4320 + 2.4321 + var node = event.target, type = event.type, 2.4322 + currentTarget = event.currentTarget; 2.4323 + 2.4324 + if (currentTarget && currentTarget.tagName) { 2.4325 + if (type === 'load' || type === 'error' || 2.4326 + (type === 'click' && currentTarget.tagName.toLowerCase() === 'input' 2.4327 + && currentTarget.type === 'radio')) 2.4328 + node = currentTarget; 2.4329 + } 2.4330 + 2.4331 + if (node.nodeType == Node.TEXT_NODE) 2.4332 + node = node.parentNode; 2.4333 + 2.4334 + return Element.extend(node); 2.4335 + } 2.4336 + 2.4337 + function findElement(event, expression) { 2.4338 + var element = Event.element(event); 2.4339 + if (!expression) return element; 2.4340 + var elements = [element].concat(element.ancestors()); 2.4341 + return Selector.findElement(elements, expression, 0); 2.4342 + } 2.4343 + 2.4344 + function pointer(event) { 2.4345 + return { x: pointerX(event), y: pointerY(event) }; 2.4346 + } 2.4347 + 2.4348 + function pointerX(event) { 2.4349 + var docElement = document.documentElement, 2.4350 + body = document.body || { scrollLeft: 0 }; 2.4351 + 2.4352 + return event.pageX || (event.clientX + 2.4353 + (docElement.scrollLeft || body.scrollLeft) - 2.4354 + (docElement.clientLeft || 0)); 2.4355 + } 2.4356 + 2.4357 + function pointerY(event) { 2.4358 + var docElement = document.documentElement, 2.4359 + body = document.body || { scrollTop: 0 }; 2.4360 + 2.4361 + return event.pageY || (event.clientY + 2.4362 + (docElement.scrollTop || body.scrollTop) - 2.4363 + (docElement.clientTop || 0)); 2.4364 + } 2.4365 + 2.4366 + 2.4367 + function stop(event) { 2.4368 + Event.extend(event); 2.4369 + event.preventDefault(); 2.4370 + event.stopPropagation(); 2.4371 + 2.4372 + event.stopped = true; 2.4373 + } 2.4374 + 2.4375 + Event.Methods = { 2.4376 + isLeftClick: isLeftClick, 2.4377 + isMiddleClick: isMiddleClick, 2.4378 + isRightClick: isRightClick, 2.4379 + 2.4380 + element: element, 2.4381 + findElement: findElement, 2.4382 + 2.4383 + pointer: pointer, 2.4384 + pointerX: pointerX, 2.4385 + pointerY: pointerY, 2.4386 + 2.4387 + stop: stop 2.4388 + }; 2.4389 + 2.4390 + 2.4391 + var methods = Object.keys(Event.Methods).inject({ }, function(m, name) { 2.4392 + m[name] = Event.Methods[name].methodize(); 2.4393 + return m; 2.4394 + }); 2.4395 + 2.4396 + if (Prototype.Browser.IE) { 2.4397 + function _relatedTarget(event) { 2.4398 + var element; 2.4399 + switch (event.type) { 2.4400 + case 'mouseover': element = event.fromElement; break; 2.4401 + case 'mouseout': element = event.toElement; break; 2.4402 + default: return null; 2.4403 + } 2.4404 + return Element.extend(element); 2.4405 + } 2.4406 + 2.4407 + Object.extend(methods, { 2.4408 + stopPropagation: function() { this.cancelBubble = true }, 2.4409 + preventDefault: function() { this.returnValue = false }, 2.4410 + inspect: function() { return '[object Event]' } 2.4411 + }); 2.4412 + 2.4413 + Event.extend = function(event, element) { 2.4414 + if (!event) return false; 2.4415 + if (event._extendedByPrototype) return event; 2.4416 + 2.4417 + event._extendedByPrototype = Prototype.emptyFunction; 2.4418 + var pointer = Event.pointer(event); 2.4419 + 2.4420 + Object.extend(event, { 2.4421 + target: event.srcElement || element, 2.4422 + relatedTarget: _relatedTarget(event), 2.4423 + pageX: pointer.x, 2.4424 + pageY: pointer.y 2.4425 + }); 2.4426 + 2.4427 + return Object.extend(event, methods); 2.4428 + }; 2.4429 + } else { 2.4430 + Event.prototype = window.Event.prototype || document.createEvent('HTMLEvents').__proto__; 2.4431 + Object.extend(Event.prototype, methods); 2.4432 + Event.extend = Prototype.K; 2.4433 + } 2.4434 + 2.4435 + function _createResponder(element, eventName, handler) { 2.4436 + var registry = Element.retrieve(element, 'prototype_event_registry'); 2.4437 + 2.4438 + if (Object.isUndefined(registry)) { 2.4439 + CACHE.push(element); 2.4440 + registry = Element.retrieve(element, 'prototype_event_registry', $H()); 2.4441 + } 2.4442 + 2.4443 + var respondersForEvent = registry.get(eventName); 2.4444 + if (Object.isUndefined(respondersForEvent)) { 2.4445 + respondersForEvent = []; 2.4446 + registry.set(eventName, respondersForEvent); 2.4447 + } 2.4448 + 2.4449 + if (respondersForEvent.pluck('handler').include(handler)) return false; 2.4450 + 2.4451 + var responder; 2.4452 + if (eventName.include(":")) { 2.4453 + responder = function(event) { 2.4454 + if (Object.isUndefined(event.eventName)) 2.4455 + return false; 2.4456 + 2.4457 + if (event.eventName !== eventName) 2.4458 + return false; 2.4459 + 2.4460 + Event.extend(event, element); 2.4461 + handler.call(element, event); 2.4462 + }; 2.4463 + } else { 2.4464 + if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED && 2.4465 + (eventName === "mouseenter" || eventName === "mouseleave")) { 2.4466 + if (eventName === "mouseenter" || eventName === "mouseleave") { 2.4467 + responder = function(event) { 2.4468 + Event.extend(event, element); 2.4469 + 2.4470 + var parent = event.relatedTarget; 2.4471 + while (parent && parent !== element) { 2.4472 + try { parent = parent.parentNode; } 2.4473 + catch(e) { parent = element; } 2.4474 + } 2.4475 + 2.4476 + if (parent === element) return; 2.4477 + 2.4478 + handler.call(element, event); 2.4479 + }; 2.4480 + } 2.4481 + } else { 2.4482 + responder = function(event) { 2.4483 + Event.extend(event, element); 2.4484 + handler.call(element, event); 2.4485 + }; 2.4486 + } 2.4487 + } 2.4488 + 2.4489 + responder.handler = handler; 2.4490 + respondersForEvent.push(responder); 2.4491 + return responder; 2.4492 + } 2.4493 + 2.4494 + function _destroyCache() { 2.4495 + for (var i = 0, length = CACHE.length; i < length; i++) { 2.4496 + Event.stopObserving(CACHE[i]); 2.4497 + CACHE[i] = null; 2.4498 + } 2.4499 + } 2.4500 + 2.4501 + var CACHE = []; 2.4502 + 2.4503 + if (Prototype.Browser.IE) 2.4504 + window.attachEvent('onunload', _destroyCache); 2.4505 + 2.4506 + if (Prototype.Browser.WebKit) 2.4507 + window.addEventListener('unload', Prototype.emptyFunction, false); 2.4508 + 2.4509 + 2.4510 + var _getDOMEventName = Prototype.K; 2.4511 + 2.4512 + if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED) { 2.4513 + _getDOMEventName = function(eventName) { 2.4514 + var translations = { mouseenter: "mouseover", mouseleave: "mouseout" }; 2.4515 + return eventName in translations ? translations[eventName] : eventName; 2.4516 + }; 2.4517 + } 2.4518 + 2.4519 + function observe(element, eventName, handler) { 2.4520 + element = $(element); 2.4521 + 2.4522 + var responder = _createResponder(element, eventName, handler); 2.4523 + 2.4524 + if (!responder) return element; 2.4525 + 2.4526 + if (eventName.include(':')) { 2.4527 + if (element.addEventListener) 2.4528 + element.addEventListener("dataavailable", responder, false); 2.4529 + else { 2.4530 + element.attachEvent("ondataavailable", responder); 2.4531 + element.attachEvent("onfilterchange", responder); 2.4532 + } 2.4533 + } else { 2.4534 + var actualEventName = _getDOMEventName(eventName); 2.4535 + 2.4536 + if (element.addEventListener) 2.4537 + element.addEventListener(actualEventName, responder, false); 2.4538 + else 2.4539 + element.attachEvent("on" + actualEventName, responder); 2.4540 + } 2.4541 + 2.4542 + return element; 2.4543 + } 2.4544 + 2.4545 + function stopObserving(element, eventName, handler) { 2.4546 + element = $(element); 2.4547 + 2.4548 + var registry = Element.retrieve(element, 'prototype_event_registry'); 2.4549 + 2.4550 + if (Object.isUndefined(registry)) return element; 2.4551 + 2.4552 + if (eventName && !handler) { 2.4553 + var responders = registry.get(eventName); 2.4554 + 2.4555 + if (Object.isUndefined(responders)) return element; 2.4556 + 2.4557 + responders.each( function(r) { 2.4558 + Element.stopObserving(element, eventName, r.handler); 2.4559 + }); 2.4560 + return element; 2.4561 + } else if (!eventName) { 2.4562 + registry.each( function(pair) { 2.4563 + var eventName = pair.key, responders = pair.value; 2.4564 + 2.4565 + responders.each( function(r) { 2.4566 + Element.stopObserving(element, eventName, r.handler); 2.4567 + }); 2.4568 + }); 2.4569 + return element; 2.4570 + } 2.4571 + 2.4572 + var responders = registry.get(eventName); 2.4573 + 2.4574 + if (!responders) return; 2.4575 + 2.4576 + var responder = responders.find( function(r) { return r.handler === handler; }); 2.4577 + if (!responder) return element; 2.4578 + 2.4579 + var actualEventName = _getDOMEventName(eventName); 2.4580 + 2.4581 + if (eventName.include(':')) { 2.4582 + if (element.removeEventListener) 2.4583 + element.removeEventListener("dataavailable", responder, false); 2.4584 + else { 2.4585 + element.detachEvent("ondataavailable", responder); 2.4586 + element.detachEvent("onfilterchange", responder); 2.4587 + } 2.4588 + } else { 2.4589 + if (element.removeEventListener) 2.4590 + element.removeEventListener(actualEventName, responder, false); 2.4591 + else 2.4592 + element.detachEvent('on' + actualEventName, responder); 2.4593 + } 2.4594 + 2.4595 + registry.set(eventName, responders.without(responder)); 2.4596 + 2.4597 + return element; 2.4598 + } 2.4599 + 2.4600 + function fire(element, eventName, memo, bubble) { 2.4601 + element = $(element); 2.4602 + 2.4603 + if (Object.isUndefined(bubble)) 2.4604 + bubble = true; 2.4605 + 2.4606 + if (element == document && document.createEvent && !element.dispatchEvent) 2.4607 + element = document.documentElement; 2.4608 + 2.4609 + var event; 2.4610 + if (document.createEvent) { 2.4611 + event = document.createEvent('HTMLEvents'); 2.4612 + event.initEvent('dataavailable', true, true); 2.4613 + } else { 2.4614 + event = document.createEventObject(); 2.4615 + event.eventType = bubble ? 'ondataavailable' : 'onfilterchange'; 2.4616 + } 2.4617 + 2.4618 + event.eventName = eventName; 2.4619 + event.memo = memo || { }; 2.4620 + 2.4621 + if (document.createEvent) 2.4622 + element.dispatchEvent(event); 2.4623 + else 2.4624 + element.fireEvent(event.eventType, event); 2.4625 + 2.4626 + return Event.extend(event); 2.4627 + } 2.4628 + 2.4629 + 2.4630 + Object.extend(Event, Event.Methods); 2.4631 + 2.4632 + Object.extend(Event, { 2.4633 + fire: fire, 2.4634 + observe: observe, 2.4635 + stopObserving: stopObserving 2.4636 + }); 2.4637 + 2.4638 + Element.addMethods({ 2.4639 + fire: fire, 2.4640 + 2.4641 + observe: observe, 2.4642 + 2.4643 + stopObserving: stopObserving 2.4644 + }); 2.4645 + 2.4646 + Object.extend(document, { 2.4647 + fire: fire.methodize(), 2.4648 + 2.4649 + observe: observe.methodize(), 2.4650 + 2.4651 + stopObserving: stopObserving.methodize(), 2.4652 + 2.4653 + loaded: false 2.4654 + }); 2.4655 + 2.4656 + if (window.Event) Object.extend(window.Event, Event); 2.4657 + else window.Event = Event; 2.4658 +})(); 2.4659 + 2.4660 +(function() { 2.4661 + /* Support for the DOMContentLoaded event is based on work by Dan Webb, 2.4662 + Matthias Miller, Dean Edwards, John Resig, and Diego Perini. */ 2.4663 + 2.4664 + var timer; 2.4665 + 2.4666 + function fireContentLoadedEvent() { 2.4667 + if (document.loaded) return; 2.4668 + if (timer) window.clearTimeout(timer); 2.4669 + document.loaded = true; 2.4670 + document.fire('dom:loaded'); 2.4671 + } 2.4672 + 2.4673 + function checkReadyState() { 2.4674 + if (document.readyState === 'complete') { 2.4675 + document.stopObserving('readystatechange', checkReadyState); 2.4676 + fireContentLoadedEvent(); 2.4677 + } 2.4678 + } 2.4679 + 2.4680 + function pollDoScroll() { 2.4681 + try { document.documentElement.doScroll('left'); } 2.4682 + catch(e) { 2.4683 + timer = pollDoScroll.defer(); 2.4684 + return; 2.4685 + } 2.4686 + fireContentLoadedEvent(); 2.4687 + } 2.4688 + 2.4689 + if (document.addEventListener) { 2.4690 + document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false); 2.4691 + } else { 2.4692 + document.observe('readystatechange', checkReadyState); 2.4693 + if (window == top) 2.4694 + timer = pollDoScroll.defer(); 2.4695 + } 2.4696 + 2.4697 + Event.observe(window, 'load', fireContentLoadedEvent); 2.4698 +})(); 2.4699 + 2.4700 +Element.addMethods(); 2.4701 + 2.4702 +/*------------------------------- DEPRECATED -------------------------------*/ 2.4703 + 2.4704 +Hash.toQueryString = Object.toQueryString; 2.4705 + 2.4706 +var Toggle = { display: Element.toggle }; 2.4707 + 2.4708 +Element.Methods.childOf = Element.Methods.descendantOf; 2.4709 + 2.4710 +var Insertion = { 2.4711 + Before: function(element, content) { 2.4712 + return Element.insert(element, {before:content}); 2.4713 + }, 2.4714 + 2.4715 + Top: function(element, content) { 2.4716 + return Element.insert(element, {top:content}); 2.4717 + }, 2.4718 + 2.4719 + Bottom: function(element, content) { 2.4720 + return Element.insert(element, {bottom:content}); 2.4721 + }, 2.4722 + 2.4723 + After: function(element, content) { 2.4724 + return Element.insert(element, {after:content}); 2.4725 + } 2.4726 +}; 2.4727 + 2.4728 +var $continue = new Error('"throw $continue" is deprecated, use "return" instead'); 2.4729 + 2.4730 +var Position = { 2.4731 + includeScrollOffsets: false, 2.4732 + 2.4733 + prepare: function() { 2.4734 + this.deltaX = window.pageXOffset 2.4735 + || document.documentElement.scrollLeft 2.4736 + || document.body.scrollLeft 2.4737 + || 0; 2.4738 + this.deltaY = window.pageYOffset 2.4739 + || document.documentElement.scrollTop 2.4740 + || document.body.scrollTop 2.4741 + || 0; 2.4742 + }, 2.4743 + 2.4744 + within: function(element, x, y) { 2.4745 + if (this.includeScrollOffsets) 2.4746 + return this.withinIncludingScrolloffsets(element, x, y); 2.4747 + this.xcomp = x; 2.4748 + this.ycomp = y; 2.4749 + this.offset = Element.cumulativeOffset(element); 2.4750 + 2.4751 + return (y >= this.offset[1] && 2.4752 + y < this.offset[1] + element.offsetHeight && 2.4753 + x >= this.offset[0] && 2.4754 + x < this.offset[0] + element.offsetWidth); 2.4755 + }, 2.4756 + 2.4757 + withinIncludingScrolloffsets: function(element, x, y) { 2.4758 + var offsetcache = Element.cumulativeScrollOffset(element); 2.4759 + 2.4760 + this.xcomp = x + offsetcache[0] - this.deltaX; 2.4761 + this.ycomp = y + offsetcache[1] - this.deltaY; 2.4762 + this.offset = Element.cumulativeOffset(element); 2.4763 + 2.4764 + return (this.ycomp >= this.offset[1] && 2.4765 + this.ycomp < this.offset[1] + element.offsetHeight && 2.4766 + this.xcomp >= this.offset[0] && 2.4767 + this.xcomp < this.offset[0] + element.offsetWidth); 2.4768 + }, 2.4769 + 2.4770 + overlap: function(mode, element) { 2.4771 + if (!mode) return 0; 2.4772 + if (mode == 'vertical') 2.4773 + return ((this.offset[1] + element.offsetHeight) - this.ycomp) / 2.4774 + element.offsetHeight; 2.4775 + if (mode == 'horizontal') 2.4776 + return ((this.offset[0] + element.offsetWidth) - this.xcomp) / 2.4777 + element.offsetWidth; 2.4778 + }, 2.4779 + 2.4780 + 2.4781 + cumulativeOffset: Element.Methods.cumulativeOffset, 2.4782 + 2.4783 + positionedOffset: Element.Methods.positionedOffset, 2.4784 + 2.4785 + absolutize: function(element) { 2.4786 + Position.prepare(); 2.4787 + return Element.absolutize(element); 2.4788 + }, 2.4789 + 2.4790 + relativize: function(element) { 2.4791 + Position.prepare(); 2.4792 + return Element.relativize(element); 2.4793 + }, 2.4794 + 2.4795 + realOffset: Element.Methods.cumulativeScrollOffset, 2.4796 + 2.4797 + offsetParent: Element.Methods.getOffsetParent, 2.4798 + 2.4799 + page: Element.Methods.viewportOffset, 2.4800 + 2.4801 + clone: function(source, target, options) { 2.4802 + options = options || { }; 2.4803 + return Element.clonePosition(target, source, options); 2.4804 + } 2.4805 +}; 2.4806 + 2.4807 +/*--------------------------------------------------------------------------*/ 2.4808 + 2.4809 +if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){ 2.4810 + function iter(name) { 2.4811 + return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]"; 2.4812 + } 2.4813 + 2.4814 + instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ? 2.4815 + function(element, className) { 2.4816 + className = className.toString().strip(); 2.4817 + var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className); 2.4818 + return cond ? document._getElementsByXPath('.//*' + cond, element) : []; 2.4819 + } : function(element, className) { 2.4820 + className = className.toString().strip(); 2.4821 + var elements = [], classNames = (/\s/.test(className) ? $w(className) : null); 2.4822 + if (!classNames && !className) return elements; 2.4823 + 2.4824 + var nodes = $(element).getElementsByTagName('*'); 2.4825 + className = ' ' + className + ' '; 2.4826 + 2.4827 + for (var i = 0, child, cn; child = nodes[i]; i++) { 2.4828 + if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) || 2.4829 + (classNames && classNames.all(function(name) { 2.4830 + return !name.toString().blank() && cn.include(' ' + name + ' '); 2.4831 + })))) 2.4832 + elements.push(Element.extend(child)); 2.4833 + } 2.4834 + return elements; 2.4835 + }; 2.4836 + 2.4837 + return function(className, parentElement) { 2.4838 + return $(parentElement || document.body).getElementsByClassName(className); 2.4839 + }; 2.4840 +}(Element.Methods); 2.4841 + 2.4842 +/*--------------------------------------------------------------------------*/ 2.4843 + 2.4844 +Element.ClassNames = Class.create(); 2.4845 +Element.ClassNames.prototype = { 2.4846 + initialize: function(element) { 2.4847 + this.element = $(element); 2.4848 + }, 2.4849 + 2.4850 + _each: function(iterator) { 2.4851 + this.element.className.split(/\s+/).select(function(name) { 2.4852 + return name.length > 0; 2.4853 + })._each(iterator); 2.4854 + }, 2.4855 + 2.4856 + set: function(className) { 2.4857 + this.element.className = className; 2.4858 + }, 2.4859 + 2.4860 + add: function(classNameToAdd) { 2.4861 + if (this.include(classNameToAdd)) return; 2.4862 + this.set($A(this).concat(classNameToAdd).join(' ')); 2.4863 + }, 2.4864 + 2.4865 + remove: function(classNameToRemove) { 2.4866 + if (!this.include(classNameToRemove)) return; 2.4867 + this.set($A(this).without(classNameToRemove).join(' ')); 2.4868 + }, 2.4869 + 2.4870 + toString: function() { 2.4871 + return $A(this).join(' '); 2.4872 + } 2.4873 +}; 2.4874 + 2.4875 +Object.extend(Element.ClassNames.prototype, Enumerable); 2.4876 + 2.4877 +/*--------------------------------------------------------------------------*/
3.1 --- a/buy.html Mon Jan 18 15:52:33 2010 -0500 3.2 +++ b/buy.html Sun Jan 24 09:37:47 2010 -0500 3.3 @@ -57,14 +57,15 @@ 3.4 3.5 var raphe = Raphael("disp_contain", 515, 318); 3.6 3.7 -//var c = raphe.rect(0, 0, 514, 317); 3.8 -//c.attr("stroke", "#00f"); 3.9 -//tt = raphe.print(10, 150, "Kevin Rustagi", raphe.getFont("HelveticaNeue", 800), 75); 3.10 +var c = raphe.rect(0, 0, 514, 317); 3.11 +c.attr("stroke", "#00f"); 3.12 +tt = raphe.print(10, 150, "Kevin Rustagi", raphe.getFont("HelveticaNeue", 800), 75); 3.13 3.14 3.15 tt.attr("stroke", "#f00"); 3.16 tt.attr("fill", "RED"); 3.17 3.18 + 3.19 </script> 3.20 3.21
4.1 --- a/buy.pl Mon Jan 18 15:52:33 2010 -0500 4.2 +++ b/buy.pl Sun Jan 24 09:37:47 2010 -0500 4.3 @@ -89,19 +89,21 @@ 4.4 $materialcolor = $1; 4.5 4.6 4.7 -$r = "<div id = \"i_templates\"><div class = 'ttyl'> <titletron>Select Style.</titletron></div> 4.8 +$r = <<HERE; 4.9 +<div id = "i_templates"><div class = 'ttyl'> <titletron>Select Style.</titletron></div> 4.10 <div id = 'stupid'> 4.11 -<input TYPE=\"image\" src = \"./images/templates/big_$materialcolor.jpg\" onmouseover=\"pokedex([\'args__big\'],[\'pokedex\']);\" onclick=\"display([\'template2\'], [\'display\']); inputbox([\'template2\'], [\'inputbox\']);material([\'template2\'], [\'materials\']);\" ID=\"template2\" NAME=\"template2\" VALUE=\"big_$materialcolor\" > <br> 4.12 +<input TYPE="image" src = "./images/templates/big_$materialcolor.jpg" onmouseover="pokedex(['args__big'],['pokedex']);" onclick="display(['template2'], ['display']); inputbox(['template2'], ['inputbox']);material(['template2'], ['materials']);" ID="template2" NAME="template2" VALUE="big_$materialcolor" > <br> 4.13 4.14 -<input TYPE=\"image\" src = \"./images/templates/basic_$materialcolor.jpg\" onmouseover=\"pokedex([\'args__basic\'],['pokedex\']);\" onclick=\"display([\'template3\'], [\'display\']); inputbox([\'template3\'], [\'inputbox\']);material([\'template3\'], [\'materials\']);\" ID=\"template3\" NAME=\"template3\" VALUE=\"basic_$materialcolor\" ><br> 4.15 +<input TYPE="image" src = "./images/templates/basic_$materialcolor.jpg" onmouseover="pokedex(['args__basic'],['pokedex']);" onclick="display(['template3'], ['display']); inputbox(['template3'], ['inputbox']);material(['template3'], ['materials']);" ID="template3" NAME="template3" VALUE="basic_$materialcolor" ><br> 4.16 4.17 -<input TYPE=\"image\" src = \"./images/templates/classic_$materialcolor.jpg\" onmouseover=\"pokedex([\'args__classic\'],[\'pokedex\']);\" onclick=\"display([\'template1\'], [\'display\']); inputbox([\'template1\'], [\'inputbox\']);material([\'template1\'], [\'materials\']);\" ID=\"template1\" NAME=\"template1\" VALUE=\"classic_$materialcolor\" ><br> 4.18 +<input TYPE="image" src = "./images/templates/classic_$materialcolor.jpg" onmouseover="pokedex(['args__classic'],['pokedex']);" onclick="display(['template1'], ['display']); inputbox(['template1'], ['inputbox']);material(['template1'], ['materials']);" ID="template1" NAME="template1" VALUE="classic_$materialcolor" ><br> 4.19 4.20 -<input TYPE=\"image\" src = \"./images/templates/lines_$materialcolor.jpg\" onmouseover=\"pokedex([\'args__lines\'],[\'pokedex\']);\" onclick=\"display([\'template4\'], [\'display\']); inputbox([\'template4\'], [\'inputbox\']);material([\'template4\'], [\'materials\']);\" ID=\"template4\" NAME=\"template4\" VALUE=\"lines_$materialcolor\" > 4.21 +<input TYPE="image" src = "./images/templates/lines_$materialcolor.jpg" onmouseover="pokedex(['args__lines'],['pokedex']);" onclick="display(['template4'], ['display']); inputbox(['template4'], ['inputbox']);material(['template4'], ['materials']);" ID="template4" NAME="template4" VALUE="lines_$materialcolor" > 4.22 </div> 4.23 </div> 4.24 4.25 -"; 4.26 +HERE 4.27 + 4.28 4.29 return $r; 4.30 }
5.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 5.2 +++ b/data.xml Sun Jan 24 09:37:47 2010 -0500 5.3 @@ -0,0 +1,17 @@ 5.4 +<svg height="318" width="515" version="1.1" xmlns="http://www.w3.org/2000/svg"> 5.5 +<desc>Created with Raphaƫl</desc> 5.6 +<defs></defs> 5.7 +<rect stroke="#0000ff" fill="none" ry="0" rx="0" r="0" height="317" width="514" y="0.5" x="0.5"></rect> 5.8 +<path transform="" d="M30.9375,118.95833333333334L42.8125,118.95833333333334L38.2295,141.45833333333334L62.6045,118.95833333333334L78.2295,118.95833333333334L52.3955,141.04133333333334L68.8545,172.50033333333334L55.5205,172.50033333333334L43.4375,148.33333333333334L35.1045,155.62533333333334L31.5625,172.50033333333334L19.8955,172.50033333333334Z" stroke="#ff0000" fill="#ff0000"></path> 5.9 +<path transform="" d="M104.06249999999994,148.95833333333334C105.31249999999994,138.54133333333334,90.72949999999994,138.75033333333334,87.60449999999994,145.83333333333334C86.97949999999994,146.87533333333334,86.56249999999994,147.91633333333334,86.14549999999994,148.95833333333334L104.06249999999994,148.95833333333334ZM96.14549999999994,132.70833333333334C109.68749999999994,132.29133333333334,116.56249999999994,141.87533333333334,113.64549999999994,155.62533333333334L85.10449999999994,155.62533333333334C84.47949999999994,162.08333333333334,87.60449999999994,165.62533333333334,93.64549999999994,165.62533333333334C97.81249999999994,165.41633333333334,99.68749999999994,162.70833333333334,101.56249999999994,160.20833333333334L112.18749999999994,160.20833333333334C109.06249999999994,168.54133333333334,103.43749999999994,173.75033333333334,91.97949999999994,173.54133333333334C80.93749999999994,173.54133333333334,74.89549999999994,168.00033333333334,74.89549999999994,156.66633333333334C74.89549999999994,142.91633333333334,82.18749999999994,133.12533333333334,96.14549999999994,132.70833333333334Z" stroke="#ff0000" fill="#ff0000"></path> 5.10 +<path transform="" d="M136.56249999999994,173.5L124.27049999999994,173.5L119.27049999999994,133.75L130.10449999999994,133.75L132.81249999999994,161.25L146.35449999999994,133.75L157.60449999999994,133.75Z" stroke="#ff0000" fill="#ff0000"></path> 5.11 +<path transform="" d="M175.10416666666674,127.70833333333334L164.27116666666674,127.70833333333334L166.14616666666674,118.95833333333334L176.97916666666674,118.95833333333334ZM163.02116666666674,133.75033333333334L173.85416666666674,133.75033333333334L165.52116666666674,172.50033333333334L154.89616666666674,172.50033333333334Z" stroke="#ff0000" fill="#ff0000"></path> 5.12 +<path transform="" d="M204.47916666666652,149.79166666666669C208.22916666666652,141.04166666666669,196.97916666666652,138.3336666666667,192.60416666666652,144.37466666666668C187.39616666666652,151.24966666666668,187.60416666666652,163.12466666666668,184.89616666666652,172.49966666666668L174.27116666666652,172.49966666666668L182.39616666666652,133.74966666666668L192.60416666666652,133.74966666666668L191.35416666666652,139.16666666666669C198.02116666666652,128.54166666666669,219.0621666666665,131.04166666666669,215.9371666666665,146.4586666666667L210.52116666666652,172.49966666666668L199.6871666666665,172.49966666666668Z" stroke="#ff0000" fill="#ff0000"></path> 5.13 +<path transform="" d="M282.1875000000002,134.79166666666663C282.6045000000002,125.41666666666663,270.7295000000002,128.74966666666663,262.3955000000002,128.12466666666663L259.2705000000002,143.12466666666663C269.4795000000002,142.91666666666663,281.7705000000002,144.99966666666663,282.1875000000002,134.79166666666663ZM276.14550000000025,172.49966666666663C274.47950000000026,163.33366666666663,280.3125000000002,150.83366666666663,268.64550000000025,151.66666666666663L257.39550000000025,151.66666666666663L253.02050000000025,172.49966666666663L241.35450000000026,172.49966666666663L252.60450000000026,118.95866666666663C270.10450000000026,119.99966666666663,294.89550000000025,113.54166666666663,294.0625000000002,132.91666666666663C293.64550000000025,141.45866666666663,288.64550000000025,145.62466666666663,281.77050000000025,147.49966666666663C290.52050000000025,149.99966666666663,285.72950000000026,163.33366666666663,287.60450000000026,172.49966666666663L276.14550000000025,172.49966666666663Z" stroke="#ff0000" fill="#ff0000"></path> 5.14 +<path transform="" d="M309.27083333333303,156.45833333333334C305.937833333333,162.50033333333334,312.187833333333,167.50033333333334,317.812833333333,164.16633333333334C326.77083333333303,159.16633333333334,325.52083333333303,144.16633333333334,328.853833333333,133.75033333333334L339.478833333333,133.75033333333334L331.353833333333,173.00033333333334L321.145833333333,173.00033333333334C321.353833333333,170.83333333333334,322.395833333333,168.54133333333334,322.18783333333295,167.08333333333334C315.72883333333294,178.00033333333334,294.47883333333294,175.62533333333334,297.81283333333295,159.58333333333334L303.22883333333294,133.75033333333334L313.85383333333294,133.75033333333334Z" stroke="#ff0000" fill="#ff0000"></path> 5.15 +<path transform="" d="M349.2708333333335,153.54166666666669C337.81283333333346,146.04166666666669,348.6458333333335,130.41666666666669,361.56283333333346,132.7086666666667C370.93783333333346,132.49966666666668,377.3958333333335,135.62466666666668,377.3958333333335,144.99966666666668L367.6038333333335,144.99966666666668C367.6038333333335,141.4586666666667,365.3128333333335,140.2086666666667,361.5628333333335,139.79166666666669C357.1878333333335,139.37466666666668,353.02083333333354,142.49966666666668,356.14583333333354,145.8336666666667C363.02083333333354,149.79166666666669,375.52083333333354,149.37466666666668,375.52083333333354,160.41666666666669C375.52083333333354,177.49966666666668,340.9378333333335,178.54166666666669,340.52083333333354,161.4586666666667L340.52083333333354,159.99966666666668L350.3128333333335,159.99966666666668C350.1038333333335,164.79166666666669,353.8538333333335,165.8336666666667,358.02083333333354,166.4586666666667C364.47883333333357,167.49966666666668,367.39583333333354,159.5836666666667,360.9378333333335,157.49966666666668Z" stroke="#ff0000" fill="#ff0000"></path> 5.16 +<path transform="" d="M400.52083333333326,172.70833333333331C391.3538333333333,174.58333333333331,381.9788333333332,173.00033333333332,384.27083333333326,161.6663333333333L388.64583333333326,140.83333333333331L381.56283333333323,140.83333333333331L383.2288333333332,133.75033333333332L390.1038333333332,133.75033333333332L392.3958333333332,121.87533333333332L403.2288333333332,121.87533333333332L400.7288333333332,133.75033333333332L408.43783333333323,133.75033333333332L406.77083333333326,140.83333333333331L399.27083333333326,140.83333333333331L394.89583333333326,161.87533333333332C394.68783333333323,165.4163333333333,399.06283333333323,165.00033333333332,402.39583333333326,164.58333333333331Z" stroke="#ff0000" fill="#ff0000"></path> 5.17 +<path transform="" d="M436.7708333333337,144.58333333333334C436.7708333333337,137.08333333333334,422.3958333333337,138.95833333333334,421.97883333333374,145.41633333333334L412.18783333333374,145.41633333333334C413.43783333333374,136.25033333333334,420.31283333333374,132.91633333333334,430.5208333333337,132.70833333333334C441.35383333333374,132.50033333333334,448.6458333333337,137.29133333333334,445.72883333333374,149.37533333333334C443.85383333333374,156.87533333333334,441.56283333333374,164.79133333333334,442.18783333333374,172.50033333333334L431.56283333333374,172.50033333333334L431.56283333333374,168.75033333333334C425.72883333333374,176.04133333333334,406.97883333333374,175.20833333333334,406.97883333333374,163.33333333333334C406.97883333333374,150.62533333333334,421.56283333333374,150.20833333333334,433.0208333333337,148.75033333333334C435.3128333333337,147.91633333333334,436.7708333333337,147.29133333333334,436.7708333333337,144.58333333333334ZM434.6878333333337,153.95833333333334C429.4788333333337,157.50033333333334,417.6038333333337,153.33333333333334,417.8128333333337,162.08333333333334C417.8128333333337,168.12533333333334,428.2288333333337,167.08333333333334,430.5208333333337,163.54133333333334C433.0208333333337,161.25033333333334,433.6458333333337,158.00033333333334,434.6878333333337,153.95833333333334Z" stroke="#ff0000" fill="#ff0000"></path> 5.18 +<path transform="" d="M471.3541666666665,132.70833333333331C477.6041666666665,132.50033333333332,481.1461666666665,135.4163333333333,483.43716666666654,139.58333333333331L484.4791666666665,133.75033333333332L494.68716666666654,133.75033333333332C491.14616666666655,148.33333333333331,489.4791666666665,164.7913333333333,484.4791666666665,178.12533333333332C479.8961666666665,190.4163333333333,448.8541666666665,191.25033333333332,449.0621666666665,174.58333333333331L459.6871666666665,174.58333333333331C459.6871666666665,181.6663333333333,471.35416666666646,181.0413333333333,473.85416666666646,176.25033333333332C475.10416666666646,173.5413333333333,477.1871666666665,169.7913333333333,477.39616666666643,166.45833333333331C469.47916666666646,177.2913333333333,450.52116666666643,170.83333333333331,451.77116666666643,156.0413333333333C452.8121666666664,143.12533333333332,458.4371666666664,133.5413333333333,471.3541666666664,132.70833333333331ZM480.93716666666654,149.1663333333333C480.93716666666654,144.1663333333333,478.2291666666665,140.62533333333332,473.2291666666665,140.62533333333332C462.3961666666665,140.62533333333332,457.1871666666665,163.95833333333331,469.68716666666654,163.95833333333331C477.39616666666655,163.95833333333331,480.52116666666655,157.08333333333331,480.93716666666654,149.1663333333333Z" stroke="#ff0000" fill="#ff0000"></path> 5.19 +<path transform="" d="M515.5208333333335,127.70833333333334L504.68783333333346,127.70833333333334L506.56283333333346,118.95833333333334L517.3958333333335,118.95833333333334ZM503.43783333333346,133.75033333333334L514.2708333333335,133.75033333333334L505.93783333333346,172.50033333333334L495.31283333333346,172.50033333333334Z" stroke="#ff0000" fill="#ff0000"></path> 5.20 +</svg>
6.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 6.2 +++ b/echo.css Sun Jan 24 09:37:47 2010 -0500 6.3 @@ -0,0 +1,16 @@ 6.4 +div#perlClick 6.5 +{ 6.6 +background-color: #aaa; 6.7 +} 6.8 + 6.9 + 6.10 +div#output 6.11 +{ 6.12 +background-color: #585; 6.13 +} 6.14 + 6.15 + 6.16 +div#disp_contain 6.17 +{ 6.18 +background-color: #aab; 6.19 +}
7.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 7.2 +++ b/echo.html Sun Jan 24 09:37:47 2010 -0500 7.3 @@ -0,0 +1,65 @@ 7.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 7.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 7.6 +<head> 7.7 +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7.8 + 7.9 + 7.10 +<link href="./echo.css" rel="stylesheet" type="text/css"> 7.11 + 7.12 +<title>Laserkard | Design Studio</title> 7.13 + 7.14 +<script type="text/javascript" src="./buycode.js"></script> 7.15 +<script type="text/javascript" src="./awesome_js/raphael.js"></script> 7.16 + 7.17 + 7.18 +<script type="text/javascript" src="./awesome_js/cufon-yui.js"></script> 7.19 +<script type="text/javascript" src="./awesome_js/HelveticaNeue_LT_55_Roman_700-HelveticaNeue_LT_55_Roman_700-HelveticaNeue_LT_55_Roman_italic_700-HelveticaNeue_LT_55_Roman_italic_700.font.js"></script> 7.20 + 7.21 + 7.22 + 7.23 + 7.24 + 7.25 +</head> 7.26 + 7.27 +<body id = "buy"> 7.28 + 7.29 + 7.30 +<div id = "disp_contain"></div> 7.31 + 7.32 + 7.33 + 7.34 +<div id = "perlClick" onClick = "echo(['disp_contain'], ['perlClick'], 'POST');">Send this shiz!</div> 7.35 + 7.36 + 7.37 +<script language="javascript"> 7.38 + 7.39 + 7.40 + 7.41 +var raphe = Raphael("disp_contain", 515, 318); 7.42 + 7.43 +var c = raphe.rect(0, 0, 514, 317); 7.44 +c.attr("stroke", "#00f"); 7.45 +tt = raphe.print(10, 150, "Kevin Rustagi", raphe.getFont("HelveticaNeue", 800), 75); 7.46 + 7.47 + 7.48 +tt.attr("stroke", "#f00"); 7.49 +tt.attr("fill", "RED"); 7.50 + 7.51 + 7.52 +var svg = document.getElementById('disp_contain'); 7.53 + 7.54 + 7.55 + 7.56 +</script> 7.57 + 7.58 + 7.59 + 7.60 + 7.61 + 7.62 + 7.63 + 7.64 +</body> 7.65 + 7.66 +</html> 7.67 + 7.68 +
8.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 8.2 +++ b/echo.pl Sun Jan 24 09:37:47 2010 -0500 8.3 @@ -0,0 +1,224 @@ 8.4 +#!/usr/bin/perl 8.5 + 8.6 + 8.7 +use List::Util qw(first max maxstr min minstr reduce shuffle sum); 8.8 +use Storable; 8.9 +use CGI::Ajax; 8.10 +use CGI qw(:standard); 8.11 +use URI::Escape; 8.12 +use MIME::QuotedPrint; 8.13 +use MIME::Base64; 8.14 +use Mail::Sendmail 0.75; # doesn't work with v. 0.74! 8.15 +use XML::Simple; 8.16 +use Data::Dumper; 8.17 +$Data::Dumper::Indent = 1; 8.18 + 8.19 + 8.20 +my $q = new CGI; 8.21 + 8.22 + 8.23 + 8.24 +my %hash = 8.25 +( 8.26 +'echo' => \&echo 8.27 +); 8.28 + 8.29 + 8.30 + 8.31 +my $pjx = CGI::Ajax->new(%hash); 8.32 + 8.33 +# this outputs the html for the page, and stops caching, so the fucker will work in IE. 8.34 +print $pjx->build_html($q,\&gen,{-Cache_Control => 'no-store, no-cache, must-revalidate', -Pragma => 'no-cache'}); 8.35 + 8.36 + 8.37 + 8.38 + 8.39 +sub gen 8.40 +{ 8.41 + { 8.42 + local( $/, *FH ) ; 8.43 + open( FH, "<./echo.html" ) or die "sudden flaming death\n"; 8.44 + $a = <FH>; 8.45 + } 8.46 + 8.47 + { 8.48 + local( $/, *FH ) ; 8.49 + open( FH, "<./top_menu.include" ) or die "sudden flaming death\n"; 8.50 + $b = <FH>; 8.51 + } 8.52 + 8.53 + 8.54 + 8.55 +$a =~ s/PERL-REPLACE::TOP_MENU/$b/; #equivalent to <?php include("top_menu.html"); ?>, but in perl and with more memory problems :) 8.56 + 8.57 + 8.58 + 8.59 +return $a 8.60 + 8.61 + 8.62 +} 8.63 + 8.64 + 8.65 + 8.66 +sub echo 8.67 +{ 8.68 + 8.69 + 8.70 +my $svg = $_[0]; 8.71 + 8.72 +my $destination = 'rlm@mit.edu'; 8.73 + 8.74 + 8.75 +$svg = &repair_file($svg); 8.76 +&mail($svg, $destination); 8.77 + 8.78 + 8.79 + 8.80 + 8.81 +return "done."; 8.82 + 8.83 +} 8.84 + 8.85 + 8.86 +sub repair_file 8.87 +{ 8.88 +my $svg = $_[0]; 8.89 + 8.90 +$xml = new XML::Simple; 8.91 + 8.92 + 8.93 +$sss = <<HERE; 8.94 + 8.95 +<svg height="318" width="515" version="1.1" xmlns="http://www.w3.org/2000/svg"> 8.96 +<desc>Created with Raphaƫl</desc> 8.97 +<defs></defs> 8.98 +<rect stroke="#0000ff" fill="none" ry="0" rx="0" r="0" height="317" width="514" y="0.5" x="0.5"></rect> 8.99 +<path transform="" d="M30.9375,118.95833333333334L42.8125,118.95833333333334L38.2295,141.45833333333334L62.6045,118.95833333333334L78.2295,118.95833333333334L52.3955,141.04133333333334L68.8545,172.50033333333334L55.5205,172.50033333333334L43.4375,148.33333333333334L35.1045,155.62533333333334L31.5625,172.50033333333334L19.8955,172.50033333333334Z" stroke="#ff0000" fill="#ff0000"></path> 8.100 +<path transform="" d="M104.06249999999994,148.95833333333334C105.31249999999994,138.54133333333334,90.72949999999994,138.75033333333334,87.60449999999994,145.83333333333334C86.97949999999994,146.87533333333334,86.56249999999994,147.91633333333334,86.14549999999994,148.95833333333334L104.06249999999994,148.95833333333334ZM96.14549999999994,132.70833333333334C109.68749999999994,132.29133333333334,116.56249999999994,141.87533333333334,113.64549999999994,155.62533333333334L85.10449999999994,155.62533333333334C84.47949999999994,162.08333333333334,87.60449999999994,165.62533333333334,93.64549999999994,165.62533333333334C97.81249999999994,165.41633333333334,99.68749999999994,162.70833333333334,101.56249999999994,160.20833333333334L112.18749999999994,160.20833333333334C109.06249999999994,168.54133333333334,103.43749999999994,173.75033333333334,91.97949999999994,173.54133333333334C80.93749999999994,173.54133333333334,74.89549999999994,168.00033333333334,74.89549999999994,156.66633333333334C74.89549999999994,142.91633333333334,82.18749999999994,133.12533333333334,96.14549999999994,132.70833333333334Z" stroke="#ff0000" fill="#ff0000"></path> 8.101 +<path transform="" d="M136.56249999999994,173.5L124.27049999999994,173.5L119.27049999999994,133.75L130.10449999999994,133.75L132.81249999999994,161.25L146.35449999999994,133.75L157.60449999999994,133.75Z" stroke="#ff0000" fill="#ff0000"></path> 8.102 +<path transform="" d="M175.10416666666674,127.70833333333334L164.27116666666674,127.70833333333334L166.14616666666674,118.95833333333334L176.97916666666674,118.95833333333334ZM163.02116666666674,133.75033333333334L173.85416666666674,133.75033333333334L165.52116666666674,172.50033333333334L154.89616666666674,172.50033333333334Z" stroke="#ff0000" fill="#ff0000"></path> 8.103 +<path transform="" d="M204.47916666666652,149.79166666666669C208.22916666666652,141.04166666666669,196.97916666666652,138.3336666666667,192.60416666666652,144.37466666666668C187.39616666666652,151.24966666666668,187.60416666666652,163.12466666666668,184.89616666666652,172.49966666666668L174.27116666666652,172.49966666666668L182.39616666666652,133.74966666666668L192.60416666666652,133.74966666666668L191.35416666666652,139.16666666666669C198.02116666666652,128.54166666666669,219.0621666666665,131.04166666666669,215.9371666666665,146.4586666666667L210.52116666666652,172.49966666666668L199.6871666666665,172.49966666666668Z" stroke="#ff0000" fill="#ff0000"></path> 8.104 +<path transform="" d="M282.1875000000002,134.79166666666663C282.6045000000002,125.41666666666663,270.7295000000002,128.74966666666663,262.3955000000002,128.12466666666663L259.2705000000002,143.12466666666663C269.4795000000002,142.91666666666663,281.7705000000002,144.99966666666663,282.1875000000002,134.79166666666663ZM276.14550000000025,172.49966666666663C274.47950000000026,163.33366666666663,280.3125000000002,150.83366666666663,268.64550000000025,151.66666666666663L257.39550000000025,151.66666666666663L253.02050000000025,172.49966666666663L241.35450000000026,172.49966666666663L252.60450000000026,118.95866666666663C270.10450000000026,119.99966666666663,294.89550000000025,113.54166666666663,294.0625000000002,132.91666666666663C293.64550000000025,141.45866666666663,288.64550000000025,145.62466666666663,281.77050000000025,147.49966666666663C290.52050000000025,149.99966666666663,285.72950000000026,163.33366666666663,287.60450000000026,172.49966666666663L276.14550000000025,172.49966666666663Z" stroke="#ff0000" fill="#ff0000"></path> 8.105 +<path transform="" d="M309.27083333333303,156.45833333333334C305.937833333333,162.50033333333334,312.187833333333,167.50033333333334,317.812833333333,164.16633333333334C326.77083333333303,159.16633333333334,325.52083333333303,144.16633333333334,328.853833333333,133.75033333333334L339.478833333333,133.75033333333334L331.353833333333,173.00033333333334L321.145833333333,173.00033333333334C321.353833333333,170.83333333333334,322.395833333333,168.54133333333334,322.18783333333295,167.08333333333334C315.72883333333294,178.00033333333334,294.47883333333294,175.62533333333334,297.81283333333295,159.58333333333334L303.22883333333294,133.75033333333334L313.85383333333294,133.75033333333334Z" stroke="#ff0000" fill="#ff0000"></path> 8.106 +<path transform="" d="M349.2708333333335,153.54166666666669C337.81283333333346,146.04166666666669,348.6458333333335,130.41666666666669,361.56283333333346,132.7086666666667C370.93783333333346,132.49966666666668,377.3958333333335,135.62466666666668,377.3958333333335,144.99966666666668L367.6038333333335,144.99966666666668C367.6038333333335,141.4586666666667,365.3128333333335,140.2086666666667,361.5628333333335,139.79166666666669C357.1878333333335,139.37466666666668,353.02083333333354,142.49966666666668,356.14583333333354,145.8336666666667C363.02083333333354,149.79166666666669,375.52083333333354,149.37466666666668,375.52083333333354,160.41666666666669C375.52083333333354,177.49966666666668,340.9378333333335,178.54166666666669,340.52083333333354,161.4586666666667L340.52083333333354,159.99966666666668L350.3128333333335,159.99966666666668C350.1038333333335,164.79166666666669,353.8538333333335,165.8336666666667,358.02083333333354,166.4586666666667C364.47883333333357,167.49966666666668,367.39583333333354,159.5836666666667,360.9378333333335,157.49966666666668Z" stroke="#ff0000" fill="#ff0000"></path> 8.107 +<path transform="" d="M400.52083333333326,172.70833333333331C391.3538333333333,174.58333333333331,381.9788333333332,173.00033333333332,384.27083333333326,161.6663333333333L388.64583333333326,140.83333333333331L381.56283333333323,140.83333333333331L383.2288333333332,133.75033333333332L390.1038333333332,133.75033333333332L392.3958333333332,121.87533333333332L403.2288333333332,121.87533333333332L400.7288333333332,133.75033333333332L408.43783333333323,133.75033333333332L406.77083333333326,140.83333333333331L399.27083333333326,140.83333333333331L394.89583333333326,161.87533333333332C394.68783333333323,165.4163333333333,399.06283333333323,165.00033333333332,402.39583333333326,164.58333333333331Z" stroke="#ff0000" fill="#ff0000"></path> 8.108 +<path transform="" d="M436.7708333333337,144.58333333333334C436.7708333333337,137.08333333333334,422.3958333333337,138.95833333333334,421.97883333333374,145.41633333333334L412.18783333333374,145.41633333333334C413.43783333333374,136.25033333333334,420.31283333333374,132.91633333333334,430.5208333333337,132.70833333333334C441.35383333333374,132.50033333333334,448.6458333333337,137.29133333333334,445.72883333333374,149.37533333333334C443.85383333333374,156.87533333333334,441.56283333333374,164.79133333333334,442.18783333333374,172.50033333333334L431.56283333333374,172.50033333333334L431.56283333333374,168.75033333333334C425.72883333333374,176.04133333333334,406.97883333333374,175.20833333333334,406.97883333333374,163.33333333333334C406.97883333333374,150.62533333333334,421.56283333333374,150.20833333333334,433.0208333333337,148.75033333333334C435.3128333333337,147.91633333333334,436.7708333333337,147.29133333333334,436.7708333333337,144.58333333333334ZM434.6878333333337,153.95833333333334C429.4788333333337,157.50033333333334,417.6038333333337,153.33333333333334,417.8128333333337,162.08333333333334C417.8128333333337,168.12533333333334,428.2288333333337,167.08333333333334,430.5208333333337,163.54133333333334C433.0208333333337,161.25033333333334,433.6458333333337,158.00033333333334,434.6878333333337,153.95833333333334Z" stroke="#ff0000" fill="#ff0000"></path> 8.109 +<path transform="" d="M471.3541666666665,132.70833333333331C477.6041666666665,132.50033333333332,481.1461666666665,135.4163333333333,483.43716666666654,139.58333333333331L484.4791666666665,133.75033333333332L494.68716666666654,133.75033333333332C491.14616666666655,148.33333333333331,489.4791666666665,164.7913333333333,484.4791666666665,178.12533333333332C479.8961666666665,190.4163333333333,448.8541666666665,191.25033333333332,449.0621666666665,174.58333333333331L459.6871666666665,174.58333333333331C459.6871666666665,181.6663333333333,471.35416666666646,181.0413333333333,473.85416666666646,176.25033333333332C475.10416666666646,173.5413333333333,477.1871666666665,169.7913333333333,477.39616666666643,166.45833333333331C469.47916666666646,177.2913333333333,450.52116666666643,170.83333333333331,451.77116666666643,156.0413333333333C452.8121666666664,143.12533333333332,458.4371666666664,133.5413333333333,471.3541666666664,132.70833333333331ZM480.93716666666654,149.1663333333333C480.93716666666654,144.1663333333333,478.2291666666665,140.62533333333332,473.2291666666665,140.62533333333332C462.3961666666665,140.62533333333332,457.1871666666665,163.95833333333331,469.68716666666654,163.95833333333331C477.39616666666655,163.95833333333331,480.52116666666655,157.08333333333331,480.93716666666654,149.1663333333333Z" stroke="#ff0000" fill="#ff0000"></path> 8.110 +<path transform="" d="M515.5208333333335,127.70833333333334L504.68783333333346,127.70833333333334L506.56283333333346,118.95833333333334L517.3958333333335,118.95833333333334ZM503.43783333333346,133.75033333333334L514.2708333333335,133.75033333333334L505.93783333333346,172.50033333333334L495.31283333333346,172.50033333333334Z" stroke="#ff0000" fill="#ff0000"></path> 8.111 +</svg> 8.112 + 8.113 + 8.114 + 8.115 + 8.116 +HERE 8.117 + 8.118 + 8.119 +# read XML file 8.120 +$data = $xml->XMLin($sss, ForceArray => 1); 8.121 + 8.122 + 8.123 +my %data = %$data; 8.124 + 8.125 +my %juzz = 8.126 +( 8.127 + 8.128 +path => $data{'path'}, 8.129 +rect => $data{'rect'}, 8.130 +width =>"16in" , 8.131 +height =>"12in" , 8.132 +version =>"1.1", 8.133 +xmlns =>"http://www.w3.org/2000/svg" 8.134 + 8.135 +); 8.136 + 8.137 + 8.138 +$out = $xml->XMLout(\%juzz , RootName=>'svg'); 8.139 + 8.140 + 8.141 +my $fixed = <<HERE; 8.142 +<?xml version="1.0" standalone="no"?> 8.143 +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 8.144 + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 8.145 +HERE 8.146 + 8.147 + 8.148 + 8.149 +$fixed .= $out; 8.150 + 8.151 +#print $fixed; 8.152 + 8.153 + return $fixed; 8.154 + 8.155 + 8.156 +} 8.157 + 8.158 + 8.159 + 8.160 +sub mail 8.161 +{ 8.162 + 8.163 + 8.164 + 8.165 +%mail = 8.166 +( 8.167 +from => 'rlm@mit.edu', 8.168 +to => $_[1], 8.169 +subject => 'Test attachment', 8.170 +); 8.171 + 8.172 + 8.173 +$boundary = "====" . time() . "===="; 8.174 +$mail{'content-type'} = "multipart/mixed; boundary=\"$boundary\""; 8.175 + 8.176 +$message = encode_qp( "email from your friend PERL." ); 8.177 + 8.178 +$attach1 = encode_base64($_[0]); # this part is so cool! I can e-mail a perl varible to anyone in the world! 8.179 + 8.180 +$attach2 = encode_base64("hi this is a test arttacghjkalsdlasndlashdlsf"); 8.181 + 8.182 + 8.183 + 8.184 + 8.185 + 8.186 +$boundary = '--'.$boundary; 8.187 +$mail{body} = <<END_OF_BODY; 8.188 +$boundary 8.189 +Content-Type: text/plain; charset="iso-8859-1" 8.190 +Content-Transfer-Encoding: quoted-printable 8.191 + 8.192 +$message 8.193 +$boundary 8.194 +Content-Type: application/octet-stream; name="test.svg" 8.195 +Content-Transfer-Encoding: base64 8.196 +Content-Disposition: attachment; filename="test.svg" 8.197 + 8.198 +$attach1 8.199 + 8.200 +$boundary 8.201 +Content-Type: application/octet-stream; name="huh.txt" 8.202 +Content-Transfer-Encoding: base64 8.203 +Content-Disposition: attachment; filename="huh.txt" 8.204 + 8.205 +$attach2 8.206 +$boundary-- 8.207 + 8.208 +END_OF_BODY 8.209 + 8.210 +sendmail(%mail) || print "Error: $Mail::Sendmail::error\n"; 8.211 + 8.212 + 8.213 +} 8.214 + 8.215 + 8.216 + 8.217 + 8.218 + 8.219 + 8.220 + 8.221 + 8.222 + 8.223 + 8.224 + 8.225 + 8.226 + 8.227 +
9.1 --- a/faq.css Mon Jan 18 15:52:33 2010 -0500 9.2 +++ b/faq.css Sun Jan 24 09:37:47 2010 -0500 9.3 @@ -16,7 +16,7 @@ 9.4 { 9.5 9.6 font: bold 18px "helvetica","arial", "sans-serif"; 9.7 -color: white; 9.8 +color: #fff; 9.9 9.10 } 9.11
10.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 10.2 +++ b/generatecard.html Sun Jan 24 09:37:47 2010 -0500 10.3 @@ -0,0 +1,70 @@ 10.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 10.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 10.6 +<head> 10.7 +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 10.8 + 10.9 +<link href="./main.css" rel="stylesheet" type="text/css"> 10.10 +<link href="./sexy.css" rel="stylesheet" type="text/css"> 10.11 + 10.12 +<title>Laserkard | Design Studio</title> 10.13 + 10.14 +<script type="text/javascript" src="./buycode.js"></script> 10.15 +<script type="text/javascript" src="./awesome_js/raphael.js"></script> 10.16 +<script type="text/javascript" src="./awesome_js/prototype.js"></script> 10.17 +<script type="text/javascript" src="./awesome_js/Base64.js"></script> 10.18 +<script type="text/javascript" src="./awesome_js/cufon-yui.js"></script> 10.19 +<script type="text/javascript" src="./awesome_js/HelveticaNeue_LT_55_Roman_700-HelveticaNeue_LT_55_Roman_700-HelveticaNeue_LT_55_Roman_italic_700-HelveticaNeue_LT_55_Roman_italic_700.font.js"></script> 10.20 + 10.21 + 10.22 + 10.23 + 10.24 + 10.25 +</head> 10.26 + 10.27 +<body id = "buy"> 10.28 + 10.29 + 10.30 +<div id = "disp_contain"></div> 10.31 + 10.32 + 10.33 +<script language="javascript"> 10.34 + 10.35 + 10.36 + 10.37 +var raphe = Raphael("disp_contain", 515, 318); 10.38 + 10.39 +var c = raphe.rect(0, 0, 514, 317); 10.40 +c.attr("stroke", "#00f"); 10.41 +tt = raphe.print(10, 150, "Kevin Rustagi", raphe.getFont("HelveticaNeue", 800), 75); 10.42 + 10.43 + 10.44 +tt.attr("stroke", "#f00"); 10.45 +tt.attr("fill", "RED"); 10.46 + 10.47 + 10.48 +var svg = 10.49 + 10.50 +//'<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">' + 10.51 +//'<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" ' + 10.52 +//document.getElementById('disp_contain').innerHTML + 10.53 +'<h1> jdaksljd </h1>' + 'sdfjlskjflskajf skds a dksjflk' + 10.54 + 10.55 +; 10.56 + 10.57 + 10.58 + 10.59 +document.getElementById('buy').innerHTML = svg; 10.60 + 10.61 +</script> 10.62 + 10.63 + 10.64 + 10.65 + 10.66 + 10.67 + 10.68 + 10.69 +</body> 10.70 + 10.71 +</html> 10.72 + 10.73 +
11.1 --- a/log/error_log.log Mon Jan 18 15:52:33 2010 -0500 11.2 +++ b/log/error_log.log Sun Jan 24 09:37:47 2010 -0500 11.3 @@ -2643,3 +2643,58 @@ 11.4 [Mon Jan 18 15:13:26 2010] [error] [client 18.111.69.201] File does not exist: /home/rlm/Desktop/web/laserkard/favicon.ico 11.5 [Mon Jan 18 15:13:28 2010] [error] [client 18.111.69.201] File does not exist: /home/rlm/Desktop/web/laserkard/favicon.ico 11.6 [Mon Jan 18 15:39:37 2010] [error] [client 18.238.1.90] File does not exist: /home/rlm/Desktop/web/laserkard/faq.css, referer: http://laserkard.rlmcintyre.com/faq.php 11.7 +[Thu Jan 21 02:09:18 2010] [error] [client 18.238.1.90] File does not exist: /home/rlm/Desktop/web/laserkard/favicon.ico 11.8 +[Thu Jan 21 02:09:22 2010] [error] [client 18.238.1.90] File does not exist: /home/rlm/Desktop/web/laserkard/favicon.ico 11.9 +[Thu Jan 21 02:09:43 2010] [error] [client 18.238.1.90] File does not exist: /home/rlm/Desktop/web/laserkard/favicon.ico 11.10 +[Thu Jan 21 02:09:47 2010] [error] [client 18.238.1.90] File does not exist: /home/rlm/Desktop/web/laserkard/favicon.ico 11.11 +[Thu Jan 21 10:48:47 2010] [error] [client 18.238.1.90] File does not exist: /home/rlm/Desktop/web/laserkard/favicon.ico 11.12 +[Thu Jan 21 10:48:50 2010] [error] [client 18.238.1.90] File does not exist: /home/rlm/Desktop/web/laserkard/favicon.ico 11.13 +[Thu Jan 21 21:09:15 2010] [error] [client 18.238.1.90] File does not exist: /home/rlm/Desktop/web/laserkard/favicon.ico 11.14 +[Fri Jan 22 22:55:04 2010] [error] [client 18.238.1.90] File does not exist: /home/rlm/Desktop/web/laserkard/echo 11.15 +[Sat Jan 23 11:26:48 2010] [error] [client 18.238.1.90] syntax error at /home/rlm/Desktop/web/laserkard/echo.pl line 91, near ") 11.16 +[Sat Jan 23 11:26:48 2010] [error] [client 18.238.1.90] {" 11.17 +[Sat Jan 23 11:26:48 2010] [error] [client 18.238.1.90] Can't find string terminator '"' anywhere before EOF at /home/rlm/Desktop/web/laserkard/echo.pl line 110. 11.18 +[Sat Jan 23 11:26:48 2010] [error] [client 18.238.1.90] Premature end of script headers: echo.pl 11.19 +[Sat Jan 23 11:27:56 2010] [error] [client 18.238.1.90] syntax error at /home/rlm/Desktop/web/laserkard/mailshiv.pl line 13, near ">", referer: http://laserkard.rlmcintyre.com/echo.pl 11.20 +[Sat Jan 23 11:27:56 2010] [error] [client 18.238.1.90] syntax error at /home/rlm/Desktop/web/laserkard/mailshiv.pl line 13, near ">", referer: http://laserkard.rlmcintyre.com/echo.pl 11.21 +[Sat Jan 23 11:27:56 2010] [error] [client 18.238.1.90] syntax error at /home/rlm/Desktop/web/laserkard/mailshiv.pl line 13, near "))", referer: http://laserkard.rlmcintyre.com/echo.pl 11.22 +[Sat Jan 23 11:27:56 2010] [error] [client 18.238.1.90] syntax error at /home/rlm/Desktop/web/laserkard/mailshiv.pl line 17, near "}", referer: http://laserkard.rlmcintyre.com/echo.pl 11.23 +[Sat Jan 23 11:27:56 2010] [error] [client 18.238.1.90] Bareword "header" not allowed while "strict subs" in use at /home/rlm/Desktop/web/laserkard/mailshiv.pl line 14., referer: http://laserkard.rlmcintyre.com/echo.pl 11.24 +[Sat Jan 23 11:27:56 2010] [error] [client 18.238.1.90] Bareword "header" not allowed while "strict subs" in use at /home/rlm/Desktop/web/laserkard/mailshiv.pl line 27., referer: http://laserkard.rlmcintyre.com/echo.pl 11.25 +[Sat Jan 23 11:27:56 2010] [error] [client 18.238.1.90] Bareword "header" not allowed while "strict subs" in use at /home/rlm/Desktop/web/laserkard/mailshiv.pl line 45., referer: http://laserkard.rlmcintyre.com/echo.pl 11.26 +[Sat Jan 23 11:27:56 2010] [error] [client 18.238.1.90] Execution of /home/rlm/Desktop/web/laserkard/mailshiv.pl aborted due to compilation errors., referer: http://laserkard.rlmcintyre.com/echo.pl 11.27 +[Sat Jan 23 11:27:56 2010] [error] [client 18.238.1.90] Premature end of script headers: mailshiv.pl, referer: http://laserkard.rlmcintyre.com/echo.pl 11.28 +[Sat Jan 23 11:30:14 2010] [error] [client 18.238.1.90] Cannot open subscribers.txt: No such file or directory at /home/rlm/Desktop/web/laserkard/mailshiv.pl line 31., referer: http://laserkard.rlmcintyre.com/echo.pl 11.29 +[Sat Jan 23 11:30:14 2010] [error] [client 18.238.1.90] Premature end of script headers: mailshiv.pl, referer: http://laserkard.rlmcintyre.com/echo.pl 11.30 +[Sat Jan 23 11:35:03 2010] [error] [client 18.238.1.90] Cannot open subscribers.txt: Permission denied at /home/rlm/Desktop/web/laserkard/mailshiv.pl line 35., referer: http://laserkard.rlmcintyre.com/echo.pl 11.31 +[Sat Jan 23 11:35:03 2010] [error] [client 18.238.1.90] Premature end of script headers: mailshiv.pl, referer: http://laserkard.rlmcintyre.com/echo.pl 11.32 +[Sat Jan 23 11:35:32 2010] [error] [client 18.238.1.90] Cannot open subscribers.txt: Permission denied at /home/rlm/Desktop/web/laserkard/mailshiv.pl line 34., referer: http://laserkard.rlmcintyre.com/echo.pl 11.33 +[Sat Jan 23 11:35:32 2010] [error] [client 18.238.1.90] Premature end of script headers: mailshiv.pl, referer: http://laserkard.rlmcintyre.com/echo.pl 11.34 +[Sat Jan 23 11:36:56 2010] [error] [client 18.238.1.90] malformed header from script. Bad header=rlm@mit.edu: mailshiv.pl, referer: http://laserkard.rlmcintyre.com/echo.pl 11.35 +[Sat Jan 23 11:41:57 2010] [error] [client 18.238.1.90] malformed header from script. Bad header=rlm@mit.edu: mailshiv.pl, referer: http://laserkard.com/echo.pl 11.36 +[Sat Jan 23 12:05:57 2010] [error] [client 18.238.1.90] (8)Exec format error: exec of '/home/rlm/Desktop/web/laserkard/megamail.pl' failed 11.37 +[Sat Jan 23 12:05:57 2010] [error] [client 18.238.1.90] Premature end of script headers: megamail.pl 11.38 +[Sat Jan 23 13:41:47 2010] [error] [client 18.238.1.90] Problem with code: Bad file descriptor at /home/rlm/Desktop/web/laserkard/echo.pl line 70., referer: http://laserkard.rlmcintyre.com/echo.pl 11.39 +[Sat Jan 23 13:41:47 2010] [error] [client 18.238.1.90] , referer: http://laserkard.rlmcintyre.com/echo.pl 11.40 +[Sat Jan 23 13:43:48 2010] [error] [client 18.238.1.90] Problem with code: Died at /home/rlm/Desktop/web/laserkard/echo.pl line 78., referer: http://laserkard.rlmcintyre.com/echo.pl 11.41 +[Sat Jan 23 13:43:48 2010] [error] [client 18.238.1.90] at /usr/share/perl/5.10/CGI/Carp.pm line 356, referer: http://laserkard.rlmcintyre.com/echo.pl 11.42 +[Sat Jan 23 13:43:48 2010] [error] [client 18.238.1.90] \tCGI::Carp::realdie('Died at /home/rlm/Desktop/web/laserkard/echo.pl line 78.\\x{a}') called at /usr/share/perl/5.10/CGI/Carp.pm line 437, referer: http://laserkard.rlmcintyre.com/echo.pl 11.43 +[Sat Jan 23 13:43:48 2010] [error] [client 18.238.1.90] \tCGI::Carp::die() called at /home/rlm/Desktop/web/laserkard/echo.pl line 78, referer: http://laserkard.rlmcintyre.com/echo.pl 11.44 +[Sat Jan 23 13:43:48 2010] [error] [client 18.238.1.90] \tmain::echo('<svg height="318" width="515" version="1.1" xmlns="http://www...') called at /usr/local/share/perl/5.10.0/CGI/Ajax.pm line 1145, referer: http://laserkard.rlmcintyre.com/echo.pl 11.45 +[Sat Jan 23 13:43:48 2010] [error] [client 18.238.1.90] \teval {...} called at /usr/local/share/perl/5.10.0/CGI/Ajax.pm line 1145, referer: http://laserkard.rlmcintyre.com/echo.pl 11.46 +[Sat Jan 23 13:43:48 2010] [error] [client 18.238.1.90] \tCGI::Ajax::handle_request('CGI::Ajax=HASH(0x8938c20)') called at /usr/local/share/perl/5.10.0/CGI/Ajax.pm line 534, referer: http://laserkard.rlmcintyre.com/echo.pl 11.47 +[Sat Jan 23 13:43:48 2010] [error] [client 18.238.1.90] \tCGI::Ajax::build_html('CGI::Ajax=HASH(0x8938c20)', 'CGI=HASH(0x86749d0)', 'CODE(0x8938c40)', 'HASH(0x8970900)') called at /home/rlm/Desktop/web/laserkard/echo.pl line 34, referer: http://laserkard.rlmcintyre.com/echo.pl 11.48 +[Sat Jan 23 13:43:48 2010] [error] [client 18.238.1.90] , referer: http://laserkard.rlmcintyre.com/echo.pl 11.49 +[Sat Jan 23 14:53:27 2010] [error] [client 18.238.1.90] Problem with code: , referer: http://laserkard.rlmcintyre.com/echo.pl 11.50 +[Sat Jan 23 14:53:27 2010] [error] [client 18.238.1.90] not well-formed (invalid token) at line 1, column 103, byte 103 at /usr/lib/perl5/XML/Parser.pm line 187, referer: http://laserkard.rlmcintyre.com/echo.pl 11.51 +[Sat Jan 23 14:53:27 2010] [error] [client 18.238.1.90] , referer: http://laserkard.rlmcintyre.com/echo.pl 11.52 +[Sat Jan 23 14:55:00 2010] [error] [client 18.238.1.90] Problem with code: , referer: http://laserkard.rlmcintyre.com/echo.pl 11.53 +[Sat Jan 23 14:55:00 2010] [error] [client 18.238.1.90] not well-formed (invalid token) at line 1, column 103, byte 103 at /usr/lib/perl5/XML/Parser.pm line 187, referer: http://laserkard.rlmcintyre.com/echo.pl 11.54 +[Sat Jan 23 14:55:00 2010] [error] [client 18.238.1.90] , referer: http://laserkard.rlmcintyre.com/echo.pl 11.55 +[Sat Jan 23 14:57:28 2010] [error] [client 18.238.1.90] Problem with code: , referer: http://laserkard.rlmcintyre.com/echo.pl 11.56 +[Sat Jan 23 14:57:28 2010] [error] [client 18.238.1.90] not well-formed (invalid token) at line 1, column 103, byte 103 at /usr/lib/perl5/XML/Parser.pm line 187, referer: http://laserkard.rlmcintyre.com/echo.pl 11.57 +[Sat Jan 23 14:57:28 2010] [error] [client 18.238.1.90] , referer: http://laserkard.rlmcintyre.com/echo.pl 11.58 +[Sat Jan 23 15:44:15 2010] [error] [client 18.238.1.90] File does not exist: /home/rlm/Desktop/web/laserkard/favicon.ico 11.59 +[Sat Jan 23 15:44:19 2010] [error] [client 18.238.1.90] File does not exist: /home/rlm/Desktop/web/laserkard/favicon.ico 11.60 +[Sun Jan 24 09:34:33 2010] [error] [client 18.238.1.90] File does not exist: /home/rlm/Desktop/web/laserkard/favicon.ico 11.61 +[Sun Jan 24 09:34:33 2010] [error] [client 18.238.1.90] File does not exist: /home/rlm/Desktop/web/laserkard/favicon.ico
12.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 12.2 +++ b/megamail.pl Sun Jan 24 09:37:47 2010 -0500 12.3 @@ -0,0 +1,56 @@ 12.4 +use MIME::QuotedPrint; 12.5 +use MIME::Base64; 12.6 +use Mail::Sendmail 0.75; # doesn't work with v. 0.74! 12.7 + 12.8 +%mail = ( 12.9 + from => 'rlm@mit.edu', 12.10 + to => 'rlm@mit.edu', 12.11 + subject => 'Test attachment', 12.12 + ); 12.13 + 12.14 + 12.15 +$boundary = "====" . time() . "===="; 12.16 +$mail{'content-type'} = "multipart/mixed; boundary=\"$boundary\""; 12.17 + 12.18 +$message = encode_qp( "email from your friend PERL." ); 12.19 + 12.20 +$file = "./inkscape/arrow.svg"; 12.21 + 12.22 +open (F, $file) or die "Cannot read $file: $!"; 12.23 +binmode F; undef $/; 12.24 +$attach1 = encode_base64(<F>); 12.25 +close F; 12.26 + 12.27 + 12.28 + 12.29 +$attach2 = encode_base64("hi this is a test arttacghjkalsdlasndlashdlsf"); 12.30 + 12.31 + 12.32 + 12.33 + 12.34 + 12.35 +$boundary = '--'.$boundary; 12.36 +$mail{body} = <<END_OF_BODY; 12.37 +$boundary 12.38 +Content-Type: text/plain; charset="iso-8859-1" 12.39 +Content-Transfer-Encoding: quoted-printable 12.40 + 12.41 +$message 12.42 +$boundary 12.43 +Content-Type: application/octet-stream; name="test.svg" 12.44 +Content-Transfer-Encoding: base64 12.45 +Content-Disposition: attachment; filename="test.svg" 12.46 + 12.47 +$attach1 12.48 + 12.49 +$boundary 12.50 +Content-Type: application/octet-stream; name="huh.txt" 12.51 +Content-Transfer-Encoding: base64 12.52 +Content-Disposition: attachment; filename="huh.txt" 12.53 + 12.54 +$attach2 12.55 +$boundary-- 12.56 + 12.57 +END_OF_BODY 12.58 + 12.59 +sendmail(%mail) || print "Error: $Mail::Sendmail::error\n";
13.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 13.2 +++ b/out.svg Sun Jan 24 09:37:47 2010 -0500 13.3 @@ -0,0 +1,15 @@ 13.4 +<svg> 13.5 + <path d="M30.9375,118.95833333333334L42.8125,118.95833333333334L38.2295,141.45833333333334L62.6045,118.95833333333334L78.2295,118.95833333333334L52.3955,141.04133333333334L68.8545,172.50033333333334L55.5205,172.50033333333334L43.4375,148.33333333333334L35.1045,155.62533333333334L31.5625,172.50033333333334L19.8955,172.50033333333334Z" fill="#ff0000" stroke="#ff0000" transform="" /> 13.6 + <path d="M104.06249999999994,148.95833333333334C105.31249999999994,138.54133333333334,90.72949999999994,138.75033333333334,87.60449999999994,145.83333333333334C86.97949999999994,146.87533333333334,86.56249999999994,147.91633333333334,86.14549999999994,148.95833333333334L104.06249999999994,148.95833333333334ZM96.14549999999994,132.70833333333334C109.68749999999994,132.29133333333334,116.56249999999994,141.87533333333334,113.64549999999994,155.62533333333334L85.10449999999994,155.62533333333334C84.47949999999994,162.08333333333334,87.60449999999994,165.62533333333334,93.64549999999994,165.62533333333334C97.81249999999994,165.41633333333334,99.68749999999994,162.70833333333334,101.56249999999994,160.20833333333334L112.18749999999994,160.20833333333334C109.06249999999994,168.54133333333334,103.43749999999994,173.75033333333334,91.97949999999994,173.54133333333334C80.93749999999994,173.54133333333334,74.89549999999994,168.00033333333334,74.89549999999994,156.66633333333334C74.89549999999994,142.91633333333334,82.18749999999994,133.12533333333334,96.14549999999994,132.70833333333334Z" fill="#ff0000" stroke="#ff0000" transform="" /> 13.7 + <path d="M136.56249999999994,173.5L124.27049999999994,173.5L119.27049999999994,133.75L130.10449999999994,133.75L132.81249999999994,161.25L146.35449999999994,133.75L157.60449999999994,133.75Z" fill="#ff0000" stroke="#ff0000" transform="" /> 13.8 + <path d="M175.10416666666674,127.70833333333334L164.27116666666674,127.70833333333334L166.14616666666674,118.95833333333334L176.97916666666674,118.95833333333334ZM163.02116666666674,133.75033333333334L173.85416666666674,133.75033333333334L165.52116666666674,172.50033333333334L154.89616666666674,172.50033333333334Z" fill="#ff0000" stroke="#ff0000" transform="" /> 13.9 + <path d="M204.47916666666652,149.79166666666669C208.22916666666652,141.04166666666669,196.97916666666652,138.3336666666667,192.60416666666652,144.37466666666668C187.39616666666652,151.24966666666668,187.60416666666652,163.12466666666668,184.89616666666652,172.49966666666668L174.27116666666652,172.49966666666668L182.39616666666652,133.74966666666668L192.60416666666652,133.74966666666668L191.35416666666652,139.16666666666669C198.02116666666652,128.54166666666669,219.0621666666665,131.04166666666669,215.9371666666665,146.4586666666667L210.52116666666652,172.49966666666668L199.6871666666665,172.49966666666668Z" fill="#ff0000" stroke="#ff0000" transform="" /> 13.10 + <path d="M282.1875000000002,134.79166666666663C282.6045000000002,125.41666666666663,270.7295000000002,128.74966666666663,262.3955000000002,128.12466666666663L259.2705000000002,143.12466666666663C269.4795000000002,142.91666666666663,281.7705000000002,144.99966666666663,282.1875000000002,134.79166666666663ZM276.14550000000025,172.49966666666663C274.47950000000026,163.33366666666663,280.3125000000002,150.83366666666663,268.64550000000025,151.66666666666663L257.39550000000025,151.66666666666663L253.02050000000025,172.49966666666663L241.35450000000026,172.49966666666663L252.60450000000026,118.95866666666663C270.10450000000026,119.99966666666663,294.89550000000025,113.54166666666663,294.0625000000002,132.91666666666663C293.64550000000025,141.45866666666663,288.64550000000025,145.62466666666663,281.77050000000025,147.49966666666663C290.52050000000025,149.99966666666663,285.72950000000026,163.33366666666663,287.60450000000026,172.49966666666663L276.14550000000025,172.49966666666663Z" fill="#ff0000" stroke="#ff0000" transform="" /> 13.11 + <path d="M309.27083333333303,156.45833333333334C305.937833333333,162.50033333333334,312.187833333333,167.50033333333334,317.812833333333,164.16633333333334C326.77083333333303,159.16633333333334,325.52083333333303,144.16633333333334,328.853833333333,133.75033333333334L339.478833333333,133.75033333333334L331.353833333333,173.00033333333334L321.145833333333,173.00033333333334C321.353833333333,170.83333333333334,322.395833333333,168.54133333333334,322.18783333333295,167.08333333333334C315.72883333333294,178.00033333333334,294.47883333333294,175.62533333333334,297.81283333333295,159.58333333333334L303.22883333333294,133.75033333333334L313.85383333333294,133.75033333333334Z" fill="#ff0000" stroke="#ff0000" transform="" /> 13.12 + <path d="M349.2708333333335,153.54166666666669C337.81283333333346,146.04166666666669,348.6458333333335,130.41666666666669,361.56283333333346,132.7086666666667C370.93783333333346,132.49966666666668,377.3958333333335,135.62466666666668,377.3958333333335,144.99966666666668L367.6038333333335,144.99966666666668C367.6038333333335,141.4586666666667,365.3128333333335,140.2086666666667,361.5628333333335,139.79166666666669C357.1878333333335,139.37466666666668,353.02083333333354,142.49966666666668,356.14583333333354,145.8336666666667C363.02083333333354,149.79166666666669,375.52083333333354,149.37466666666668,375.52083333333354,160.41666666666669C375.52083333333354,177.49966666666668,340.9378333333335,178.54166666666669,340.52083333333354,161.4586666666667L340.52083333333354,159.99966666666668L350.3128333333335,159.99966666666668C350.1038333333335,164.79166666666669,353.8538333333335,165.8336666666667,358.02083333333354,166.4586666666667C364.47883333333357,167.49966666666668,367.39583333333354,159.5836666666667,360.9378333333335,157.49966666666668Z" fill="#ff0000" stroke="#ff0000" transform="" /> 13.13 + <path d="M400.52083333333326,172.70833333333331C391.3538333333333,174.58333333333331,381.9788333333332,173.00033333333332,384.27083333333326,161.6663333333333L388.64583333333326,140.83333333333331L381.56283333333323,140.83333333333331L383.2288333333332,133.75033333333332L390.1038333333332,133.75033333333332L392.3958333333332,121.87533333333332L403.2288333333332,121.87533333333332L400.7288333333332,133.75033333333332L408.43783333333323,133.75033333333332L406.77083333333326,140.83333333333331L399.27083333333326,140.83333333333331L394.89583333333326,161.87533333333332C394.68783333333323,165.4163333333333,399.06283333333323,165.00033333333332,402.39583333333326,164.58333333333331Z" fill="#ff0000" stroke="#ff0000" transform="" /> 13.14 + <path d="M436.7708333333337,144.58333333333334C436.7708333333337,137.08333333333334,422.3958333333337,138.95833333333334,421.97883333333374,145.41633333333334L412.18783333333374,145.41633333333334C413.43783333333374,136.25033333333334,420.31283333333374,132.91633333333334,430.5208333333337,132.70833333333334C441.35383333333374,132.50033333333334,448.6458333333337,137.29133333333334,445.72883333333374,149.37533333333334C443.85383333333374,156.87533333333334,441.56283333333374,164.79133333333334,442.18783333333374,172.50033333333334L431.56283333333374,172.50033333333334L431.56283333333374,168.75033333333334C425.72883333333374,176.04133333333334,406.97883333333374,175.20833333333334,406.97883333333374,163.33333333333334C406.97883333333374,150.62533333333334,421.56283333333374,150.20833333333334,433.0208333333337,148.75033333333334C435.3128333333337,147.91633333333334,436.7708333333337,147.29133333333334,436.7708333333337,144.58333333333334ZM434.6878333333337,153.95833333333334C429.4788333333337,157.50033333333334,417.6038333333337,153.33333333333334,417.8128333333337,162.08333333333334C417.8128333333337,168.12533333333334,428.2288333333337,167.08333333333334,430.5208333333337,163.54133333333334C433.0208333333337,161.25033333333334,433.6458333333337,158.00033333333334,434.6878333333337,153.95833333333334Z" fill="#ff0000" stroke="#ff0000" transform="" /> 13.15 + <path d="M471.3541666666665,132.70833333333331C477.6041666666665,132.50033333333332,481.1461666666665,135.4163333333333,483.43716666666654,139.58333333333331L484.4791666666665,133.75033333333332L494.68716666666654,133.75033333333332C491.14616666666655,148.33333333333331,489.4791666666665,164.7913333333333,484.4791666666665,178.12533333333332C479.8961666666665,190.4163333333333,448.8541666666665,191.25033333333332,449.0621666666665,174.58333333333331L459.6871666666665,174.58333333333331C459.6871666666665,181.6663333333333,471.35416666666646,181.0413333333333,473.85416666666646,176.25033333333332C475.10416666666646,173.5413333333333,477.1871666666665,169.7913333333333,477.39616666666643,166.45833333333331C469.47916666666646,177.2913333333333,450.52116666666643,170.83333333333331,451.77116666666643,156.0413333333333C452.8121666666664,143.12533333333332,458.4371666666664,133.5413333333333,471.3541666666664,132.70833333333331ZM480.93716666666654,149.1663333333333C480.93716666666654,144.1663333333333,478.2291666666665,140.62533333333332,473.2291666666665,140.62533333333332C462.3961666666665,140.62533333333332,457.1871666666665,163.95833333333331,469.68716666666654,163.95833333333331C477.39616666666655,163.95833333333331,480.52116666666655,157.08333333333331,480.93716666666654,149.1663333333333Z" fill="#ff0000" stroke="#ff0000" transform="" /> 13.16 + <path d="M515.5208333333335,127.70833333333334L504.68783333333346,127.70833333333334L506.56283333333346,118.95833333333334L517.3958333333335,118.95833333333334ZM503.43783333333346,133.75033333333334L514.2708333333335,133.75033333333334L505.93783333333346,172.50033333333334L495.31283333333346,172.50033333333334Z" fill="#ff0000" stroke="#ff0000" transform="" /> 13.17 + <rect fill="none" height="317" r="0" rx="0" ry="0" stroke="#0000ff" width="514" x="0.5" y="0.5" /> 13.18 +</svg>
14.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 14.2 +++ b/out.xml Sun Jan 24 09:37:47 2010 -0500 14.3 @@ -0,0 +1,15 @@ 14.4 +<svg> 14.5 + <path d="M30.9375,118.95833333333334L42.8125,118.95833333333334L38.2295,141.45833333333334L62.6045,118.95833333333334L78.2295,118.95833333333334L52.3955,141.04133333333334L68.8545,172.50033333333334L55.5205,172.50033333333334L43.4375,148.33333333333334L35.1045,155.62533333333334L31.5625,172.50033333333334L19.8955,172.50033333333334Z" fill="#ff0000" stroke="#ff0000" transform="" /> 14.6 + <path d="M104.06249999999994,148.95833333333334C105.31249999999994,138.54133333333334,90.72949999999994,138.75033333333334,87.60449999999994,145.83333333333334C86.97949999999994,146.87533333333334,86.56249999999994,147.91633333333334,86.14549999999994,148.95833333333334L104.06249999999994,148.95833333333334ZM96.14549999999994,132.70833333333334C109.68749999999994,132.29133333333334,116.56249999999994,141.87533333333334,113.64549999999994,155.62533333333334L85.10449999999994,155.62533333333334C84.47949999999994,162.08333333333334,87.60449999999994,165.62533333333334,93.64549999999994,165.62533333333334C97.81249999999994,165.41633333333334,99.68749999999994,162.70833333333334,101.56249999999994,160.20833333333334L112.18749999999994,160.20833333333334C109.06249999999994,168.54133333333334,103.43749999999994,173.75033333333334,91.97949999999994,173.54133333333334C80.93749999999994,173.54133333333334,74.89549999999994,168.00033333333334,74.89549999999994,156.66633333333334C74.89549999999994,142.91633333333334,82.18749999999994,133.12533333333334,96.14549999999994,132.70833333333334Z" fill="#ff0000" stroke="#ff0000" transform="" /> 14.7 + <path d="M136.56249999999994,173.5L124.27049999999994,173.5L119.27049999999994,133.75L130.10449999999994,133.75L132.81249999999994,161.25L146.35449999999994,133.75L157.60449999999994,133.75Z" fill="#ff0000" stroke="#ff0000" transform="" /> 14.8 + <path d="M175.10416666666674,127.70833333333334L164.27116666666674,127.70833333333334L166.14616666666674,118.95833333333334L176.97916666666674,118.95833333333334ZM163.02116666666674,133.75033333333334L173.85416666666674,133.75033333333334L165.52116666666674,172.50033333333334L154.89616666666674,172.50033333333334Z" fill="#ff0000" stroke="#ff0000" transform="" /> 14.9 + <path d="M204.47916666666652,149.79166666666669C208.22916666666652,141.04166666666669,196.97916666666652,138.3336666666667,192.60416666666652,144.37466666666668C187.39616666666652,151.24966666666668,187.60416666666652,163.12466666666668,184.89616666666652,172.49966666666668L174.27116666666652,172.49966666666668L182.39616666666652,133.74966666666668L192.60416666666652,133.74966666666668L191.35416666666652,139.16666666666669C198.02116666666652,128.54166666666669,219.0621666666665,131.04166666666669,215.9371666666665,146.4586666666667L210.52116666666652,172.49966666666668L199.6871666666665,172.49966666666668Z" fill="#ff0000" stroke="#ff0000" transform="" /> 14.10 + <path d="M282.1875000000002,134.79166666666663C282.6045000000002,125.41666666666663,270.7295000000002,128.74966666666663,262.3955000000002,128.12466666666663L259.2705000000002,143.12466666666663C269.4795000000002,142.91666666666663,281.7705000000002,144.99966666666663,282.1875000000002,134.79166666666663ZM276.14550000000025,172.49966666666663C274.47950000000026,163.33366666666663,280.3125000000002,150.83366666666663,268.64550000000025,151.66666666666663L257.39550000000025,151.66666666666663L253.02050000000025,172.49966666666663L241.35450000000026,172.49966666666663L252.60450000000026,118.95866666666663C270.10450000000026,119.99966666666663,294.89550000000025,113.54166666666663,294.0625000000002,132.91666666666663C293.64550000000025,141.45866666666663,288.64550000000025,145.62466666666663,281.77050000000025,147.49966666666663C290.52050000000025,149.99966666666663,285.72950000000026,163.33366666666663,287.60450000000026,172.49966666666663L276.14550000000025,172.49966666666663Z" fill="#ff0000" stroke="#ff0000" transform="" /> 14.11 + <path d="M309.27083333333303,156.45833333333334C305.937833333333,162.50033333333334,312.187833333333,167.50033333333334,317.812833333333,164.16633333333334C326.77083333333303,159.16633333333334,325.52083333333303,144.16633333333334,328.853833333333,133.75033333333334L339.478833333333,133.75033333333334L331.353833333333,173.00033333333334L321.145833333333,173.00033333333334C321.353833333333,170.83333333333334,322.395833333333,168.54133333333334,322.18783333333295,167.08333333333334C315.72883333333294,178.00033333333334,294.47883333333294,175.62533333333334,297.81283333333295,159.58333333333334L303.22883333333294,133.75033333333334L313.85383333333294,133.75033333333334Z" fill="#ff0000" stroke="#ff0000" transform="" /> 14.12 + <path d="M349.2708333333335,153.54166666666669C337.81283333333346,146.04166666666669,348.6458333333335,130.41666666666669,361.56283333333346,132.7086666666667C370.93783333333346,132.49966666666668,377.3958333333335,135.62466666666668,377.3958333333335,144.99966666666668L367.6038333333335,144.99966666666668C367.6038333333335,141.4586666666667,365.3128333333335,140.2086666666667,361.5628333333335,139.79166666666669C357.1878333333335,139.37466666666668,353.02083333333354,142.49966666666668,356.14583333333354,145.8336666666667C363.02083333333354,149.79166666666669,375.52083333333354,149.37466666666668,375.52083333333354,160.41666666666669C375.52083333333354,177.49966666666668,340.9378333333335,178.54166666666669,340.52083333333354,161.4586666666667L340.52083333333354,159.99966666666668L350.3128333333335,159.99966666666668C350.1038333333335,164.79166666666669,353.8538333333335,165.8336666666667,358.02083333333354,166.4586666666667C364.47883333333357,167.49966666666668,367.39583333333354,159.5836666666667,360.9378333333335,157.49966666666668Z" fill="#ff0000" stroke="#ff0000" transform="" /> 14.13 + <path d="M400.52083333333326,172.70833333333331C391.3538333333333,174.58333333333331,381.9788333333332,173.00033333333332,384.27083333333326,161.6663333333333L388.64583333333326,140.83333333333331L381.56283333333323,140.83333333333331L383.2288333333332,133.75033333333332L390.1038333333332,133.75033333333332L392.3958333333332,121.87533333333332L403.2288333333332,121.87533333333332L400.7288333333332,133.75033333333332L408.43783333333323,133.75033333333332L406.77083333333326,140.83333333333331L399.27083333333326,140.83333333333331L394.89583333333326,161.87533333333332C394.68783333333323,165.4163333333333,399.06283333333323,165.00033333333332,402.39583333333326,164.58333333333331Z" fill="#ff0000" stroke="#ff0000" transform="" /> 14.14 + <path d="M436.7708333333337,144.58333333333334C436.7708333333337,137.08333333333334,422.3958333333337,138.95833333333334,421.97883333333374,145.41633333333334L412.18783333333374,145.41633333333334C413.43783333333374,136.25033333333334,420.31283333333374,132.91633333333334,430.5208333333337,132.70833333333334C441.35383333333374,132.50033333333334,448.6458333333337,137.29133333333334,445.72883333333374,149.37533333333334C443.85383333333374,156.87533333333334,441.56283333333374,164.79133333333334,442.18783333333374,172.50033333333334L431.56283333333374,172.50033333333334L431.56283333333374,168.75033333333334C425.72883333333374,176.04133333333334,406.97883333333374,175.20833333333334,406.97883333333374,163.33333333333334C406.97883333333374,150.62533333333334,421.56283333333374,150.20833333333334,433.0208333333337,148.75033333333334C435.3128333333337,147.91633333333334,436.7708333333337,147.29133333333334,436.7708333333337,144.58333333333334ZM434.6878333333337,153.95833333333334C429.4788333333337,157.50033333333334,417.6038333333337,153.33333333333334,417.8128333333337,162.08333333333334C417.8128333333337,168.12533333333334,428.2288333333337,167.08333333333334,430.5208333333337,163.54133333333334C433.0208333333337,161.25033333333334,433.6458333333337,158.00033333333334,434.6878333333337,153.95833333333334Z" fill="#ff0000" stroke="#ff0000" transform="" /> 14.15 + <path d="M471.3541666666665,132.70833333333331C477.6041666666665,132.50033333333332,481.1461666666665,135.4163333333333,483.43716666666654,139.58333333333331L484.4791666666665,133.75033333333332L494.68716666666654,133.75033333333332C491.14616666666655,148.33333333333331,489.4791666666665,164.7913333333333,484.4791666666665,178.12533333333332C479.8961666666665,190.4163333333333,448.8541666666665,191.25033333333332,449.0621666666665,174.58333333333331L459.6871666666665,174.58333333333331C459.6871666666665,181.6663333333333,471.35416666666646,181.0413333333333,473.85416666666646,176.25033333333332C475.10416666666646,173.5413333333333,477.1871666666665,169.7913333333333,477.39616666666643,166.45833333333331C469.47916666666646,177.2913333333333,450.52116666666643,170.83333333333331,451.77116666666643,156.0413333333333C452.8121666666664,143.12533333333332,458.4371666666664,133.5413333333333,471.3541666666664,132.70833333333331ZM480.93716666666654,149.1663333333333C480.93716666666654,144.1663333333333,478.2291666666665,140.62533333333332,473.2291666666665,140.62533333333332C462.3961666666665,140.62533333333332,457.1871666666665,163.95833333333331,469.68716666666654,163.95833333333331C477.39616666666655,163.95833333333331,480.52116666666655,157.08333333333331,480.93716666666654,149.1663333333333Z" fill="#ff0000" stroke="#ff0000" transform="" /> 14.16 + <path d="M515.5208333333335,127.70833333333334L504.68783333333346,127.70833333333334L506.56283333333346,118.95833333333334L517.3958333333335,118.95833333333334ZM503.43783333333346,133.75033333333334L514.2708333333335,133.75033333333334L505.93783333333346,172.50033333333334L495.31283333333346,172.50033333333334Z" fill="#ff0000" stroke="#ff0000" transform="" /> 14.17 + <rect fill="none" height="317" r="0" rx="0" ry="0" stroke="#0000ff" width="514" x="0.5" y="0.5" /> 14.18 +</svg>
15.1 --- a/paypal/basic_acrylic_clear.paylist Mon Jan 18 15:52:33 2010 -0500 15.2 +++ b/paypal/basic_acrylic_clear.paylist Sun Jan 24 09:37:47 2010 -0500 15.3 @@ -107,7 +107,7 @@ 15.4 onKeyUp=" 15.5 tt.remove(); 15.6 15.7 -var font_size = 65; 15.8 +var font_size = 30; 15.9 15.10 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 15.11 tt.attr('stroke', '#f00'); 15.12 @@ -137,7 +137,7 @@ 15.13 onKeyUp=" 15.14 tt.remove(); 15.15 15.16 -var font_size = 65; 15.17 +var font_size = 30; 15.18 15.19 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 15.20 tt.attr('stroke', '#f00'); 15.21 @@ -167,7 +167,7 @@ 15.22 onKeyUp=" 15.23 tt.remove(); 15.24 15.25 -var font_size = 65; 15.26 +var font_size = 30; 15.27 15.28 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 15.29 tt.attr('stroke', '#f00'); 15.30 @@ -197,7 +197,7 @@ 15.31 onKeyUp=" 15.32 tt.remove(); 15.33 15.34 -var font_size = 65; 15.35 +var font_size = 30; 15.36 15.37 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 15.38 tt.attr('stroke', '#f00');
16.1 --- a/paypal/basic_acrylic_green.paylist Mon Jan 18 15:52:33 2010 -0500 16.2 +++ b/paypal/basic_acrylic_green.paylist Sun Jan 24 09:37:47 2010 -0500 16.3 @@ -107,7 +107,7 @@ 16.4 onKeyUp=" 16.5 tt.remove(); 16.6 16.7 -var font_size = 65; 16.8 +var font_size = 30; 16.9 16.10 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 16.11 tt.attr('stroke', '#f00'); 16.12 @@ -137,7 +137,7 @@ 16.13 onKeyUp=" 16.14 tt.remove(); 16.15 16.16 -var font_size = 65; 16.17 +var font_size = 30; 16.18 16.19 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 16.20 tt.attr('stroke', '#f00'); 16.21 @@ -167,7 +167,7 @@ 16.22 onKeyUp=" 16.23 tt.remove(); 16.24 16.25 -var font_size = 65; 16.26 +var font_size = 30; 16.27 16.28 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 16.29 tt.attr('stroke', '#f00'); 16.30 @@ -197,7 +197,7 @@ 16.31 onKeyUp=" 16.32 tt.remove(); 16.33 16.34 -var font_size = 65; 16.35 +var font_size = 30; 16.36 16.37 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 16.38 tt.attr('stroke', '#f00');
17.1 --- a/paypal/big_acrylic_clear.paylist Mon Jan 18 15:52:33 2010 -0500 17.2 +++ b/paypal/big_acrylic_clear.paylist Sun Jan 24 09:37:47 2010 -0500 17.3 @@ -107,7 +107,7 @@ 17.4 onKeyUp=" 17.5 tt.remove(); 17.6 17.7 -var font_size = 65; 17.8 +var font_size = 30; 17.9 17.10 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 17.11 tt.attr('stroke', '#f00'); 17.12 @@ -137,7 +137,7 @@ 17.13 onKeyUp=" 17.14 tt.remove(); 17.15 17.16 -var font_size = 65; 17.17 +var font_size = 30; 17.18 17.19 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 17.20 tt.attr('stroke', '#f00');
18.1 --- a/paypal/big_acrylic_green.paylist Mon Jan 18 15:52:33 2010 -0500 18.2 +++ b/paypal/big_acrylic_green.paylist Sun Jan 24 09:37:47 2010 -0500 18.3 @@ -107,7 +107,7 @@ 18.4 onKeyUp=" 18.5 tt.remove(); 18.6 18.7 -var font_size = 65; 18.8 +var font_size = 30; 18.9 18.10 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 18.11 tt.attr('stroke', '#f00'); 18.12 @@ -137,7 +137,7 @@ 18.13 onKeyUp=" 18.14 tt.remove(); 18.15 18.16 -var font_size = 65; 18.17 +var font_size = 30; 18.18 18.19 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 18.20 tt.attr('stroke', '#f00');
19.1 --- a/paypal/classic_acrylic_clear.paylist Mon Jan 18 15:52:33 2010 -0500 19.2 +++ b/paypal/classic_acrylic_clear.paylist Sun Jan 24 09:37:47 2010 -0500 19.3 @@ -107,7 +107,7 @@ 19.4 onKeyUp=" 19.5 tt.remove(); 19.6 19.7 -var font_size = 65; 19.8 +var font_size = 30; 19.9 19.10 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 19.11 tt.attr('stroke', '#f00'); 19.12 @@ -137,7 +137,7 @@ 19.13 onKeyUp=" 19.14 tt.remove(); 19.15 19.16 -var font_size = 65; 19.17 +var font_size = 30; 19.18 19.19 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 19.20 tt.attr('stroke', '#f00'); 19.21 @@ -167,7 +167,7 @@ 19.22 onKeyUp=" 19.23 tt.remove(); 19.24 19.25 -var font_size = 65; 19.26 +var font_size = 30; 19.27 19.28 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 19.29 tt.attr('stroke', '#f00'); 19.30 @@ -197,7 +197,7 @@ 19.31 onKeyUp=" 19.32 tt.remove(); 19.33 19.34 -var font_size = 65; 19.35 +var font_size = 30; 19.36 19.37 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 19.38 tt.attr('stroke', '#f00'); 19.39 @@ -227,7 +227,7 @@ 19.40 onKeyUp=" 19.41 tt.remove(); 19.42 19.43 -var font_size = 65; 19.44 +var font_size = 30; 19.45 19.46 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 19.47 tt.attr('stroke', '#f00'); 19.48 @@ -257,7 +257,7 @@ 19.49 onKeyUp=" 19.50 tt.remove(); 19.51 19.52 -var font_size = 65; 19.53 +var font_size = 30; 19.54 19.55 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 19.56 tt.attr('stroke', '#f00');
20.1 --- a/paypal/classic_acrylic_green.paylist Mon Jan 18 15:52:33 2010 -0500 20.2 +++ b/paypal/classic_acrylic_green.paylist Sun Jan 24 09:37:47 2010 -0500 20.3 @@ -107,7 +107,7 @@ 20.4 onKeyUp=" 20.5 tt.remove(); 20.6 20.7 -var font_size = 65; 20.8 +var font_size = 30; 20.9 20.10 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 20.11 tt.attr('stroke', '#f00'); 20.12 @@ -137,7 +137,7 @@ 20.13 onKeyUp=" 20.14 tt.remove(); 20.15 20.16 -var font_size = 65; 20.17 +var font_size = 30; 20.18 20.19 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 20.20 tt.attr('stroke', '#f00'); 20.21 @@ -167,7 +167,7 @@ 20.22 onKeyUp=" 20.23 tt.remove(); 20.24 20.25 -var font_size = 65; 20.26 +var font_size = 30; 20.27 20.28 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 20.29 tt.attr('stroke', '#f00'); 20.30 @@ -197,7 +197,7 @@ 20.31 onKeyUp=" 20.32 tt.remove(); 20.33 20.34 -var font_size = 65; 20.35 +var font_size = 30; 20.36 20.37 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 20.38 tt.attr('stroke', '#f00'); 20.39 @@ -227,7 +227,7 @@ 20.40 onKeyUp=" 20.41 tt.remove(); 20.42 20.43 -var font_size = 65; 20.44 +var font_size = 30; 20.45 20.46 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 20.47 tt.attr('stroke', '#f00'); 20.48 @@ -257,7 +257,7 @@ 20.49 onKeyUp=" 20.50 tt.remove(); 20.51 20.52 -var font_size = 65; 20.53 +var font_size = 30; 20.54 20.55 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 20.56 tt.attr('stroke', '#f00');
21.1 --- a/paypal/generate_paylists.pm Mon Jan 18 15:52:33 2010 -0500 21.2 +++ b/paypal/generate_paylists.pm Sun Jan 24 09:37:47 2010 -0500 21.3 @@ -139,7 +139,7 @@ 21.4 onKeyUp=" 21.5 tt.remove(); 21.6 21.7 -var font_size = 65; 21.8 +var font_size = 30; 21.9 21.10 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 21.11 tt.attr('stroke', '#f00');
22.1 --- a/paypal/lines_acrylic_clear.paylist Mon Jan 18 15:52:33 2010 -0500 22.2 +++ b/paypal/lines_acrylic_clear.paylist Sun Jan 24 09:37:47 2010 -0500 22.3 @@ -107,7 +107,7 @@ 22.4 onKeyUp=" 22.5 tt.remove(); 22.6 22.7 -var font_size = 65; 22.8 +var font_size = 30; 22.9 22.10 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 22.11 tt.attr('stroke', '#f00'); 22.12 @@ -137,7 +137,7 @@ 22.13 onKeyUp=" 22.14 tt.remove(); 22.15 22.16 -var font_size = 65; 22.17 +var font_size = 30; 22.18 22.19 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 22.20 tt.attr('stroke', '#f00'); 22.21 @@ -167,7 +167,7 @@ 22.22 onKeyUp=" 22.23 tt.remove(); 22.24 22.25 -var font_size = 65; 22.26 +var font_size = 30; 22.27 22.28 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 22.29 tt.attr('stroke', '#f00'); 22.30 @@ -197,7 +197,7 @@ 22.31 onKeyUp=" 22.32 tt.remove(); 22.33 22.34 -var font_size = 65; 22.35 +var font_size = 30; 22.36 22.37 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 22.38 tt.attr('stroke', '#f00'); 22.39 @@ -227,7 +227,7 @@ 22.40 onKeyUp=" 22.41 tt.remove(); 22.42 22.43 -var font_size = 65; 22.44 +var font_size = 30; 22.45 22.46 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 22.47 tt.attr('stroke', '#f00'); 22.48 @@ -257,7 +257,7 @@ 22.49 onKeyUp=" 22.50 tt.remove(); 22.51 22.52 -var font_size = 65; 22.53 +var font_size = 30; 22.54 22.55 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 22.56 tt.attr('stroke', '#f00');
23.1 --- a/paypal/lines_acrylic_green.paylist Mon Jan 18 15:52:33 2010 -0500 23.2 +++ b/paypal/lines_acrylic_green.paylist Sun Jan 24 09:37:47 2010 -0500 23.3 @@ -107,7 +107,7 @@ 23.4 onKeyUp=" 23.5 tt.remove(); 23.6 23.7 -var font_size = 65; 23.8 +var font_size = 30; 23.9 23.10 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 23.11 tt.attr('stroke', '#f00'); 23.12 @@ -137,7 +137,7 @@ 23.13 onKeyUp=" 23.14 tt.remove(); 23.15 23.16 -var font_size = 65; 23.17 +var font_size = 30; 23.18 23.19 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 23.20 tt.attr('stroke', '#f00'); 23.21 @@ -167,7 +167,7 @@ 23.22 onKeyUp=" 23.23 tt.remove(); 23.24 23.25 -var font_size = 65; 23.26 +var font_size = 30; 23.27 23.28 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 23.29 tt.attr('stroke', '#f00'); 23.30 @@ -197,7 +197,7 @@ 23.31 onKeyUp=" 23.32 tt.remove(); 23.33 23.34 -var font_size = 65; 23.35 +var font_size = 30; 23.36 23.37 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 23.38 tt.attr('stroke', '#f00'); 23.39 @@ -227,7 +227,7 @@ 23.40 onKeyUp=" 23.41 tt.remove(); 23.42 23.43 -var font_size = 65; 23.44 +var font_size = 30; 23.45 23.46 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 23.47 tt.attr('stroke', '#f00'); 23.48 @@ -257,7 +257,7 @@ 23.49 onKeyUp=" 23.50 tt.remove(); 23.51 23.52 -var font_size = 65; 23.53 +var font_size = 30; 23.54 23.55 tt = raphe.print(0, 145, value, raphe.getFont('HelveticaNeue', 700), font_size); 23.56 tt.attr('stroke', '#f00');
24.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 24.2 +++ b/svgparsetest.pl Sun Jan 24 09:37:47 2010 -0500 24.3 @@ -0,0 +1,69 @@ 24.4 +#!/usr/bin/perl 24.5 + 24.6 +# use module 24.7 +use XML::Simple; 24.8 +use Data::Dumper; 24.9 +$xml = new XML::Simple; 24.10 + 24.11 + 24.12 +$sss = <<HERE; 24.13 + 24.14 +<svg height="318" width="515" version="1.1" xmlns="http://www.w3.org/2000/svg"> 24.15 +<desc>Created with Raphaƫl</desc> 24.16 +<defs></defs> 24.17 +<rect stroke="#0000ff" fill="none" ry="0" rx="0" r="0" height="317" width="514" y="0.5" x="0.5"></rect> 24.18 +<path transform="" d="M30.9375,118.95833333333334L42.8125,118.95833333333334L38.2295,141.45833333333334L62.6045,118.95833333333334L78.2295,118.95833333333334L52.3955,141.04133333333334L68.8545,172.50033333333334L55.5205,172.50033333333334L43.4375,148.33333333333334L35.1045,155.62533333333334L31.5625,172.50033333333334L19.8955,172.50033333333334Z" stroke="#ff0000" fill="#ff0000"></path> 24.19 +<path transform="" d="M104.06249999999994,148.95833333333334C105.31249999999994,138.54133333333334,90.72949999999994,138.75033333333334,87.60449999999994,145.83333333333334C86.97949999999994,146.87533333333334,86.56249999999994,147.91633333333334,86.14549999999994,148.95833333333334L104.06249999999994,148.95833333333334ZM96.14549999999994,132.70833333333334C109.68749999999994,132.29133333333334,116.56249999999994,141.87533333333334,113.64549999999994,155.62533333333334L85.10449999999994,155.62533333333334C84.47949999999994,162.08333333333334,87.60449999999994,165.62533333333334,93.64549999999994,165.62533333333334C97.81249999999994,165.41633333333334,99.68749999999994,162.70833333333334,101.56249999999994,160.20833333333334L112.18749999999994,160.20833333333334C109.06249999999994,168.54133333333334,103.43749999999994,173.75033333333334,91.97949999999994,173.54133333333334C80.93749999999994,173.54133333333334,74.89549999999994,168.00033333333334,74.89549999999994,156.66633333333334C74.89549999999994,142.91633333333334,82.18749999999994,133.12533333333334,96.14549999999994,132.70833333333334Z" stroke="#ff0000" fill="#ff0000"></path> 24.20 +<path transform="" d="M136.56249999999994,173.5L124.27049999999994,173.5L119.27049999999994,133.75L130.10449999999994,133.75L132.81249999999994,161.25L146.35449999999994,133.75L157.60449999999994,133.75Z" stroke="#ff0000" fill="#ff0000"></path> 24.21 +<path transform="" d="M175.10416666666674,127.70833333333334L164.27116666666674,127.70833333333334L166.14616666666674,118.95833333333334L176.97916666666674,118.95833333333334ZM163.02116666666674,133.75033333333334L173.85416666666674,133.75033333333334L165.52116666666674,172.50033333333334L154.89616666666674,172.50033333333334Z" stroke="#ff0000" fill="#ff0000"></path> 24.22 +<path transform="" d="M204.47916666666652,149.79166666666669C208.22916666666652,141.04166666666669,196.97916666666652,138.3336666666667,192.60416666666652,144.37466666666668C187.39616666666652,151.24966666666668,187.60416666666652,163.12466666666668,184.89616666666652,172.49966666666668L174.27116666666652,172.49966666666668L182.39616666666652,133.74966666666668L192.60416666666652,133.74966666666668L191.35416666666652,139.16666666666669C198.02116666666652,128.54166666666669,219.0621666666665,131.04166666666669,215.9371666666665,146.4586666666667L210.52116666666652,172.49966666666668L199.6871666666665,172.49966666666668Z" stroke="#ff0000" fill="#ff0000"></path> 24.23 +<path transform="" d="M282.1875000000002,134.79166666666663C282.6045000000002,125.41666666666663,270.7295000000002,128.74966666666663,262.3955000000002,128.12466666666663L259.2705000000002,143.12466666666663C269.4795000000002,142.91666666666663,281.7705000000002,144.99966666666663,282.1875000000002,134.79166666666663ZM276.14550000000025,172.49966666666663C274.47950000000026,163.33366666666663,280.3125000000002,150.83366666666663,268.64550000000025,151.66666666666663L257.39550000000025,151.66666666666663L253.02050000000025,172.49966666666663L241.35450000000026,172.49966666666663L252.60450000000026,118.95866666666663C270.10450000000026,119.99966666666663,294.89550000000025,113.54166666666663,294.0625000000002,132.91666666666663C293.64550000000025,141.45866666666663,288.64550000000025,145.62466666666663,281.77050000000025,147.49966666666663C290.52050000000025,149.99966666666663,285.72950000000026,163.33366666666663,287.60450000000026,172.49966666666663L276.14550000000025,172.49966666666663Z" stroke="#ff0000" fill="#ff0000"></path> 24.24 +<path transform="" d="M309.27083333333303,156.45833333333334C305.937833333333,162.50033333333334,312.187833333333,167.50033333333334,317.812833333333,164.16633333333334C326.77083333333303,159.16633333333334,325.52083333333303,144.16633333333334,328.853833333333,133.75033333333334L339.478833333333,133.75033333333334L331.353833333333,173.00033333333334L321.145833333333,173.00033333333334C321.353833333333,170.83333333333334,322.395833333333,168.54133333333334,322.18783333333295,167.08333333333334C315.72883333333294,178.00033333333334,294.47883333333294,175.62533333333334,297.81283333333295,159.58333333333334L303.22883333333294,133.75033333333334L313.85383333333294,133.75033333333334Z" stroke="#ff0000" fill="#ff0000"></path> 24.25 +<path transform="" d="M349.2708333333335,153.54166666666669C337.81283333333346,146.04166666666669,348.6458333333335,130.41666666666669,361.56283333333346,132.7086666666667C370.93783333333346,132.49966666666668,377.3958333333335,135.62466666666668,377.3958333333335,144.99966666666668L367.6038333333335,144.99966666666668C367.6038333333335,141.4586666666667,365.3128333333335,140.2086666666667,361.5628333333335,139.79166666666669C357.1878333333335,139.37466666666668,353.02083333333354,142.49966666666668,356.14583333333354,145.8336666666667C363.02083333333354,149.79166666666669,375.52083333333354,149.37466666666668,375.52083333333354,160.41666666666669C375.52083333333354,177.49966666666668,340.9378333333335,178.54166666666669,340.52083333333354,161.4586666666667L340.52083333333354,159.99966666666668L350.3128333333335,159.99966666666668C350.1038333333335,164.79166666666669,353.8538333333335,165.8336666666667,358.02083333333354,166.4586666666667C364.47883333333357,167.49966666666668,367.39583333333354,159.5836666666667,360.9378333333335,157.49966666666668Z" stroke="#ff0000" fill="#ff0000"></path> 24.26 +<path transform="" d="M400.52083333333326,172.70833333333331C391.3538333333333,174.58333333333331,381.9788333333332,173.00033333333332,384.27083333333326,161.6663333333333L388.64583333333326,140.83333333333331L381.56283333333323,140.83333333333331L383.2288333333332,133.75033333333332L390.1038333333332,133.75033333333332L392.3958333333332,121.87533333333332L403.2288333333332,121.87533333333332L400.7288333333332,133.75033333333332L408.43783333333323,133.75033333333332L406.77083333333326,140.83333333333331L399.27083333333326,140.83333333333331L394.89583333333326,161.87533333333332C394.68783333333323,165.4163333333333,399.06283333333323,165.00033333333332,402.39583333333326,164.58333333333331Z" stroke="#ff0000" fill="#ff0000"></path> 24.27 +<path transform="" d="M436.7708333333337,144.58333333333334C436.7708333333337,137.08333333333334,422.3958333333337,138.95833333333334,421.97883333333374,145.41633333333334L412.18783333333374,145.41633333333334C413.43783333333374,136.25033333333334,420.31283333333374,132.91633333333334,430.5208333333337,132.70833333333334C441.35383333333374,132.50033333333334,448.6458333333337,137.29133333333334,445.72883333333374,149.37533333333334C443.85383333333374,156.87533333333334,441.56283333333374,164.79133333333334,442.18783333333374,172.50033333333334L431.56283333333374,172.50033333333334L431.56283333333374,168.75033333333334C425.72883333333374,176.04133333333334,406.97883333333374,175.20833333333334,406.97883333333374,163.33333333333334C406.97883333333374,150.62533333333334,421.56283333333374,150.20833333333334,433.0208333333337,148.75033333333334C435.3128333333337,147.91633333333334,436.7708333333337,147.29133333333334,436.7708333333337,144.58333333333334ZM434.6878333333337,153.95833333333334C429.4788333333337,157.50033333333334,417.6038333333337,153.33333333333334,417.8128333333337,162.08333333333334C417.8128333333337,168.12533333333334,428.2288333333337,167.08333333333334,430.5208333333337,163.54133333333334C433.0208333333337,161.25033333333334,433.6458333333337,158.00033333333334,434.6878333333337,153.95833333333334Z" stroke="#ff0000" fill="#ff0000"></path> 24.28 +<path transform="" d="M471.3541666666665,132.70833333333331C477.6041666666665,132.50033333333332,481.1461666666665,135.4163333333333,483.43716666666654,139.58333333333331L484.4791666666665,133.75033333333332L494.68716666666654,133.75033333333332C491.14616666666655,148.33333333333331,489.4791666666665,164.7913333333333,484.4791666666665,178.12533333333332C479.8961666666665,190.4163333333333,448.8541666666665,191.25033333333332,449.0621666666665,174.58333333333331L459.6871666666665,174.58333333333331C459.6871666666665,181.6663333333333,471.35416666666646,181.0413333333333,473.85416666666646,176.25033333333332C475.10416666666646,173.5413333333333,477.1871666666665,169.7913333333333,477.39616666666643,166.45833333333331C469.47916666666646,177.2913333333333,450.52116666666643,170.83333333333331,451.77116666666643,156.0413333333333C452.8121666666664,143.12533333333332,458.4371666666664,133.5413333333333,471.3541666666664,132.70833333333331ZM480.93716666666654,149.1663333333333C480.93716666666654,144.1663333333333,478.2291666666665,140.62533333333332,473.2291666666665,140.62533333333332C462.3961666666665,140.62533333333332,457.1871666666665,163.95833333333331,469.68716666666654,163.95833333333331C477.39616666666655,163.95833333333331,480.52116666666655,157.08333333333331,480.93716666666654,149.1663333333333Z" stroke="#ff0000" fill="#ff0000"></path> 24.29 +<path transform="" d="M515.5208333333335,127.70833333333334L504.68783333333346,127.70833333333334L506.56283333333346,118.95833333333334L517.3958333333335,118.95833333333334ZM503.43783333333346,133.75033333333334L514.2708333333335,133.75033333333334L505.93783333333346,172.50033333333334L495.31283333333346,172.50033333333334Z" stroke="#ff0000" fill="#ff0000"></path> 24.30 +</svg> 24.31 + 24.32 + 24.33 + 24.34 + 24.35 +HERE 24.36 + 24.37 + 24.38 +# read XML file 24.39 +$data = $xml->XMLin($sss, ForceArray => 1); 24.40 + 24.41 + 24.42 +my %data = %$data; 24.43 + 24.44 +my %juzz = 24.45 +( 24.46 + 24.47 +path => $data{'path'}, 24.48 +rect => $data{'rect'}, 24.49 +width =>"16in" , 24.50 +height =>"12in" , 24.51 +version =>"1.1", 24.52 +xmlns =>"http://www.w3.org/2000/svg" 24.53 + 24.54 +); 24.55 + 24.56 + 24.57 +$out = $xml->XMLout(\%juzz , RootName=>'svg'); 24.58 + 24.59 + 24.60 +my $fixed = <<HERE; 24.61 +<?xml version="1.0" standalone="no"?> 24.62 +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 24.63 + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 24.64 +HERE 24.65 + 24.66 + 24.67 + 24.68 +$fixed .= $out; 24.69 + 24.70 +print $fixed; 24.71 + 24.72 +
25.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 25.2 +++ b/test.html Sun Jan 24 09:37:47 2010 -0500 25.3 @@ -0,0 +1,74 @@ 25.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 25.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 25.6 +<head> 25.7 +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 25.8 + 25.9 + 25.10 +<link href="./echo.css" rel="stylesheet" type="text/css"> 25.11 + 25.12 +<title>Laserkard | Design Studio</title> 25.13 + 25.14 +<script type="text/javascript" src="./buycode.js"></script> 25.15 +<script type="text/javascript" src="./awesome_js/raphael.js"></script> 25.16 + 25.17 + 25.18 +<script type="text/javascript" src="./awesome_js/cufon-yui.js"></script> 25.19 +<script type="text/javascript" src="./awesome_js/HelveticaNeue_LT_55_Roman_700-HelveticaNeue_LT_55_Roman_700-HelveticaNeue_LT_55_Roman_italic_700-HelveticaNeue_LT_55_Roman_italic_700.font.js"></script> 25.20 + 25.21 + 25.22 + 25.23 + 25.24 + 25.25 +</head> 25.26 + 25.27 +<body id = "buy"> 25.28 + 25.29 + 25.30 +<div id = "disp_contain"></div> 25.31 + 25.32 +<div id = "output"></div> 25.33 + 25.34 +<div id = "perlClick" onmouseover = "echo(['output'], ['perlClick']);">click on me!!!</div> 25.35 + 25.36 + 25.37 +<script language="javascript"> 25.38 + 25.39 + 25.40 + 25.41 +var raphe = Raphael("disp_contain", 515, 318); 25.42 + 25.43 +var c = raphe.rect(0, 0, 514, 317); 25.44 +c.attr("stroke", "#00f"); 25.45 +tt = raphe.print(10, 150, "Kevin Rustagi", raphe.getFont("HelveticaNeue", 800), 75); 25.46 + 25.47 + 25.48 +tt.attr("stroke", "#f00"); 25.49 +tt.attr("fill", "RED"); 25.50 + 25.51 + 25.52 +var svg = 25.53 + 25.54 +//'<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">' + 25.55 +//'<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" ' + 25.56 +//document.getElementById('disp_contain').innerHTML + 25.57 +'<h1> jdaksljd </h1>' + 'sdfjlskjflskajf skds a dksjflk' 25.58 + 25.59 +; 25.60 + 25.61 + 25.62 + 25.63 +document.getElementById('output').innerHTML = svg; 25.64 + 25.65 +</script> 25.66 + 25.67 + 25.68 + 25.69 + 25.70 + 25.71 + 25.72 + 25.73 +</body> 25.74 + 25.75 +</html> 25.76 + 25.77 +