195 lines
4.4 KiB
JavaScript
195 lines
4.4 KiB
JavaScript
function af_var_dump(obj) {
|
|
var str = typeof(obj) + '\n';
|
|
for (x in obj) {
|
|
str += x + ' = ' + obj[x] + '\n';
|
|
}
|
|
return str;
|
|
}
|
|
af_CSS = {
|
|
addClass: function(element, className) {
|
|
element.className += ' ' + className;
|
|
},
|
|
|
|
removeClass: function(element, className) {
|
|
if (!element || !element.className) {
|
|
return;
|
|
}
|
|
var classes = element.className.split(' ');
|
|
var newclasses = new Array();
|
|
for (var i = 0; i < classes.length; ++i) {
|
|
if (classes[i] != className) {
|
|
newclasses.push(classes[i]);
|
|
}
|
|
}
|
|
element.className = newclasses.join(' ');
|
|
},
|
|
|
|
getElementsByClass: function(pattern, node, tag) {
|
|
node = node || document;
|
|
tag = tag || '*';
|
|
|
|
var nodes = new Array();
|
|
var elements = node.getElementsByTagName(tag);
|
|
for (var i = 0; i < elements.length; ++i) {
|
|
if (pattern.test(elements[i].className)) {
|
|
nodes.push(elements[i]);
|
|
}
|
|
}
|
|
|
|
return nodes;
|
|
},
|
|
|
|
getPosition: function(element) {
|
|
var coords = {x:0, y:0};
|
|
var e = element;
|
|
do {
|
|
coords.x += e.offsetLeft;
|
|
coords.y += e.offsetTop;
|
|
e = e.offsetParent;
|
|
} while (e && e.offsetParent)
|
|
|
|
return coords;
|
|
},
|
|
|
|
getDimensions: function(element, includeBorder) {
|
|
if (includeBorder) {
|
|
return {width:element.offsetWidth, height:element.offsetHeight};
|
|
} else {
|
|
// @TODO: check IE compatibility
|
|
return {width:element.clientWidth, height:element.clientHeight};
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
af_Events = {
|
|
|
|
addEventListener: function(element, event, handler, capture) {
|
|
if (element.addEventListener) {
|
|
element.addEventListener(event, handler, false);
|
|
return;
|
|
}
|
|
if (element.attachEvent) {
|
|
// @TODO: find a cleaner solution
|
|
var mname = '_____on'+event;
|
|
element[mname] = handler;
|
|
element.attachEvent('on' + event, function(event) { return element[mname](event); });
|
|
}
|
|
},
|
|
|
|
removeEventListener: function(element, event, handler) {
|
|
if (element.removeEventListener) {
|
|
element.removeEventListener(event, handler, false);
|
|
return;
|
|
}
|
|
if (element.detachEvent) {
|
|
// @TODO: remove handler from element
|
|
element.detachEvent('on' + event, handler);
|
|
}
|
|
},
|
|
|
|
addOnEvent: function(element, event, handler) {
|
|
event = 'on' + event;
|
|
var tmp = element[event];
|
|
if (typeof tmp != 'function') {
|
|
element[event] = handler;
|
|
} else {
|
|
element[event] = function(e) {
|
|
if (tmp) {
|
|
tmp(e);
|
|
}
|
|
handler(e);
|
|
}
|
|
}
|
|
},
|
|
|
|
stopEvent: function(event) {
|
|
if (typeof window.event != 'undefined') {
|
|
window.event.cancelBubble = true;
|
|
window.event.returnValue = false;
|
|
} else {
|
|
event.preventDefault();
|
|
event.stopPropagation();
|
|
}
|
|
},
|
|
|
|
getMousePosition: function(event) {
|
|
if (event.pageX || event.pageY) {
|
|
return {x: event.pageX, y:event.pageY};
|
|
}
|
|
return {
|
|
x: event.clientX + document.body.scrollLeft - document.body.clientLeft,
|
|
y: event.clientY + document.body.scrollTop - document.body.clientTop
|
|
};
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function af_AJAX() {
|
|
|
|
var that = this;
|
|
|
|
that.enabled = true;
|
|
|
|
if (typeof XMLHttpRequest == 'undefined') {
|
|
try {
|
|
XMLHttpRequest = function() {
|
|
return new ActiveXObject('Microsoft.XMLHTTP');
|
|
}
|
|
} catch (msex) {}
|
|
}
|
|
|
|
if (typeof XMLHttpRequest == 'undefined') {
|
|
that.enabled = false;
|
|
}
|
|
|
|
that.getSync = function(url) {
|
|
req = new XMLHttpRequest();
|
|
req.open('GET', url, false);
|
|
req.send(null);
|
|
return req;
|
|
}
|
|
|
|
that.getAsync = function(url, callback) {
|
|
req = new XMLHttpRequest();
|
|
req.open('GET', url);
|
|
req.onreadystatechange = function() {
|
|
if (req.readyState == 4) {
|
|
callback(req);
|
|
}
|
|
}
|
|
req.send(null);
|
|
}
|
|
|
|
that.postSync = function(url, data) {
|
|
req = new XMLHttpRequest();
|
|
req.open('POST', url, false);
|
|
var encodedData = that.urlencode(data);
|
|
req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
|
|
req.setRequestHeader("Content-length", encodedData.length);
|
|
req.setRequestHeader("Connection", "close");
|
|
req.send(encodedData);
|
|
return req;
|
|
}
|
|
|
|
that.postAsync = function(url, data, callback) {
|
|
req = new XMLHttpRequest();
|
|
req.open('POST', url);
|
|
req.onreadystatechange = function() {
|
|
if (req.readyState == 4) {
|
|
callback(req);
|
|
}
|
|
}
|
|
req.send(that.urlencode(data));
|
|
}
|
|
|
|
that.urlencode = function(data) {
|
|
encodedData = new Array();
|
|
for (i in data) {
|
|
encodedData.push(i + '=' + encodeURIComponent(data[i]));
|
|
}
|
|
return encodedData.join('&');
|
|
}
|
|
|
|
} |