summaryrefslogtreecommitdiff
path: root/devel-utf8/itjs/it.js
diff options
context:
space:
mode:
Diffstat (limited to 'devel-utf8/itjs/it.js')
-rw-r--r--devel-utf8/itjs/it.js297
1 files changed, 297 insertions, 0 deletions
diff --git a/devel-utf8/itjs/it.js b/devel-utf8/itjs/it.js
new file mode 100644
index 0000000..54fa5c7
--- /dev/null
+++ b/devel-utf8/itjs/it.js
@@ -0,0 +1,297 @@
+// $Id$
+
+/**
+ * Clear contents of element 'jsdebug'
+ */
+function CED(txt)
+{
+ var element = document.getElementById('jsdebug');
+ if (element)
+ element.innerHTML = txt ? txt : "";
+}
+
+/**
+ * Return string with dump of all arguments
+ */
+function D()
+{
+ var text = "";
+ for (var i = 0; i < arguments.length; i++)
+ {
+ var variable = arguments[i];
+
+ if (typeof variable == "string")
+ variable = variable.replace(/&/g, '&amp;').replace(new RegExp("<", "g"), '&lt;');
+
+ text += (typeof variable) + " " + variable;
+
+ if (typeof variable == "object")
+ {
+ text += ":";
+
+ for (field in variable)
+ {
+ text += field + "=";
+
+ try { text += typeof variable[field] == 'function' ? 'function' : variable[field]; }
+ catch (e) { text += "*" + e + "*"; }
+
+ text += "\n";
+ }
+ text += "\n";
+ }
+
+ text += "\n";
+ }
+ return text;
+}
+
+/**
+ * Add debugging output to element 'jsdebug'
+ */
+function ED()
+{
+ var element;
+
+ if (!(element = document.getElementById('jsdebug')))
+ return; // var element = it_create_element(document.body, 'div', {id:'jsdebug', style:{position:'absolute', left:'100px', top:'10px', opacity:'0.8'}})
+
+ element.innerHTML += '<pre style="background-color:#FEE; margin:0">' + D.apply(this, arguments) + '<' + '/pre>';
+}
+
+/**
+ * Quote HTML special chars
+ * @return Text string with & " < > htmlentities-encoded
+ */
+function Q(value)
+{
+ return typeof value == "undefined" ? "" : value.toString().replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(new RegExp("<", "g"), '&lt;').replace(/>/g, '&gt;');
+}
+
+/**
+ * String class: Replaces variables of the form {var} with values from given array
+ * @param values Associative array containing values to fill in (optional)
+ * @return Text string with variables replaced by their values
+ */
+String.prototype.T = function(values)
+{
+ var result = this;
+
+ for (key in values)
+ result = result.replace(new RegExp("{" + key + "}", "g"), values[key]);
+
+ return result;
+}
+
+/**
+ * Insert an event handler on top of chain
+ * @param p.element Element to handle event for
+ * @param p.event Name of event:'focus', 'click', ... (without 'on')
+ * @param p.object Object that contains handler method
+ * @param p.method Method of p.object to call on p.event
+ */
+function it_event(p)
+{
+ var oldhandler = p.element["on" + p.event];
+
+ p.element["on" + p.event] = function(ev)
+ {
+ var pp = arguments.callee.p ? arguments.callee.p : p;
+ var oo = arguments.callee.oldhandler ? arguments.callee.oldhandler : oldhandler;
+
+ var result = pp.object[pp.method](ev ? ev : window.event, pp);
+
+ if (result && oo)
+ result = oo(ev);
+
+ return result;
+ }
+ p.element["on" + p.event].p = p;
+ p.element["on" + p.event].oldhandler = oldhandler;
+}
+
+function it_add_event(p)
+{
+ if (!p.object || !p.method) // not enough arguments
+ return;
+ if (!p.element)
+ p.element = document;
+
+ if (!p.object._it_events)
+ p.object._it_events = [];
+
+ var evt = p.event;
+ var key = p.event + '*' + p.method;
+ var p_closure = p; // Needed for Konqueror 3.4.2 as p is (wrongly) shadowed by global input element named p
+ if (!p.object._it_events[key])
+ p.object._it_events[key] = function(e){ return p_closure.object[p_closure.method](e, p_closure); };
+
+ if (p.element.addEventListener)
+ p.element.addEventListener(evt, p.object._it_events[key], false);
+ else if (p.element.attachEvent)
+ p.element.attachEvent('on'+evt, p.object._it_events[key]);
+ else
+ {
+ p.element['on'+evt] = function(e)
+ {
+ var ret = true;
+ for (var k in p_closure.object._it_events)
+ if (p_closure.object._it_events[k] && k.indexOf(evt) == 0)
+ ret = p_closure.object._it_events[k](e);
+ return ret;
+ };
+ }
+}
+
+function it_remove_event(p)
+{
+ if (!p.element)
+ p.element = document;
+
+ var key = p.event + '*' + p.method;
+ if (p.object && p.object._it_events && p.object._it_events[key]) {
+ if (p.element.removeEventListener)
+ p.element.removeEventListener(p.event, p.object._it_events[key], false);
+ else if (p.element.detachEvent)
+ p.element.detachEvent('on'+p.event, p.object._it_events[key]);
+
+ p.object._it_events[key] = null;
+ }
+}
+
+/**
+ * Prevent event propagation and bubbeling
+ */
+function it_event_void(evt)
+{
+ var e = evt ? evt : window.event;
+ if (e.preventDefault)
+ e.preventDefault();
+ if (e.stopPropagation)
+ e.stopPropagation();
+
+ e.cancelBubble = true;
+ e.returnValue = false;
+ return false;
+}
+
+/* Get object pixel position. Based on quirksmode.org's code */
+function it_get_obj_x(obj)
+{
+ var curleft = 0;
+ if (obj.offsetParent)
+ while (obj)
+ {
+ curleft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ else if (obj.x)
+ curleft += obj.x;
+ return curleft;
+}
+
+function it_get_obj_y(obj)
+{
+ var curtop = 0;
+ if (obj.offsetParent)
+ while (obj)
+ {
+ curtop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ else if (obj.y)
+ curtop += obj.y;
+ return curtop;
+}
+
+/* Common accessor for dom elements */
+function it_find_obj(obj)
+{
+ if (document.getElementById)
+ return document.getElementById(obj);
+ else if (document.all)
+ return document.all[obj];
+ else if (document.layers)
+ return document.layers[obj];
+ return null;
+}
+
+/* Get dom element by ID but always return a valid object */
+function it_element(label)
+{
+ var tmp = it_find_obj(label);
+ return tmp ? tmp : { style:{}, src:"", value:"", isundefined:true };
+}
+
+/* Get an iframe's content document in a compatible way */
+function it_get_iframe_document(iframe)
+{
+ return iframe.contentWindow ? iframe.contentWindow.document : iframe.contentDocument;
+}
+
+/* Create a new dom element and append to doc */
+function it_create_element(doc, type, init)
+{
+ var e = document.createElement(type);
+ it_set(e, init);
+ doc.appendChild(e);
+ return e;
+}
+
+/**
+ * Copy attributes from src to dst in a recursive manner.
+ * @param dst Destination object which gets attributes
+ * @param src Source object containing attributes
+ */
+function it_set(dst, src)
+{
+ if (dst)
+ {
+ for (var i in src)
+ {
+ if (typeof src[i] == 'object')
+ {
+ if (dst[i])
+ it_set(dst[i], src[i]);
+ }
+ else
+ dst[i] = src[i];
+ }
+ }
+}
+
+/**
+ * Return the current timestamp
+ */
+function it_now()
+{
+ return new Date().getTime();
+}
+
+/**
+ * Encodes arbitrary string for use in an url
+ * @param str string to be encoded
+ */
+function it_url_encode(str)
+{
+ var result = window.encodeURIComponent ? encodeURIComponent(str) : escape(str).replace(/\+/g, "%2B");
+
+ return result.replace(/%20/gi, "+").replace(/%2C/gi, ",").replace(/%3B/gi, ";").replace(/%28/gi, "(").replace(/%29/gi, ")");
+}
+
+/**
+ * Patch PNG transparency for IE 5.5-6 on the given image
+ */
+function it_pngfix(img, w, h, mode)
+{
+ var old_IE = navigator.platform == "Win32" && String(navigator.userAgent).match(/MSIE ((5\.5)|6)/);
+ if (img.src && img.src.match(/\.png($|\?)/) && old_IE) {
+ img.style.width = (w || img.width) + 'px';
+ img.style.height = (h || img.height) + 'px';
+ img.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+img.src+"',sizingMethod='"+(mode ? mode : 'crop')+"')";
+ img.src = '/images/0.gif';
+ }
+ else if (img && old_IE)
+ img.style.filter = 'none';
+}
+