var jslib_Core = 
{
	_js_url_prefix: "/js/jslib/",
	_css_url_prefix: "/css/",

	_private_functions:
	{
		_toCamelCase: function( sInput ) 
		{
			var oStringList = sInput.split('-');
			if(oStringList.length == 1)  
				return oStringList[0];

			var ret = sInput.indexOf("-") == 0 ? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1) : oStringList[0];

			for(var i = 1, len = oStringList.length; i < len; i++)
			{
				var s = oStringList[i];
				ret += s.charAt(0).toUpperCase() + s.substring(1);
			}
			return ret;
		},

		_loadCode: function(elem, url)
		{
			var ajax = new Ajax.inst();

			ajax.open("GET", url, false);
			ajax.send(null);

			var text = ajax.fetchResponseText();
			var node = document.createTextNode(text);

			elem.appendChild(node);
			document.body.appendChild(elem);
		}
	},

	public_utility_functions:
	{
		addEventListener: function(elem, event, func, capture)
		{
			if (elem.addEventListener)
			{
				elem.addEventListener(event, func, capture);
			}
			else if (elem.attachEvent)
			{
				if (event == 'load')
					window.attachEvent("onload", func);
				else
					elem.attachEvent("on" + event, func);
			}
		},

		setClass: function (elem, iClass)
		{
			elem.setAttribute("class", iClass);
			elem.setAttribute("className", iClass);
		},

		getComputedWidth: function(elem)
		{
			var value = jslib_Core.public_utility_functions.getComputedItem(elem, "width");

			return ( value == "auto" ? elem.offsetWidth : value );
		},

		getComputedHeight: function(elem)
		{
			var value = jslib_Core.public_utility_functions.getComputedItem(elem, "height");

			return ( value == "auto" ? elem.offsetHeight : value );
		},

		getComputedItem: function(elem, item)
		{
			if(!document.getElementById) return;
 
			var value = elem.style[item];
 
			if(!value)
			{
				if(document.defaultView)
				{
					value = document.defaultView.getComputedStyle(elem, null).getPropertyValue(item);
				}
				else if(elem.currentStyle)
				{
					value = elem.currentStyle[jslib_Core._private_functions._toCamelCase(item)];
				}
			}
			return value;
		},

		viewPort : function()
		{
			var vp = new Array();

			vp.width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
			vp.height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
			return vp;
		},

		findPos: function(elem)
		{
			var curleft = 0;
			var curtop = 0;

			if (elem.offsetParent)
			{
				do
				{
					curleft += elem.offsetLeft;
					curtop += elem.offsetTop;
				} while ( (elem = elem.offsetParent) != null);
				return [ curleft, curtop ];
			}
			return null;
		},

		scrollToElem: function(elem)
		{
			var pos = jslib_Core.public_utility_functions.findPos(elem);

			window.scrollTo(pos[0], pos[1]);
		}
			
	},

	setJSURLPrefix: function(prefix)
	{
		jslib_Core._js_url_prefix = prefix;
	},

	setCSSURLPrefix: function(prefix)
	{
		jslib_Core._css_url_prefix = prefix;
	},

	loadModule: function (name)
	{
		if (document.getElementById("SCRIPT_" + name) == null)
		{
			var script = document.createElement("SCRIPT");
			script.setAttribute("language", "JavaScript");
			script.setAttribute("type", "application/javascript");
			script.setAttribute("id", "SCRIPT_" + name);

			return jslib_Core._private_functions._loadCode(script, jslib_Core._js_url_prefix + name + ".js");
		}
	},

	loadCSS: function (name)
	{
		if (document.getElementById("CSS_" + name) == null)
		{
			var link = document.createElement("LINK");
			link.setAttribute("rel", "stylesheet");
			link.setAttribute("type", "type/css");
			link.setAttribute("id", "CSS_" + name);

			return jslib_Core._private_functions._loadCode(link, jslib_Core._css_url_prefix + name);
		}
	}
};

