	function createHttpRequest(){

		if(window.ActiveXObject){
			try {
				return new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					return new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e2) {
					return null;
	 			}
		 	}
		} else if(window.XMLHttpRequest){
			return new XMLHttpRequest();
		} else {
			return null;
		}
	}



	function ajax_dlink(oj,url)
	{
		var xhtoj = createHttpRequest()

		xhtoj.open("GET", url , true );

		xhtoj.onreadystatechange = function() 
		{
			if (xhtoj.readyState==4) 
			{
				if(chk_browser('konqueror'))
						str = utf8to16(xhtoj.responseText)
				else if(chk_browser('safari'))
						str = utf8to16(xhtoj.responseText)//dame
				else	str =  xhtoj.responseText
				document.getElementById(oj.parentNode.id).innerHTML = str
			}
		}
	
		xhtoj.send("")
	}


	function chk_browser(browserName)
	{
		var ua = navigator.userAgent

		switch (browserName)
		{
			case 'konqueror' :
				 return  ua.indexOf("Konqueror") != -1 ; break ;
			case 'safari' :
				 return  ua.indexOf("Safari") != -1 ; break ;

			dafault :
				return false ; break ;
		}
	}

	
	function utf16to8(str) {
	    var out, i, len, c;
	
	    out = "";
	    len = str.length;
	    for(i = 0; i < len; i++) {
		c = str.charCodeAt(i);
		if ((c >= 0x0001) && (c <= 0x007F)) {
		    out += str.charAt(i);
		} else if (c > 0x07FF) {
		    out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
		    out += String.fromCharCode(0x80 | ((c >>  6) & 0x3F));
		    out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));
		} else {
		    out += String.fromCharCode(0xC0 | ((c >>  6) & 0x1F));
		    out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));
		}
	    }
	    return out;
	}
	
	function utf8to16(str) {
	    var out, i, len, c;
	    var char2, char3;
	
	    out = "";
	    len = str.length;
	    i = 0;
	    d=""
	    while(i < len) {
			c = str.charCodeAt(i++);
			d+=c
			switch(c >> 4)
			{ 
			  case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
			    out += str.charAt(i-1);
			    break;
			  case 12: case 13:
			    char2 = str.charCodeAt(i++);
			    out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
			    break;
			  case 14:
			    char2 = str.charCodeAt(i++);
			    char3 = str.charCodeAt(i++);
			    out += String.fromCharCode(((c & 0x0F) << 12) |
							   ((char2 & 0x3F) << 6) |
							   ((char3 & 0x3F) << 0));
			    break;
			}
	    }alert(d)
	
	    return out;
	}
