	
	var _bin2hex = [
		'0', '1', '2', '3', '4', '5', '6', '7',
		'8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
	];

	var _hex2bin = [
		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, // 0-9
		 0,10,11,12,13,14,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, // A-F
		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		 0,10,11,12,13,14,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, // a-f
		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	];

	function bin2hex(str) {
		var len = str.length;
		var rv = '';
		var i = 0;
		var c;
		
		while (len-- > 0) {
			c = str.charCodeAt(i++);

			rv += _bin2hex[(c & 0xf0) >> 4];
			rv += _bin2hex[(c & 0x0f)];
		}

		return rv;
	}

	function hex2bin(str) {
		var len = str.length;
		var rv = '';
		var i = 0;

		var c1;
		var c2;

		while (len > 1) {
			h1 = str.charAt(i++);
			c1 = h1.charCodeAt(0);
			h2 = str.charAt(i++);
			c2 = h2.charCodeAt(0);
			
			rv += String.fromCharCode((_hex2bin[c1] << 4) + _hex2bin[c2]);
			len -= 2;
		}

		return rv;
	}

	function getNode( nodeId )
			{
			if( document.getElementById )
				return document.getElementById( nodeId );
			else if( document.all && document.all( nodeId ) )
				return document.all( nodeId );
			else if( document.layers && document.layers[ nodeId ] )
				return document.layers[ nodeId ];
			else
				return false;
			}

	function removeNodeElement( n )
		{
			// не міняти на parent.....IE та OPERA зразу вмирають...
			parentNd = n.parentNode;
			parentNd.removeChild(n);
		}
		
		
	function XmlParser(textString)
		{
			if (window.DOMParser)
			  {
			  parser=new DOMParser();
			  xmlDoc=parser.parseFromString(textString,"text/xml");
			  }
			else // Internet Explorer
			  {
			  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
			  xmlDoc.async="false";
			  xmlDoc.loadXML(textString);
			  }
			return xmlDoc;
		}

	function getValue(nodeId)
		{
		if(a=getNode(nodeId))
			{return(a.value);}
		}

	function setValue(nodeId, value)
		{
		if(a=getNode(nodeId))
			{a.value=value;}
		}

	function showNode(id)
		{
		if(node_id=getNode(id))
			{
			if((node_id.tagName=="TR") || (node_id.tagName=="tr"))
				{display="table-row";}
			else
				{display="inline";}
			node_id.style.display="block";
			}
		}

	function showNodeV(id)
		{
		if(node_id=getNode(id))
			{node_id.style.visibility="visible";}
		}

	function hideNode(id)
		{
		if(node_id=getNode(id))
			{node_id.style.display="none";}
		}
	function hideNodeV(id)
		{
		if(node_id=getNode(id))
			{node_id.style.visibility="hidden";}
		}

	function showHideNode(id)
		{
		if(node_id=getNode(id))
			{
				if(node_id.style.display=="block")
					{node_id.style.display="none";}
				else
					{node_id.style.display="block";}
			}
		}

	function chNodeBg(id, node_src)
		{
		if(node_id=getNode(id))
			{node_id.style.background="url("+node_src+")";
			}
		}

	function chNodeBgParam(id, node_src, param)
		{
		if(node_id=getNode(id))
			{node_id.style.background="url("+node_src+") "+param;}
		}

	function chNodeBgcolor(id, bgColor)
		{
		if(node_id=getNode(id))
			{node_id.style.background=bgColor;
			}
		}

	function chNodeSrc(id, nodeSrc)
		{
		if(node=getNode(id))
			{node.src=nodeSrc;}
		}

	function chNodeWH(id, w, h)
		{
		if(node=getNode(id))
			{
			node.width=w;
			node.height=h;
			}
		}

	function chNodeClassName(id, nodeClassName)
		{
		if(node=getNode(id))
			{node.className=nodeClassName;}
		}

	function chDocumentLocation(newLocation)
		{window.document.location=newLocation;}


	function nodeChecked(nodeId)
		{
		if(node=getNode(nodeId))
			{node.checked=true;}
		}

	function nodeUnchecked(nodeId)
		{
		if(node=getNode(nodeId))
			{node.checked=false;}
		}

	function addMyEvent( node, evtType, func )
			{
			if( node.addEventListener )
				{
				node.addEventListener( evtType, func, false );
				return true;
				}
			else if( node.attachEvent )
				return node.attachEvent( "on" + evtType, func );
			else
				return false;
			}

	function addEvent( node, evtType, func )
			{
			if( node.addEventListener )
				{
				node.addEventListener( evtType, func, false );
				return true;
				}
			else if( node.attachEvent )
				return node.attachEvent( "on" + evtType, func );
			else
				return false;
			}

	function printpr(OLECMDID) 
		{ 
		var PROMPT = 1;
		var WebBrowser = '<OBJECT ID="WebBrowser1" WIDTH=0 HEIGHT=0 CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></OBJECT>'; 
		document.body.insertAdjacentHTML('beforeEnd', WebBrowser); 
		WebBrowser1.ExecWB(OLECMDID,PROMPT); 
		WebBrowser1.outerHTML = ""; 
		} 

	function getNodeDocumentTopLeft(nodeId)
		{
		if(node=getNode(nodeId))

			{
			var left = 0;
			var top = node.offsetTop;
			var tmp = node;
			while(tmp!=null && tmp.tagName!="BODY")
				{
				if( tmp.tagName == "html:body" ) break;
				left += tmp.offsetLeft;
				top  += tmp.offsetTop;
				tmp = tmp.offsetParent;
				}
			ret= new Array();
			ret["left"]=left;
			ret["top"]=top;
			return(ret);
			}
		}

	function insertToNodeText(nodeId, nodeText)
		{
		if(node=getNode(nodeId))
			{node.outerText=nodeText;}
		}

	function insertToNodeTextHTML(nodeId, nodeText)
		{
		if(node=getNode(nodeId))
			{node.outerHTML=nodeText;}
		}

	function sendMyAJAXRequest(url, params, method, succesCallBack, errorCallBack)
		{
		var paramString="";
		for(var key in params)
			{ paramString=paramString+ key+'='+params[key]+'&'; }

		var myRequest = new ajaxObject(url);
		myRequest.callback = function(responseText, responseStatus, responseXML)
			{
			if (responseStatus==200)
				{ succesCallBack(responseText); }
			else
				{ errorCallBack(responseStatus); }
			}
		myRequest.update(paramString, method, true);
		}

	function procesResponseMyData(responseText)
		{
	//	alert(responseText);

		var JSONtext=responseText;
		var JSONobject=null;
		try
			{ JSONobject = JSON.parse(JSONtext); }
		catch(exception)
			{
			try
				{ JSONobject=eval('(' + JSONtext + ')'); }
			catch(exp)
				{
				if(responseText=="")
					{ alert("Cannot parse data"); }
				else
					{ }
				}
			}
		return(JSONobject);
		}
		
	function absPosition(obj) {
		  var x = y = 0;
		  while(obj) {
				x += obj.offsetLeft;
				y += obj.offsetTop;
				obj = obj.offsetParent;
		  }
		  return {x:x, y:y};
	} 	

	// Вибираэмо спільні елементи
	function diffArray(arr1,arr2)
	{
		if (arr1.length==0)
			return arr2;
		
		if (arr2.length==0)
			return arr1;
			
		newArray = new Array();
		c = 0;
		for (i=0;i<arr1.length;i++)
		{	
			addToNew = true;
			for (j=0;j<arr2.length;j++)
				if (arr1[i] == arr2[j])
				{
				addToNew = false;
				break;
				}
			if (addToNew==true)
			{
				newArray[c] = arr1[i];
				c = c + 1;
			}			
		}
		return 	newArray;
	}
		
	function concat_set(arr1,arr2)
	{
		rA = new Array();
		count = 0;
		nA = arr1.concat(arr2);
		if (nA.length > 0)
		{			
			for (i = 0;i < nA.length;i++)
			{
				ell = true;
				for (j = i + 1;j<nA.length;j++)
					if (nA[i] == nA[j])	ell = false;
					
				if (ell==true)
				{
					rA[count] = nA[i];
					count++;
				}					
			}
		}
		return rA;	
	}
	//вибирає всы елементи якы не э спільні
	function EqualArray(arr1,arr2)
	{	
		rA = new Array();
		count = 0;
		nA = arr1.concat(arr2);
		if (nA.length > 0)
		{			
			for (i = 0;i < nA.length;i++)
			{
				ell = false;
				if (nA[i] == -1)	continue;
				for (j = i + 1;j<nA.length;j++)
					if (nA[i] == nA[j])	
					{
						ell = true;
						nA[j] = -1;
					}
					
				if (ell==true)
				{
					rA[count] = nA[i];
					count++;
				}					
			}
		}
		
		return rA;	
	}

	function setCookie(c_name,value,expiredays)
	{
		var exdate=new Date();
		exdate.setDate(exdate.getDate()+expiredays);
		document.cookie=c_name+ "=" +escape(value)+ "; path=/"+
		((expiredays==null) ? "" : ";expires="+exdate.toUTCString());
	}

	function getCookie(c_name)
	{
		if (document.cookie.length>0)
		{
		  c_start=document.cookie.indexOf(c_name + "=");
		  if (c_start!=-1)
			{
			c_start=c_start + c_name.length+1;
			c_end=document.cookie.indexOf(";",c_start);
			if (c_end==-1) c_end=document.cookie.length;
			return unescape(document.cookie.substring(c_start,c_end));
			}
		}
		return "";
	}
	 
	//допоміжна функція повертає вміст обєкта....працює в opera 
	function concatObject(obj) {
	  str='';
	  for(prop in obj)
	  {
		alert(prop);
		//str+=prop + " value :"+ obj[prop]+"\n";
		str+=prop + "\n";
	  }
	  return(str);
	}

