	// Common DOM functions

	function createElementEx(owner, tag, params, styles)
	{
		var element = document.createElement(tag);

		if (params)
		{
		    for(par in params)
		        element[par] = params[par];
		}

		if (styles)
		{
		    for(st in styles)
		        element.style[st] = styles[st];
		}

		owner.appendChild(element);

		return element;
	}

	function createTextEx(owner, caption)
	{
		var element = document.createTextNode(caption);
		owner.appendChild(element);
	}

	function updateElement(elementId, elementValue)
	{
		var element = document.getElementById(elementId);

		if (!element)
			return;

		removeAllChilds(element);
		createTextEx(element, elementValue);
	}

	function getMousePosition(event)
	{
	    var canvas = document.getElementsByTagName((document.compatMode && document.compatMode == "CSS1Compat") ? "HTML" : "BODY")[0];
	    var mousex = event.clientX + canvas.scrollLeft - 140;
	    var mousey = event.clientY + canvas.scrollTop - 110;

	    var position = new Array(mousex, mousey);
	    return position;
	}

	function removeAllChilds(element)
	{

		var childsCount = element.childNodes.length;
		for (var i = 0; i < childsCount; i++)
			element.removeChild(element.lastChild);
	}

	// Common AJAX functions

	var xmlDocument = null;
	var responceHandler = null;

	function setResponceHandler(handler)
	{
		responceHandler = handler;
	}

	function createXMLDoc()
	{
		if (window.XMLHttpRequest)
		{
			try
			{
				xmlDocument = new XMLHttpRequest();
			}
			catch(e)
			{
				xmlDocument = null;
			}
			return;
		}

		if (window.ActiveXObject)
		{
			try
			{
				xmlDocument = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch(e)
			{
				xmlDocument = null;
			}

			if (xmlDocument != null)
				return;

			try
			{
				xmlDocument = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(e)
			{
				xmlDocument = null;
			}
		}
	}

	function isAJAXAvailable(force)
	{
		if (force || xmlDocument == null)
			createXMLDoc();
		return (xmlDocument != null);
	}

	function loadXMLDoc(url)
	{
		if (!isAJAXAvailable(true))
			return;

		xmlDocument.onreadystatechange = processReqChange;
		xmlDocument.open("GET", url, true);
		xmlDocument.send("");
	}

	function processReqChange()
	{
		if (xmlDocument.readyState != 4)
			return;

		if (xmlDocument.status != 200)
			return;

		var response = xmlDocument.responseXML.documentElement;
		if (!response)
			return;

		responceHandler(response);
	}