function swapClass(o, on)
{
	o.className = (on ? o.className.replace(/$/i,"On") : o.className.replace(/On$/i,""));
}

function reverse(s)
{
	var s1 = "";

	for (var i = s.length - 1; i >= 0; i--)
		s1 += s.charAt(i);

	return s1;
}

function removeBlanks(s)
{
	var	a = s.split('\n');

	s = "";

	for (var i = 0; i < a.length; i++)
	{
		if (a[i].length != 0)
			s += trim(a[i]) + '\n';
	}

	return (trim(s));
}

function trim(s)
{
	if (s == null)
		return null;

	return s.replace(/^\s*|\s*$/g,"");
}
/*
function trim(s)
{
	s = s.replace(/\r\n/g, '\n');

	while (s.charAt(0) == ' ' || s.charAt(0) == '\n')
		s = s.substring(1);

	while (s.charAt(s.length - 1) == ' ' || s.charAt(s.length - 1) == '\n')
		s = s.substring(0, s.length - 1);

	return s;
}
*/
function toCurrency(num)
{
	num = Math.floor(num * 100 + 0.50000000001);
	cents = num % 100;
	num = Math.floor(num / 100).toString();

	if(cents < 10)
		cents = "0" + cents;

	return (num + (Number(cents) != 0 ? '.' + cents : ""));
}

function encrypt(url, key)
{
	/* IMPORTANT: all parseInt() calls ***must*** include "10" as 2nd param */

	if (key == null || key.length == 0)
		return url;

	if (key.length > 4)
		key = key.substring(0,4);

	var p = "";

	for (var i = 0; i < key.length; i++)
		p += key.charCodeAt(i).toString();

	var s = Math.floor(p.length / 5);
	var m = parseInt(p.charAt(s) + p.charAt(s*2) + p.charAt(s*3) +
			p.charAt(s*4) + p.charAt(s*5), 10);
	var n = Math.ceil(key.length / 2);
	var o = Math.pow(2, 31) - 1;

	var r = Math.round(Math.random() * 1000000000) % 100000000;
	p += r;

	while(p.length > 10)
	    p = (parseInt(p.substring(0, 10), 10) +
	    	parseInt(p.substring(10, p.length), 10)).toString();

	p = (m * p + n) % o;

	var enc = "_";

	for (var i = 0; i < url.length; i++)
	{
		var	c = parseInt(url.charCodeAt(i) ^ Math.floor((p / o) * 255), 10);

		if(c < 16)
			enc += "0" + c.toString(16);
		else
			enc += c.toString(16);

		p = (m * p + n) % o;
	}

	r = r.toString(16);

	while(r.length < 8)
		r = "0" + r;

	enc += r;

	return enc;
}

function convertToTime(min)
{
	var	s = "";
	var	ampm = " AM";

	var hr = Math.floor(min / 60);

	if (hr > 12)
	{
		if (hr > 24)
		{
			ampm = " AM";
			hr -= 24;
		}
		else if (hr == 24)
		{
			ampm = " AM";
			hr -= 12;
		}
		else
		{
			hr -= 12;
			ampm = " PM";
		}
	}
	else if (hr == 12)
		ampm = " PM";

	if (hr < 10)
		s += "0";

	s += hr + ":"

	if (min % 60 < 10)
		s += "0";

	s += Math.floor(min % 60) + ampm;

	return s;
}

function convertToHrMin(min)
{
	var	s = "";

	if (min / 60 < 10)
		s += "0";

	s += Math.floor(min / 60) + " hr ";

	if (min % 60 < 10)
		s += "0";

	s += Math.floor(min % 60) + " min";

	return s;
}

function getElement(id)
{
	if (document.all && ! document.getElementById)
		return document.all[id];
	else
	{
		var	e = document.getElementById(id);

		if (e == null)
		{
			if (document.getElementByName)
				e = document.getElementByName(id);
/*
			else
			{
				var items = document.getElementsByTagName(id);
alert(id);

				for (i = 0; i < items.length; i++)
				{
					if (items[i].
				}
			}
*/
		}

		return e;
	}
}

function appendInnerText(e, text)
{
	if (typeof(e) == "string")
		e = getElement(e);

	if (e == null)
		return;

	e.appendChild(document.createTextNode(text));
}

function innerText(e, text)
{
	if (typeof(e) == "string")
		e = getElement(e);

	if (e == null)
		return;

	if (typeof(text) == "undefined")
	{
		if (typeof(e.innerText) != "undefined")
			return e.innerText;
		else if (typeof(e.textContent) != "undefined")
			return e.textContent;
	}
	else
	{
		if (typeof(e.innerText) != "undefined")
			e.innerText = text;
		else if (typeof(e.textContent) != "undefined")
			e.textContent = text;
	}
}

function innerHTML(e, html)
{
	if (typeof(e) == "string")
		e = getElement(e);

	if (e == null)
		return;

	if (typeof(html) == "undefined")
		return e.innerHTML;
	else
		e.innerHTML = html;
}

function showElement(e, show)
{
	if (typeof(e) == "string")
		e = getElement(e);

	if (e == null)
		return;
//alert(e.tagName + " " + (e.tagName.match("(TD|TR)")) + " " + e.id);
	if (typeof(show) == "undefined" || show)
//		e.style.display = (isDOM ? (isSafari ? (e.toString().indexOf("HTMLDivElement") != -1 ? "block" : "table-row") : "table-row") : "block");
		e.style.display = (isDOM ? (e.tagName.match("TR") ? "table-row" : "block") : "block");
	else
		e.style.display = "none";
}

function hideElement(e, hide)
{
	if (typeof(e) == "string")
		e = getElement(e);

	if (e == null)
		return;

	if (typeof(hide) == "undefined" || hide)
		e.style.display = "none";
	else
//		e.style.display = (isDOM ? (isSafari ? (e.toString().indexOf("HTMLDivElement") != -1 ? "block" : "table-row") : "table-row") : "block");
		e.style.display = (isDOM ? (e.tagName.match("(TD|TR)") ? "table-row" : "block") : "block");
}

function getStyleRule(name, attr)
{
	var sheets = document.styleSheets;

	for (i = 0; i < sheets.length; i++)
	{
		var	rules = sheets[i]['rules'];

		if (rules == null)
			rules = sheets[i]['cssRules'];

	if (rules == null)
		continue;

		for (j = 0; j < rules.length; j++)
		{
			if (rules[j].selectorText.toLowerCase() == name.toLowerCase())
				return eval("rules[j].style." + attr);
		}
	}
}

function Position(x, y)
{
	this.x = x;
	this.y = y;
}

function getPosition(obj)
{
	if (typeof(obj) == "undefined")	
		return (new Position(0,0));

	var	x = 0; y = 0;

	while(obj.offsetParent != null)
	{
		x += obj.offsetLeft;
		y += obj.offsetTop;

		obj = obj.offsetParent;
	}

	x += obj.offsetLeft;
	y += obj.offsetTop;

	return (new Position(x, y));
}

function setPosition(item, obj)
{
	setPositionWithOffset(item, obj, 0, 0);
} 

function setPositionWithOffset(item, obj, dx, dy)
{
	var pos = getPosition(obj);

	if (item.style.pixelLeft)
	{
		item.style.pixelLeft = (pos.x + dx);
		item.style.pixelTop = (pos.y + dy);
	}
	else
	{
		item.style.left = (pos.x + dx);
		item.style.top = (pos.y + dy);
	}
} 

