src/xlib.js
/*! Built from X 4.23 by XAG 1.0. 09Aug12 20:01 UT */
xLibrary={version:'4.23',license:'GNU LGPL',url:'http://cross-browser.com/'};
// xAddClass r3, Copyright 2005-2007 Daniel Frechette - modified by Mike Foster
// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL
function xAddClass(e, c)
{
if ((e=xGetElementById(e))!=null) {
var s = '';
if (e.className.length && e.className.charAt(e.className.length - 1) != ' ') {
s = ' ';
}
if (!xHasClass(e, c)) {
e.className += s + c;
return true;
}
}
return false;
}
// xAddEventListener r8, Copyright 2001-2007 Michael Foster (Cross-Browser.com)
// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL
function xAddEventListener(e,eT,eL,cap)
{
if(!(e=xGetElementById(e)))return;
eT=eT.toLowerCase();
if(e.addEventListener)e.addEventListener(eT,eL,cap||false);
else if(e.attachEvent)e.attachEvent('on'+eT,eL);
else {
var o=e['on'+eT];
e['on'+eT]=typeof o=='function' ? function(v){o(v);eL(v);} : eL;
}
}
// xGetElementById r2, Copyright 2001-2007 Michael Foster (Cross-Browser.com)
// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL
function xGetElementById(e)
{
if (typeof(e) == 'string') {
if (document.getElementById) e = document.getElementById(e);
else if (document.all) e = document.all[e];
else e = null;
}
return e;
}
// xGetElementsByClassName r7, Copyright 2002-2011 Michael Foster (Cross-Browser.com)
// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL
function xGetElementsByClassName(c,p,t,f)
{
var r=[], re, e, i, l;
re = new RegExp("(^|\\s)"+c+"(\\s|$)");
// var e = p.getElementsByTagName(t);
e = xGetElementsByTagName(t,p); // See xml comments.
for (i=0, l=e.length; i<l; ++i) {
if (re.test(e[i].className)) {
r[r.length] = e[i];
if (f) f(e[i]);
}
}
return r;
}
// xGetElementsByTagName r5, Copyright 2002-2007 Michael Foster (Cross-Browser.com)
// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL
function xGetElementsByTagName(t,p)
{
var list = null;
t = t || '*';
p = xGetElementById(p) || document;
if (typeof p.getElementsByTagName != 'undefined') { // DOM1
list = p.getElementsByTagName(t);
if (t=='*' && (!list || !list.length)) list = p.all; // IE5 '*' bug
}
else { // IE4 object model
if (t=='*') list = p.all;
else if (p.all && p.all.tags) list = p.all.tags(t);
}
return list || [];
}
// xHasClass r3, Copyright 2005-2007 Daniel Frechette - modified by Mike Foster
// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL
function xHasClass(e, c)
{
e = xGetElementById(e);
if (!e || e.className=='') return false;
var re = new RegExp("(^|\\s)"+c+"(\\s|$)");
return re.test(e.className);
}
// xRemoveClass r3, Copyright 2005-2007 Daniel Frechette - modified by Mike Foster
// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL
function xRemoveClass(e, c)
{
if(!(e=xGetElementById(e))) return false;
e.className = e.className.replace(new RegExp("(^|\\s)"+c+"(\\s|$)",'g'),
function(str, p1, p2) { return (p1 == ' ' && p2 == ' ') ? ' ' : ''; }
);
return true;
}