// KJSLib ClientCore
if (typeof __KJSLib_ClientCore == "undefined")
{
var __KJSLib_ClientCore = true;
//--- start of include guard

var kClientScript = {
	load : function (src, guardName)
	{
		var scriptText = "";
		if (arguments.length == 1 || typeof window[guardName] == "undefined")
		{
			var xmlHttp = null;
			if (typeof XMLHttpRequest != "undefined")
			{
				xmlHttp = new XMLHttpRequest();
			}
			else
			{
				try
				{
					xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
				}
				catch (err1)
				{
					try
					{
						xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
					}
					catch (err2)
					{
						xmlHttp = null;
					}
				}
			}
			xmlHttp.open("GET", src, false);
			xmlHttp.send(null);
			scriptText = xmlHttp.responseText;
		}
		return scriptText;
	},
	include : function(src, guardName)
	{
		if (arguments.length == 1 || typeof window[guardName] == "undefined")
		{
			var scriptItem = document.createElement("script");
			scriptItem.type = "text/javascript";
			scriptItem.src = src;
			var headElement = document.documentElement.getElementsByTagName("head")[0];
			headElement.appendChild(scriptItem);

			//document.write("<script type=\"text/javascript\" src=\"" + src + "\"></script>");
		}
	}
}

eval(kClientScript.load("/KJSLib/Core.js", "__KJSLib_Core"));

//--- mouse capture
if (navigator.appName == "Microsoft Internet Explorer")
{
	// all empty because IE already has mouse capture
	var kMouseCapturePrototype = {
		bind : function(derived) {},
		unbind : function(derived) {}
	}
}
else
{
	// helper object for mouse capture - this is a singleton
	var __kMouseCaptureHandler = {
		setTarget : function(target, containerCapture)
		{
			if (__kMouseCaptureHandler.target == target)
			{
				__kMouseCaptureHandler.containerCapture = containerCapture;
			}
			else
			{
				if (__kMouseCaptureHandler.target != null)
				{
					__kMouseCaptureHandler.resetTarget();
				}
				__kMouseCaptureHandler.target = target;
				__kMouseCaptureHandler.containerCapture = containerCapture;
				target.ownerDocument.body.addEventListener("mousedown", __kMouseCaptureHandler.listener, true);
				target.ownerDocument.body.addEventListener("mouseup", __kMouseCaptureHandler.listener, true);
				target.ownerDocument.body.addEventListener("mousemove", __kMouseCaptureHandler.listener, true);
				target.ownerDocument.body.addEventListener("mouseover", __kMouseCaptureHandler.listener, true);
				target.ownerDocument.body.addEventListener("mouseout", __kMouseCaptureHandler.listener, true);
				target.ownerDocument.body.addEventListener("click", __kMouseCaptureHandler.listener, true);
			}
		},
		resetTarget : function(oldTarget)
		{
			if (__kMouseCaptureHandler.target == oldTarget)
			{
				target = __kMouseCaptureHandler.target;
				target.ownerDocument.body.removeEventListener("mousedown", __kMouseCaptureHandler.listener, true);
				target.ownerDocument.body.removeEventListener("mouseup", __kMouseCaptureHandler.listener, true);
				target.ownerDocument.body.removeEventListener("mousemove", __kMouseCaptureHandler.listener, true);
				target.ownerDocument.body.removeEventListener("mouseover", __kMouseCaptureHandler.listener, true);
				target.ownerDocument.body.removeEventListener("mouseout", __kMouseCaptureHandler.listener, true);
				target.ownerDocument.body.removeEventListener("click", __kMouseCaptureHandler.listener, true);
				if (__kMouseCaptureHandler.target.onlosecapture)
				{
					__kMouseCaptureHandler.target.onlosecapture();
				}
				__kMouseCaptureHandler.containerCapture = false;
				__kMouseCaptureHandler.target = null;
			}
		},
		target : null,
		containerCapture : false,
		listener : function(evt)
		{
			if (__kMouseCaptureHandler.target != null)
			{
				var ignore = false;
				if (!__kMouseCaptureHandler.containerCapture)
				{
					var p = evt.target;
					while (!p.tagName || p.tagName != "BODY")
					{
						if (p == __kMouseCaptureHandler.target)
						{
							ignore = true;
							break;
						}
						p = p.parentNode;
					}
				}
				if (!ignore)
				{
					switch (evt.type)
					{
						case "mousedown" :
							if (__kMouseCaptureHandler.target.onmousedown)
							{
								__kMouseCaptureHandler.target.onmousedown(evt);
							}
							break;
						case "mouseup" :
							if (__kMouseCaptureHandler.target.onmouseup)
							{
								__kMouseCaptureHandler.target.onmouseup(evt);
							}
							break;
						case "mousemove" :
							if (__kMouseCaptureHandler.target.onmousemove)
							{
								__kMouseCaptureHandler.target.onmousemove(evt);
							}
							break;
						case "mouseover" :
							if (__kMouseCaptureHandler.target.onmouseover)
							{
								__kMouseCaptureHandler.target.onmouseover(evt);
							}
							break;
						case "mouseout" :
							if (__kMouseCaptureHandler.target.onmouseout)
							{
								__kMouseCaptureHandler.target.onmouseout(evt);
							}
							break;
						case "click" :
							if (__kMouseCaptureHandler.target.onclick)
							{
								__kMouseCaptureHandler.target.onclick(evt);
							}
							break;
					}
					evt.cancelBubble = true;
					if (evt.stopPropagation)
					{
						evt.stopPropagation();
					}
				}
			}
		}
	}

	// prototype for mouse capture - bind to objects that must be able to capture mouse events
	var kMouseCapturePrototype = {
		bind : kBindable.bind,
		unbind : kBindable.unbind,

		prototype : {
			setCapture : function(containerCapture)
			{
				__kMouseCaptureHandler.setTarget(this, (containerCapture) ? true : false);
			},
			releaseCapture : function()
			{
				__kMouseCaptureHandler.resetTarget(this);
			}
		}
	}
}

//--- end of include guard
}
