global.dom = function() {

	var obj = {};

	obj.previoussibling = function(el,tagname) { return siblingbytagname(el,tagname,true); };
	obj.nextsibling = function(el,tagname) { return siblingbytagname(el,tagname); };

	function siblingbytagname(el,tagname,previous) {

		while (el = ((previous) ? el.previousSibling : el.nextSibling)) {
			if ((el.tagName) && (el.tagName.toLowerCase() == tagname)) return el;
		}

		return null;
	}

	obj.insertbefore = function(el,ref) { ref.parentNode.insertBefore(el,ref); };
	obj.insertafter = function(el,ref) { ref.parentNode.insertBefore(el,ref.nextSibling); };

	obj.setopacity = function(el,opacity) {

		var s = el.style;
		if (opacity > 100) opacity = 100;
		if (opacity < 0) opacity = 0;
		var o = opacity / 100;

		s.KhtmlOpacity = o;
		if (o == 1) o = 0.9999999;
		s.opacity = o;
		s.MozOpacity = o;
		s.filter = 'alpha(opacity=' + opacity + ')';
	};

	obj.colortransitionstep = function(starthex,endhex,step) {

		var regexp = /^#([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;
		var start = starthex.match(regexp);
		var end = endhex.match(regexp);

		if ((start) && (end)) {
			var result = '#';
			for (var i = 1;i <= 3;i++) {
				var startdec = global.h2d(start[i]);
				var part = global.d2h(startdec + Math.floor((global.h2d(end[i]) - startdec) * step));
				result += (part.length == 1) ? '0' + part : part;
			}

			return result.toUpperCase();
		}

		return starthex;
	};

	return obj;
}();