
function getHttpRequest(url, params, _onload, json)
{
	var httpRequest = false;
	
	if(typeof(json) == 'undefined')
	{
		json = false;
	}
	

	if (window.XMLHttpRequest) 
	{
		httpRequest = new XMLHttpRequest();
		if (httpRequest.overrideMimeType) 
		{
			if (json)
			{
				
				httpRequest.overrideMimeType('application/json');
			}
			else
			{
				httpRequest.overrideMimeType('text/xml');
			}
		}
	}
	else if (window.ActiveXObject) 
	{
		try 
		{
			httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch (e)
		{
			try
			{
				httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e) 
			{
			}
		}
	}

	if (!httpRequest)
	{
		alert('Unfortunatelly you browser doesn\'t support this feature.');
		return false;
	}

	httpRequest.onreadystatechange = function()
	{
		if (httpRequest.readyState == 4)
		{
			if (httpRequest.status == 200 || httpRequest.status == 0) 
			{

				if (json) {
					processJson(httpRequest.responseText, _onload);
				}
				else
				{
					if(elem_main = document.getElementById("xml_http_tmp"))
					{						
						//alert(_onload);
						//alert(httpRequest.responseText);
						elem_main.innerHTML = httpRequest.responseText;
						processResponce(elem_main, _onload);
						try{initSocieteLinks();}catch(e){}
					}
				}
			}
			else
			{
				alert('There was a problem with the request.(Code: ' + httpRequest.status + ')');
			}
		}
	}

	if(params == undefined || params == null)
	{
		httpRequest.open('GET', url, true);
		httpRequest.send(null);
	}
	else
	{
		httpRequest.open('POST', url, true);
		httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		httpRequest.setRequestHeader("Content-length", params.length);
		httpRequest.setRequestHeader("Connection", "close");
		httpRequest.send(params);
	}
}

function processJson(answer, _onload) {
	if(typeof answer == "string")
	{
		var json = eval( '' + answer + '');
	}
	else
	{
		var json = answer;
	}
	eval(_onload(json));
}

function processResponce(tmp, _onload)
{
	var nodes = tmp.getElementsByTagName("div");
	for (var i=0; i < nodes.length; i++)
	{	
		var new_id = nodes[i].id.replace(new RegExp("-tmp"), "");
		var	somediv = document.getElementById(new_id);
		if(somediv)
		{
			somediv.innerHTML = nodes[i].innerHTML;
		}
	}
	tmp.innerHTML = '';
	if (_onload) {
		eval("" + _onload + "");
	}
}

function getFormParams(obj)
{
	params = "";
	if(obj)
	{
		var nodes = obj.getElementsByTagName("input");
		for (var i=0; i < nodes.length; i++)
		{
			if(nodes[i].name && nodes[i].type == "radio")
			{
				if(nodes[i].checked)
				{
					params += "&" + nodes[i].name + "=" + _encodeURI(nodes[i].value,nodes[i].name);
				}
			}
			else
			{
				params += "&" + nodes[i].name + "=" + _encodeURI(nodes[i].value,nodes[i].name);
			}
				
		}		
		var nodes = obj.getElementsByTagName("select");
		for (var i=0; i < nodes.length; i++)
		{
			if(nodes[i].name)
			{
				if(nodes[i].multiple == 1)
				{
					var onodes = nodes[i].getElementsByTagName("option");
					for (var j=0; j < onodes.length; j++)
					{
						if(onodes[j].selected)
						{
							params += "&" + nodes[i].name + "[]=" +  _encodeURI(onodes[j].value,nodes[i].name);							
						}
					}
				}
				else
				{
					params += "&" + nodes[i].name + "=" +  _encodeURI(nodes[i].value,nodes[i].name);					
				}
			}
		}					
		var nodes = obj.getElementsByTagName("textarea");
		for (var i=0; i < nodes.length; i++)
		{
			if(nodes[i].name)
			{
				params += "&" + nodes[i].name + "=" +  _encodeURI(nodes[i].value,nodes[i].name);
			}
		}					
	}
	return params;
}

function _encodeURI(str,name)
{
	if(name.indexOf("_") == 0)
	{
		return base64_encode(str);
	}
	else
	{
		return encodeURI(str);
	}
}

	
function base64_encode(input)
{
	var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
	var output = "";
	var chr1, chr2, chr3;
	var enc1, enc2, enc3, enc4;
	var i = 0;
	 
	do {
		chr1 = input.charCodeAt(i++);
		chr2 = input.charCodeAt(i++);
		chr3 = input.charCodeAt(i++);

		enc1 = chr1 >> 2;
		enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
		enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
		enc4 = chr3 & 63;

		if (isNaN(chr2)) {
			enc3 = enc4 = 64;
		} else if (isNaN(chr3)) {
			enc4 = 64;
		}

		output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) +
			keyStr.charAt(enc3) + keyStr.charAt(enc4);
	} while (i < input.length);

	return output;
}


