var GetElementSupported = !! document.getElementById;

function GetElement(id)
{
	if (document.getElementById)
		return document.getElementById(id);
	else if (document.all)
		return document.all[id];
	else
		return null;
}

	
function AssignEvent(obj, eventname, func)
{
	if (obj.addEventListener)
		obj.addEventListener(eventname, func, false)
	else if (obj.attachEvent)
		obj.attachEvent("on" + eventname, func)
	else
		return false;
	return true;
}

var OnLoadFunctions = new Array();
function AddOnLoadFunction(f)
{
	OnLoadFunctions[OnLoadFunctions.length] = f;
}

AssignEvent(window, "load", function()
{
	for (var i=0; i<OnLoadFunctions.length; ++i)
		(OnLoadFunctions[i])();
});

function AddCssRule(selector, rule)
{
	if (document.styleSheets && document.styleSheets.length>0)
	{
		if (document.styleSheets[0].addRule)
			document.styleSheets[0].addRule(selector,rule);
		else if (document.styleSheets[0].insertRule)
			document.styleSheets[0].insertRule(selector + " { " + rule + " } ",document.styleSheets[0].cssRules.length);
	}
}


function AddOption(options, option, position)
{
	if (options.add)
		options.add(option,position);
	else
	{
		for (var j=options.length; j>position; j--)
		{
			options[j] = new Option(options[j-1].text);
			options[j].value = options[j-1].value;
			options[j].selected = options[j-1].selected;
		}
		options[position] = option;
	}
}

function GetCookie(name)
{
	var Cookies = document.cookie.split("; ");
	for (var i=0; i<Cookies.length; i++)
	{
		var NameValue = Cookies[i].split("=");
		if (name == NameValue[0]) 
			return NameValue[1] ? unescape(NameValue[1]) : "";
	}
	return null;
}

function SetCookie(name, value)
{
	document.cookie = name + "=" + escape(value) + ";path=/";
}

function EmptyString(s)
{
	if (s)
		return (new String(s)).replace(/(^\s+)|(\s+$)/g,"")=="";
	else
		return true;
}

function ValidDate(year, month, day)
{
	year = new String(year).replace(/(^\s+)|(\s+$)/g,"");
	month = new String(month).replace(/(^\s+)|(\s+$)/g,"");
	day = new String(day).replace(/(^\s+)|(\s+$)/g,"");
	var d = new Date(year, month-1, day);
	return d.getFullYear()==year  &&  d.getMonth()+1==month  &&  d.getDate()==day;
}

function AddClassName(obj, ToAdd)
{
	if (!obj.className.match(new RegExp("\\b" + ToAdd + "\\b","g")))
		obj.className += " " + ToAdd;
}


function RemoveClassName(obj, ToRemove)
{
	var R = new RegExp("(\\b|\\s)+" + ToRemove + "(\\b|\\s)+","g");
	if (obj.className.match(R))
		obj.className = obj.className.replace(R,"");
}

var R1 = new RegExp("\\\\","g");
var R2 = new RegExp('"',"g");
var R3 = new RegExp("'","g");
var R4 = new RegExp("\\n","g");
var R5 = new RegExp("\\r","g");
var R6 = new RegExp("&","g");
var R7 = new RegExp("<","g");
var R8 = new RegExp(">","g");
var R9 = new RegExp("=","g");

function HtmlString(s)
{
	return String(s)
		.replace(R6,"&amp;")
		.replace(R2,"&quot;")
		.replace(R3,"&#39;")
		.replace(R7,"&lt;")
		.replace(R8,"&gt;");
}

function JsString(s)
{
	return String(s)
		.replace(R1,"\\\\")
		.replace(R2,"\\x22")
		.replace(R3,"\\x27")
		.replace(R4,"\\n")
		.replace(R5,"\\r")
		.replace(R6,"\\x26")
		.replace(R7,"\\x3c")
		.replace(R8,"\\x3e");
}



function UrlEscapeNormal(s)
{
	return String(s)
		.replace(R6,"%26")
		.replace(R9,"%3d");
}



function WriteChart(type, width, height, dataxmlstring)
{
	document.write(('<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="' + width + '" height="' + height + '">' +
			'<param name="movie" value="charts/FC_2_3_' + type + '.swf" />' +
			'<param name="quality" value="high" />' +
			'<param name="scale" value="noscale" />' +
			'<param name="wmode" value="transparent" />' +
			'<param name="bgcolor" value="#FFFFFF" />' +
			'<param name="FlashVars" value="dataXML=' + HtmlString(UrlEscapeNormal(dataxmlstring)) + '&amp;chartWidth=' + width + '&amp;chartHeight=' + height + '"/>' +

			'<embed src="charts/FC_2_3_' + type + '.swf" flashvars="dataXML=' + HtmlString(UrlEscapeNormal(dataxmlstring)) + '&amp;chartWidth=' + width + '&amp;chartHeight=' + height + '" quality="high" bgcolor="#FFFFFF" width="' + width + '" height="' + height + '" type="application/x-shockwave-flash" pluginspace="http://www.macromedia.com/go/getflashplayer"></embed>' +
		'</object>'));
}




function ZeroPad(n, count)
{
	var s = new String(n);
	var zeroCount = count - s.length;
	for (var i=0; i<zeroCount; ++i)
		s = "0" + s;
	return s;
}




function Utf8Encode(s)
{
	var utf = "";
	for (var i=0; i<s.length; ++i)
	{
		var c = s.charCodeAt(i);
		if (c<128)
		{
			// 0xxx.xxxx
			utf += String.fromCharCode(c);
		}
        else if (c>127 && c<2048)
		{
			// 110x.xxxx 10xx.xxxx
			utf += String.fromCharCode((c>>6)|192);
			utf += String.fromCharCode((c&63)|128);
		}
        else
		{
			// 1110.xxxx 10xx.xxxx 10xx.xxxx
			utf += String.fromCharCode((c>>12)|224);
			utf += String.fromCharCode(((c>>6)&63)|128);
			utf += String.fromCharCode((c&63)|128);
		}
	}
	return utf;
}
