function trim(s)
{
	if((s==null)||(typeof(s)!='string')||!s.length)
		return'';
		
	return s.replace(/^\s+/,'').replace(/\s+$/,'');
}

function utf8encode(s)
{
	var string = s.replace(/\r\n/g,"\n");
	var utftext = "";

	for(var n = 0; n < string.length; n++)
	{
		var c = string.charCodeAt(n);

		if(c < 128)
		{
			utftext += String.fromCharCode(c);
		}
		else if((c > 127) && (c < 2048))
		{
			utftext += String.fromCharCode((c >> 6) | 192);
			utftext += String.fromCharCode((c & 63) | 128);
		}
		else
		{
			utftext += String.fromCharCode((c >> 12) | 224);
			utftext += String.fromCharCode(((c >> 6) & 63) | 128);
			utftext += String.fromCharCode((c & 63) | 128);
		}
	}

	return utftext;
}

function utf8decode(s)
{
	var string = "";
	var i = 0;
	var c = c1 = c2 = 0;

	while(i < s.length)
	{
		c = s.charCodeAt(i);

		if(c < 128)
		{
			string += String.fromCharCode(c);
			i++;
		}
		else if((c > 191) && (c < 224))
		{
			c2 = s.charCodeAt(i+1);
			string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
			i += 2;
		}
		else
		{
			c2 = s.charCodeAt(i+1);
			c3 = s.charCodeAt(i+2);
			string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
			i += 3;
		}
	}

	return string;	
}


function get_onclick(str)
{
	var result = str.match(/onclick\s*=\s*"([^"]*)"/);

	if(result != null)
		return result[1];
	else
		return null;
}

function replace_onclick(str, onclick)
{
	return str.replace(/onclick\s*=\s*"[^"]*"/, 'onclick="' + onclick + '"');
}

function replace_first_param(func, param)
{
	return func.replace(/(\w+\(\.*)([^,^\)]+)/, "$1" + param);
}

function replace_second_param(func, param)
{
	return func.replace(/(\w+\(\.*)([^,]+,)([^,^\)]+)/, '$1$2' + param);
}

function get_href(str)
{
	var result = str.match(/href\s*=\s*"([^"]*)"/);

	if(result != null)
		return result[1];
	else
		return '';
}

function get_tag_inside(str)
{
	var result = str.match(/>([^<]*)</);

	if(result != null)
		return result[1];
	else
		return '';
}

function get_onchange(str)
{
	var result = str.match(/onchange\s*=\s*"([^"]*)"/);

	if(result != null)
		return result[1];
	else
		return null;
}

function replace_onchange(str, onchange)
{
	return str.replace(/onchange\s*=\s*"[^"]*"/, 'onchange="' + onchange + '"');
}

function rgb_to_html(red, green, blue)
{
	var decColor = blue + 256 * green + 65536 * red;
	var str = decColor.toString(16);

	if(green == 0 && blue == 0)
		str = str + '0000';
	else if(blue == 0)
		str = str + '00';

	return str;
}

function fade_background(id, r_from, g_from, b_from, r_to, g_to, b_to, time)
{
	//speed for each frame
	var speed = Math.round(time / 100);
	var timer = 0;

	var r = r_from;
	var g = g_from;
	var b = b_from;

	var r_stop = false;
	var g_stop = false;
	var b_stop = false;

	while(!r_stop || !g_stop || !b_stop)
	{
		setTimeout("change_bkg(" + r + ", " + g + ", " + b + ", '" + id + "')", (timer * speed));

		if(!r_stop)
		{
			if(r_from > r_to)
			{
				r = r - 1;
				if(r <= r_to)
				{
					r = r + 1;
					r_stop = true;
				}
			}
			else
			{
				r = r + 1;
				if(r >= r_to)
				{
					r = r - 1;
					r_stop = true;
				}
			}
		}

		if(!g_stop)
		{
			if(g_from > g_to)
			{
				g = g - 1;
				if(g <= g_to)
				{
					g = g + 1;
					g_stop = true;
				}
			}
			else
			{
				g = g + 1;
				if(g >= g_to)
				{
					g = g - 1;
					g_stop = true;
				}
			}
		}

		if(!b_stop)
		{
			if(b_from > b_to)
			{
				b = b - 1;
				if(b <= b_to)
				{
					b = b + 1;
					b_stop = true;
				}
			}
			else
			{
				b = b + 1;
				if(b >= b_to)
				{
					b = b - 1;
					b_stop = true;
				}
			}
		}

		timer++;
	}
}

function change_bkg(r, g, b, id)
{
	var object = $(id);
	var style = object.style;
	var color = rgb_to_html(r, g, b);

	style.backgroundColor = color;
}

function trim(stringToTrim)
{
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}

function ltrim(stringToTrim)
{
	return stringToTrim.replace(/^\s+/,"");
}

function rtrim(stringToTrim)
{
	return stringToTrim.replace(/\s+$/,"");
}

function htmlspecial_quotes(string)
{
	var str = string.replace(/"/g, "&quot;");
	return str.replace(/'/g, "&#039;");
}