// $Id$ /** * Clear contents of element 'jsdebug' */ function CED(txt) { var element = document.getElementById('jsdebug'); if (element) element.innerHTML = txt ? txt : ""; } /** * Add debugging output to element 'jsdebug' */ function ED() { var element = document.getElementById('jsdebug'); if (element) { var text = ""; for (var i = 0; i < arguments.length; i++) { var variable = arguments[i]; if (typeof variable == "string") variable = variable.replace(/&/g, '&').replace(/'; } } /** * Quote HTML special chars * @return Text string with & " < > htmlentities-encoded */ function Q(value) { return typeof value == "undefined" ? "" : value.toString().replace(/&/g, '&').replace(/"/g, '"').replace(//g, '>'); } /** * 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; } /* 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:""}; } /* 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, ")"); }