(function(){
var b = navigator.userAgent.toLowerCase();
+
+ // Figure out what browser is being used
$.browser =
- ( /safari/.test(b) && "safari" ) ||
+ ( /webkit/.test(b) && "safari" ) ||
( /opera/.test(b) && "opera" ) ||
( /msie/.test(b) && "msie" ) ||
( !/compatible/.test(b) && "mozilla" ) ||
"other";
+
+ // Check to see if the W3C box model is being used
+ $.boxModel = ( $.browser != "msie" ||
+ document.compatMode == "CSS1Compat" );
})();
$.apply = function(o,f,a) {
$.getCSS = function(e,p) {
// Adapted from Prototype 1.4.0
if ( p == 'height' || p == 'width' ) {
- if ($.getCSS(e,"display") != 'none') {
- return p == 'height' ?
- e.offsetHeight || parseInt(e.style.height,10) :
- e.offsetWidth || parseInt(e.style.width,10);
+ var ph = $.browser == "msie" ? 0 :
+ parseInt($.css(e,"paddingTop")) + parseInt($.css(e,"paddingBottom"));
+ var pw = $.browser == "msie" ? 0 :
+ parseInt($.css(e,"paddingLeft")) + parseInt($.css(e,"paddingRight"));
+
+ var oHeight, oWidth;
+
+ if ($.css(e,"display") != 'none') {
+ oHeight = e.offsetHeight || parseInt(e.style.height,10);
+ oWidth = e.offsetWidth || parseInt(e.style.width,10);
+ } else {
+ var els = e.style;
+ var ov = els.visibility;
+ var op = els.position;
+ var od = els.display;
+ els.visibility = 'hidden';
+ els.position = 'absolute';
+ els.display = '';
+ oHeight = e.clientHeight || parseInt(e.style.height,10);
+ oWidth = e.clientWidth || parseInt(e.style.width,10);
+ els.display = od;
+ els.position = op;
+ els.visibility = ov;
}
- var els = e.style;
- var ov = els.visibility;
- var op = els.position;
- var od = els.display;
- els.visibility = 'hidden';
- els.position = 'absolute';
- els.display = '';
- var oHeight = e.clientHeight || parseInt(e.style.height,10);
- var oWidth = e.clientWidth || parseInt(e.style.width,10);
- els.display = od;
- els.position = op;
- els.visibility = ov;
- return p == 'height' ? oHeight : oWidth;
+
+ return p == 'height' ?
+ (oHeight - ph < 0 ? 0 : oHeight - ph) :
+ (oWidth - pw < 0 ? 0 : oWidth - pw);
}
if (e.style[p]) {
var r = [];
for ( var i = 0; i < a.length; i++ ) {
if ( a[i].constructor == String ) {
+ if ( a[i].indexOf("<tr") == 0 ) {
+ var tr = true;
+ a[i] = "<table>" + a[i] + "</table>";
+ }
var div = document.createElement("div");
div.innerHTML = a[i];
+ if ( tr ) {
+ div = div.firstChild.firstChild;
+ }
for ( var j = 0; j < div.childNodes.length; j++ ) {
r[r.length] = div.childNodes[j];
}
$.g = {
'': "m[2] == '*' || a.nodeName.toUpperCase() == m[2].toUpperCase()",
- '#': "a.attributes['id'].nodeValue == m[2]",
+ '#': "a.getAttribute('id') && a.getAttribute('id').nodeValue == m[2]",
':': {
lt: "i < m[3]-0",
gt: "i > m[3]-0",
if ( m[1] == "#" ) { // Ummm, should make this work in all XML docs
var oid = document.getElementById(m[2]);
- r = oid ? [oid] : [];
+ r = ret = oid ? [oid] : [];
t = t.replace( re2, "" );
} else {
if ( m[2] === "" || m[1] == "." ) { m[2] = "*"; }
if ( ret && ret[0] == context ) { ret.shift(); }
done = $.merge( done, ret );
+
return done;
};
$.tag = function(a,b){
- return a && typeof a.getElementsByTagName != "undefined" ?
+ return a && typeof a.getElementsByTagName != 'undefined' ?
a.getElementsByTagName( b ) : [];
};
'for': 'htmlFor',
'text': 'cssText',
'class': 'className',
- 'float': 'cssFloat'
+ 'float': 'cssFloat',
+ 'style': 'cssText'
};
a = (fix[a] && fix[a].replace && fix[a]) || a;
var r = new RegExp("-([a-z])","ig");
};
$.event.trigger = function(element,type,data) {
- data = data || [{ type: type }];
+ data = data || [ $.event.fix({ type: type }) ];
if ( element && element["on" + type] ) {
$.apply( element, element["on" + type], data );
}