

	/*
	############################################################################ 
	######    GLOBALNI FUNKCE PRO ZJEDNODUSENOU PRACI S AJAXEM A DOMEM ######### 
	############################################################################ 
	*/
	
	
	//vytvari XMLHttpRequest objekt (ajaxovy request pro komunikaci se servletem)
	//kompatibilni s vetsinou browseru (IE5, Mozilla 1+,Safari 1.2+)
	function createXMLHttpRequest() 
	{
		try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
		try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
		try { return new XMLHttpRequest(); } catch(e) {}
		alert("XMLHttpRequest not supported");
		return null;
	}
	

	/*
	--STRING BUFFER EXAMPLE --
	var buf = new StringBuffer();
	buf.append("hello");
	buf.append("world");
	alert(buf.toString());
	*/	
	function StringBuffer() 
	{ 
		this.buffer = []; 
	} 
	
	StringBuffer.prototype.append = function append(string) 
	{
		this.buffer.push(string); 
		return this; 
	}; 
	
	StringBuffer.prototype.toString = function toString()
	{ 
		return this.buffer.join("");
	}; 


	//vraci pozici objektu od horni strany okna/framu
	function findTop(obj) 
	{
		var curTop = 0;
		if (obj.offsetParent) 
		{
			curTop = obj.offsetTop;
			while (obj = obj.offsetParent) 
				curTop += obj.offsetTop;
		}
		return curTop;
	}
	
	//vraci pozici objektu od leve strany okna/framu
	function findLeft(obj) 
	{
		var curLeft = 0;
		if (obj.offsetParent) 
		{
			curTop = obj.offsetLeft;
			while (obj = obj.offsetParent) 
				curLeft += obj.offsetLeft;
		}
		return curLeft;
	}

	//vraci sirku okna
	function getWidth()
	{
		if(this.innerWidth)
			return this.innerWidth;
		else
			return document.body.offsetWidth;
	}
	
	//vraci vysku okna
	function getHeight()
	{
		if(this.innerHeight)
			return this.innerHeight;
		else
			return document.body.offsetHeight;
	}
	
	//ziska target (element nad kterym byla udalost vyvolana) eventu
	function getEventTarget(e)
	{
		/*
		if(!e)
			return window.event.srcElement;
		else
			return e.target;
		*/
			
		
		if (window.event)
    		return window.event.srcElement;
 		else if (e)
    		return e.target;
    	else 
    		return null;
    	
	}
	
	//ziska udalost
	function getEvent(e)
	{
		/*
		if (window.event)
    		return window.event;
 		else if (e)
    		return e;
    	else 
    		return null;
    	*/
    	
    	if (!e) 
    		var e = window.event
    		
    	return e;
	}
	
	
	//chybejici DOM funkce
	function insertAfter(newElement, targetElement) 
	{
		var parent = targetElement.parentNode;
		
		if(parent.lastchild == targetElement) 
			parent.appendChild(newElement);
		else
			parent.insertBefore(newElement, targetElement.nextSibling);
	}
	
	
	//odebere event z objektu
	function removeEvent(obj, type, fn)
	{
		// Mozilla/W3C listeners?
		if (obj.removeEventListener)
			obj.removeEventListener(type, fn, false);
		// IE-style listeners?
		else if (obj.detachEvent)
			obj.detachEvent("on" + type, fn);
	}
	
	
	function getScrollLeft()
	{
		var ieBody = (document.compatMode && document.compatMode != "BackCompat") ? document.documentElement : document.body;
		return document.all? iebody.scrollLeft : pageXOffset
	}
	
	
	function getScrollTop()
	{
		var ieBody = (document.compatMode && document.compatMode != "BackCompat") ? document.documentElement : document.body;
		return document.all ? iebody.scrollTop : pageYOffset
	}
	
	
	function has_scrollbar(elem_id)
	{
		elem = document.getElementById(elem_id).parentNode;
		
		alert(elem.scrollHeight + ', ' + elem.scrollTop + ', ' + document.getElementById('devices').firstChild.nextSibling.offsetTop)
		/*
		if (elem.clientHeight < elem.scrollHeight)
			alert("The element has a vertical scrollbar!");
		else
			alert("The element doesn't have a vertical scrollbar.");
		*/
	}
	
	
	/**
	 * Create a new Document object. If no arguments are specified,
	 * the document will be empty. If a root tag is specified, the document
	 * will contain that single root tag. If the root tag has a namespace
	 * prefix, the second argument must specify the URL that identifies the
	 * namespace.
	 */ 
	function createXMLDocument(rootTagName, namespaceURL) { 
	  if (!rootTagName) rootTagName = ""; 
	  if (!namespaceURL) namespaceURL = ""; 
	  if (document.implementation && document.implementation.createDocument) { 
	    // This is the W3C standard way to do it 
	    return document.implementation.createDocument(namespaceURL, rootTagName, null); 
	  } 
	  else { // This is the IE way to do it 
	    // Create an empty document as an ActiveX object 
	    // If there is no root element, this is all we have to do 
	    var doc = new ActiveXObject("MSXML2.DOMDocument"); 
	    // If there is a root tag, initialize the document 
	    if (rootTagName) { 
	      // Look for a namespace prefix 
	      var prefix = ""; 
	      var tagname = rootTagName; 
	      var p = rootTagName.indexOf(':'); 
	      if (p != -1) { 
	        prefix = rootTagName.substring(0, p); 
	        tagname = rootTagName.substring(p+1); 
	      } 
	      // If we have a namespace, we must have a namespace prefix 
	      // If we don't have a namespace, we discard any prefix 
	      if (namespaceURL) { 
	      if (!prefix) prefix = "a0"; // What Firefox uses 
	      } 
	      else prefix = ""; 
	      // Create the root element (with optional namespace) as a 
	      // string of text 
	      var text = "<" + (prefix?(prefix+":"):"") +  tagname + 
	          (namespaceURL 
	           ?(" xmlns:" + prefix + '="' + namespaceURL +'"') 
	           :"") + 
	          "/>"; 
	      // And parse that text into the empty document 
	      doc.loadXML(text);
	    } 
	    return doc; 
	  } 
	}
	
	//ojeb kvuli IE
	function createInputElement(type, name, value) 
	{
		var element = null;
		
		// Try the IE way; this fails on standards-compliant browsers
		try 
		{
		 	element = document.createElement('<' + type + ' name="' + name + '" value="' + value + '">');
		} 
		catch (e) {}
		
		if (!element || element.nodeName != type.toUpperCase()) 
		{
			// Non-IE browser; use canonical method to create named element
			element = document.createElement(type);
			element.name = name;
			element.value = value;
		}
		
		return element;
	}
	
	//ojeb kvuli IE
	function createSelectElement(name) 
	{
		var element = null;
		
		// Try the IE way; this fails on standards-compliant browsers
		try 
		{
		 	element = document.createElement('<select name="' + name + '>');
		} 
		catch (e) {}
		
		if (!element) 
		{
			// Non-IE browser; use canonical method to create named element
			element = document.createElement('SELECT');
			element.name = name;
		}
		
		return element;
	}
	
	//vyextraktuje honotu nodu
	function getNodeValue(node, tag)
	{
		var parent = node.getElementsByTagName(tag)[0];
		
		if (parent.firstChild != null)
		{		
			return parent.firstChild.nodeValue;
		}
		else
		{
			return parent.nodeValue;
		}
	}
	
