function URLEncode(plaintext )
	{
		// The Javascript escape and unescape functions do not correspond
		// with what browsers actually do...
		var SAFECHARS = "0123456789" +					// Numeric
						"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +	// Alphabetic
						"abcdefghijklmnopqrstuvwxyz" +
						"-_.!~*'()";					// RFC2396 Mark characters
		var HEX = "0123456789ABCDEF";
	
		if(!isNaN(plaintext))
			return plaintext;
		
		
		
		var encoded = "";
		for (var i = 0; i < plaintext.length; i++ ) {
			var ch = plaintext.charAt(i);
			if (ch == " ") {
				encoded += "+";				// x-www-urlencoded, rather than %20
			} else if (SAFECHARS.indexOf(ch) != -1) {
				encoded += ch;
			} else {
				var charCode = ch.charCodeAt(0);
				if (charCode > 255) {
					alert( "Unicode Character '" 
							+ ch 
							+ "' cannot be encoded using standard URL encoding.\n" +
							  "(URL encoding only supports 8-bit characters.)\n" +
							  "A space (+) will be substituted." );
					encoded += "+";
				} else {
					encoded += "%";
					encoded += HEX.charAt((charCode >> 4) & 0xF);
					encoded += HEX.charAt(charCode & 0xF);
				}
			}
		} // for
	
		
		return encoded;
	};

	function URLDecode(encoded )
	{
	   // Replace + with ' '
	   // Replace %xx with equivalent character
	   // Put [ERROR] in output if %xx is invalid.
	   var HEXCHARS = "0123456789ABCDEFabcdef"; 
	  
	   var plaintext = "";
	   var i = 0;
	   while (i < encoded.length) {
		   var ch = encoded.charAt(i);
		   if (ch == "+") {
			   plaintext += " ";
			   i++;
		   } else if (ch == "%") {
				if (i < (encoded.length-2) 
						&& HEXCHARS.indexOf(encoded.charAt(i+1)) != -1 
						&& HEXCHARS.indexOf(encoded.charAt(i+2)) != -1 ) {
					plaintext += unescape( encoded.substr(i,3) );
					i += 3;
				} else {
					alert( 'Bad escape combination near ...' + encoded.substr(i) );
					plaintext += "%[ERROR]";
					i++;
				}
			} else {
			   plaintext += ch;
			   i++;
			}
		} // while
	   return plaintext;
	
	};

	function ajax()
	{
		this.g_handler_func = "";
	}
	
	ajax.setProgressFunc = function(func)
	{
		this.progress_handler = func;
	}
	
	ajax.construct = function()
	{
		var httpRequest;
		var str;

        if (window.XMLHttpRequest) 
		{ // Mozilla, Safari, ...
            httpRequest = new XMLHttpRequest();
            if (httpRequest.overrideMimeType) 
			{
                httpRequest.overrideMimeType('text/xml');
                // See note below about this line
            }
        } 
        else if (window.ActiveXObject) { // IE
            try {
                httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
                } 
                catch (e) {
                           try {
                                httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
                               } 
                             catch (e) {}
                          }
        }


        if (!httpRequest) {
            alert('Giving up :( Cannot create an XMLHTTP instance');
            return false;
        }
		
		return httpRequest;
	
	}
	
	ajax._includeprocess = function(a,data,c)
	{
		eval(data);
	}
	
	ajax.include = function(url)
	{
		alert("o");
		ajax.call("include.php",ajax._includeprocess,{url:url});
	}
	
	ajax.call = function(url,handler_func,content,sync)
	{
		var req = ajax.construct();
		
		if(content)
			content['page_name'] = "**page_name**";
		else
			content = "";
		
		if(handler_func)
			this.g_handler_func = handler_func;
		
		if(!sync)
			sync = true;
			
		if(!handler_func)
			sync = false;
    
		if(handler_func)
		{
			
			req.onreadystatechange = function() 
			{
				
				if (req.readyState == 4) 
				{				
					if(req.status==200)
					{
						//var code = handler_func + '(' + content + ',"' + req.responseText + '",1);';
						//alert(code);
						//eval(code);
						//alert(req.responseText);
						
						handler_func.call(this,content,req.responseText);
					}
					else	
						alert("Ajax Error - Page not Loaded, Error code " + req.status + " returned. (Page was " + url + ")");
					
				} 
					//ajaxresponse(req); 
			};
		}
		else
		{
			req.onload = function()
			{
				ajax.responseText = req.responseText;
			}
		}
		
		

		req.open('POST', url, sync);
		
		req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		var str = "";
		if(content)
		{
			
			for (var key in content) 
			{
				
				str += URLEncode(key);
				str += "=";
				
				str += URLEncode(content[key]);
				str += "&";
			}
			
			
		}
		
		
        req.send(str);
		
		return this.responseText;
}

