function NiftyCheck()
{
	if (!document.getElementById || !document.createElement)
		return(false);

	isXHTML = /html\:/.test(document.getElementsByTagName('body')[0].nodeName);

	if (Array.prototype.push == null)
	{
		Array.prototype.push = function()
		                       {
			                       this[this.length] = arguments[0];
			                       return(this.length);
		                       }
	}

	return(true);
}

function Rounded(selector, wich, bk, color, opt)
{
	var i, prefixt, prefixb, cn = "r", ecolor = "", edges = false, eclass = "", b = false, t = false;

	if (color == "transparent")
	{
		cn = cn + "x";
		ecolor = bk;
		bk = "transparent";
	}
	else if (opt && opt.indexOf("border") >= 0)
	{
		var optar = opt.split(" ");

		for (i = 0;i < optar.length;i++)
			if (optar[i].indexOf("#") >= 0) ecolor = optar[i];

		if (ecolor == "") ecolor = "#666";

		cn += "e";

		edges = true;
	}
	else if (opt && opt.indexOf("smooth") >= 0)
	{
		cn += "a";
		ecolor = Mix(bk, color);
	}

	if (opt && opt.indexOf("small") >= 0) cn += "s";

	prefixt = cn;

	prefixb = cn;

	if (wich.indexOf("all") >= 0)
	{
		t = true;
		b = true
	}
	else if (wich.indexOf("top") >= 0) 
	{
		t = "true";
	}
	else if (wich.indexOf("tl") >= 0)
	{
		t = "true";

		if (wich.indexOf("tr") < 0) prefixt += "l";
	}
	else if (wich.indexOf("tr") >= 0)
	{
		t = "true";
		prefixt += "r";
	}

	if (wich.indexOf("bottom") >= 0) 
	{
		b = true;
	}
	else if (wich.indexOf("bl") >= 0)
	{
		b = "true";

		if (wich.indexOf("br") < 0) prefixb += "l";
	}
	else if (wich.indexOf("br") >= 0)
	{
		b = "true";
		prefixb += "r";
	}

	var v = getElementsBySelector(selector);

	var l = v.length;

	for (i = 0;i < l;i++)
	{
		if (edges) AddBorder(v[i], ecolor);

		if (t) AddTop(v[i], bk, color, ecolor, prefixt);

		if (b) AddBottom(v[i], bk, color, ecolor, prefixb);
	}
}

function AddBorder(el, bc)
{
	var i;

	if (!el.passed)
	{
		if (el.childNodes.length == 1 && el.childNodes[0].nodeType == 3)
		{
			var t = el.firstChild.nodeValue;
			el.removeChild(el.lastChild);
			var d = CreateEl("span");
			d.style.display = "block";
			d.appendChild(document.createTextNode(t));
			el.appendChild(d);
		}

		for (i = 0;i < el.childNodes.length;i++)
		{
			if (el.childNodes[i].nodeType == 1)
			{
				el.childNodes[i].style.borderLeft = "1px solid " + bc;
				el.childNodes[i].style.borderRight = "1px solid " + bc;
			}
		}
	}

	el.passed = true;
}

function AddTop(el, bk, color, bc, cn)
{
	var i, lim = 4, d = CreateEl("b");

	if (cn.indexOf("s") >= 0) lim = 2;

	if (bc) d.className = "artop";
	else d.className = "rtop";

	d.style.backgroundColor = bk;

	for (i = 1;i <= lim;i++)
	{
		var x = CreateEl("b");
		x.className = cn + i;
		x.style.backgroundColor = color;

		if (bc) x.style.borderColor = bc;

		d.appendChild(x);
	}

	el.style.paddingTop = 0;

	el.insertBefore(d, el.firstChild);
}

function AddBottom(el, bk, color, bc, cn)
{
	var i, lim = 4, d = CreateEl("b");

	if (cn.indexOf("s") >= 0) lim = 2;

	if (bc) d.className = "artop";
	else d.className = "rtop";

	d.style.backgroundColor = bk;

	for (i = lim;i > 0;i--)
	{
		var x = CreateEl("b");
		x.className = cn + i;
		x.style.backgroundColor = color;

		if (bc) x.style.borderColor = bc;

		d.appendChild(x);
	}

	el.style.paddingBottom = 0;

	el.appendChild(d);
}

function CreateEl(x)
{
	if (isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml', x));
	else return(document.createElement(x));
}

function getElementsBySelector(selector)
{
	var i, selid = "", selclass = "", tag = selector, f, s = [], objlist = [];

	if (selector.indexOf(" ") > 0)
	{  //descendant selector like "tag#id tag"
		s = selector.split(" ");
		var fs = s[0].split("#");

		if (fs.length == 1) return(objlist);

		f = document.getElementById(fs[1]);

		if (f) return(f.getElementsByTagName(s[1]));

		return(objlist);
	}

	if (selector.indexOf("#") > 0)
	{ //id selector like "tag#id"
		s = selector.split("#");
		tag = s[0];
		selid = s[1];
	}

	if (selid != "")
	{
		f = document.getElementById(selid);

		if (f) objlist.push(f);

		return(objlist);
	}

	if (selector.indexOf(".") > 0)
	{  //class selector like "tag.class"
		s = selector.split(".");
		tag = s[0];
		selclass = s[1];
	}

	var v = document.getElementsByTagName(tag);  // tag selector like "tag"

	if (selclass == "")
		return(v);

	for (i = 0;i < v.length;i++)
	{
		if (v[i].className.indexOf(selclass) >= 0)
		{
			objlist.push(v[i]);
		}
	}

	return(objlist);
}

function Mix(c1, c2)
{
	var i, step1, step2, x, y, r = new Array(3);

	if (c1.length == 4)step1 = 1;
	else step1 = 2;

	if (c2.length == 4) step2 = 1;
	else step2 = 2;

	for (i = 0;i < 3;i++)
	{
		x = parseInt(c1.substr(1 + step1 * i, step1), 16);

		if (step1 == 1) x = 16 * x + x;

		y = parseInt(c2.substr(1 + step2 * i, step2), 16);

		if (step2 == 1) y = 16 * y + y;

		r[i] = Math.floor((x * 50 + y * 50) / 100);
	}

	return("#" + r[0].toString(16) + r[1].toString(16) + r[2].toString(16));
}