// by id function $(id) { return document.getElementById(id); } function go(u) { document.location.href=u; } // get by tag function byTag(tag, obj) { return (obj || document).getElementsByTagName(tag); } function byAttribute(att, value, obj) { var re = new RegExp(value); var r = []; var els = (obj || document).getElementsByTagName("*"); for (var c = 0, l = els.length; c < l; c ++) { var a = els[c].getAttribute(att); //alert("result: " + a + " > " + att + " > " + els[c].getAttribute("rel")); if (a && a.match(re)) { r.push(els[c]); } } return r; } function create(el) { return document.createElement(el); } // extend objects function extend(obj, props, force) { for (var x in props) { if (typeof(obj[x]) == "undefined" || force) { obj[x] = props[x]; } } } // returns objs document co-ordinates function position(obj, type) { type = type.toLowerCase().ucFirst(); var orig = obj; var retval = 0; if (type == "Left" && obj.x) { return obj.x; } else if (type == "Top" && obj.y) { return obj.y; } else { var useType = (type == "Left" || type == "Right" || type == "Center") ? "Left" : "Top"; while (obj.offsetParent) { //if (obj && obj.style && obj.style.position) obj.style.position = "relative"; retval += eval("obj.offset" + useType); obj = obj.offsetParent; } switch (type) { case "Center" : return retval + (orig.offsetWidth / 2); break; case "Right" : return retval + (orig.offsetWidth); break; default: return retval; } } return false; } // function findParent(tag, obj) { tag = tag.toUpperCase(); while (obj && obj.tagName != tag) { obj = obj.parentNode; } return obj; } function screenHeight() { return screenDimension("Height"); } function screenWidth() { return screenDimension("Width"); } // gets dimnensions for screen size (height + width) function screenDimension(type) { return eval("(self.inner" + type + ") ? self.inner" + type + " : (document.documentElement && document.documentElement.client" + type + ") ? document.documentElement.client" + type + " : document.body.client" + type); } // strip dodgy characters from message function eliminateDodgyChars(e) { var t = Event.target(e), len = 0; /* if (document.all) { var c = "\001"; var sel = document.selection.createRange(); var dul = sel.duplicate(); var len = 0; dul.moveToElementText(t); sel.text = c; len = (dul.text.indexOf(c)); sel.moveStart('character',-1); sel.text = ""; } */ var v = ""; for (var q = 0, l = t.value.length; q < l; q ++) { var c = t.value.charCodeAt(q); if (c >= 32 && c <= 127) { v += t.value.charAt(q); } /*else if (len > q) { len --; }*/ } if (v != t.value) { t.value = v; } } function countDown(e) { var t = (typeof(e.nodeType) == "undefined") ? Event.target(e) : e, r = (parseInt(t.getAttribute("maxlength")) - parseInt(t.value.length)); $(t.id + "_charcount").innerHTML = r + ((r != 1) ? " chars remaining" : "char remaining"); if (r < 0) { t.value = t.value.substring(0, t.maxlength); } } function stopEnter(e) { if (Event.key(e) == 13) { Event.stop(e); } } // Add easier event handling if (! window.Event) { var Event = {}; } // Event object extending var ev = { get: function(e) { return (! e) ? window.event : e; }, target: function(e) { e = this.get(e); return (e.target) ? e.target : (e.srcElement) ? e.srcElement : false; }, add: function(elm, evType, fn, useCapture) { // cross-browser event handling for IE5+, NS6 and Mozilla By Scott Andrew if (elm.addEventListener) { elm.addEventListener(evType, fn, useCapture); return elm; } else if (elm.attachEvent) { var r = elm.attachEvent('on' + evType, fn); return elm; } else { elm['on' + evType] = fn; return elm; } }, key: function(e) { e = this.get(e); return (e.keyCode) ? e.keyCode : (e.which) ? e.which : e.charCode; }, stop: function(e) { e = this.get(e); if (document.all) { e.returnValue = false; e.cancelBubble = true; } else { try { e.preventDefault(); e.stopPropagation(); } catch(e) {} } } }; extend(Event, ev); // uppercase first letter String.prototype.ucFirst = function() { return this.substring(0,1).toUpperCase() + this.substring(1); }; // Array extensions Array.prototype.search = function(value, offset) { if (typeof(offset) == "undefined") { offset = 0; } for (var q = offset, l = this.length; q < l; q ++) { if (this[q] == value || this[q].match(value)) { return q; } } return -1; }; Array.prototype.has = function(value) { return (this.search(value) != -1); }; Array.prototype.walk = function(func) { for (var x = 0, l = this.length; x < l; x ++) { func(this[x]); } }; Math.getRandom = function(lowNumber, highNumber) { var thisNumber = highNumber - lowNumber; var randomUnrounded = Math.random() * thisNumber; var randomNumber = Math.round(randomUnrounded); randomNumber += lowNumber; return randomNumber; } function getScroll() { if (document.documentElement && document.documentElement.scrollTop) { return document.documentElement.scrollTop; } return (document.body.scrollTop) ? document.body.scrollTop : ((window.pageYOffset) ? window.pageYOffset : 0); }