document.getElementsByClassName = function(cls,n,t)
	{
		var rtn = [];
		n=n===null?document:n;
		t=t===null?'*':t;
		var els = document.all ? document.all : n.getElementsByTagName(t);
		for (var i=0,j=0; i < els.length; i++)
		{
			if(els[i].className.match("(^|\\s)"+cls+"(\\s|$)"))
			{
				rtn[j++] = els[i];
			}
		}
		return rtn;
	};

	function jsfAttachEvent(obj,evt,fnc)
	{
		if(window.addEventListener)
		{
			obj.addEventListener(evt, fnc, false);
		}
		else if(window.attachEvent)
		{
			obj.attachEvent('on'+evt, fnc);
		}
		else if (obj.getElementById && evt=='load')
		{
			obj.onload = fnc;
		}
	}

	//extend an object with addition methods/properties
	function jsfExtendObject(d, s)
	{
		for (p in s)
		{
			d[p] = s[p];
		}
		return d;
	}