function Ajax(url,method,cbf,errorJScode)
{
	this.act = false;
	this.xml = null;
	if(cbf===undefined)
	{
		this.cbf = function(JScode){try{eval(JScode);}catch(err){}}
	}
	else
	{
		this.cbf=cbf;
	}
	
	this.url = url;
	this.method = method;
	this.errorJScode = ""; //"alert('Connection error...');"; // kod ktery se vykona pri chybe
	if(errorJScode && errorJScode.length>0)
	{
		if(errorJScode.substr(0,3)=='++ ')		//  !! pokud posles argument, ktery bude zacinat '++ ',
												//   kod se prida k vychozimu errorJScode,
												//   jinak ho nahradi
		{
			this.errorJScode += errorJScode;
		}
		else
		{
			this.errorJScode = errorJScode;
		}
	}
	
	this.init();
}


Ajax.prototype.init = function()
{
	this.xml = (window.XMLHttpRequest ? new XMLHttpRequest() : (window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : null));
	if(!this.xml)
	{
		this.act = false;
	}
	else
	{
		this.act = true;
	}

	this.encFunc = encodeURIComponent ? encodeURIComponent : escape;
}


Ajax.prototype.sendRQ = function (parameters,async)
{

	var oAjax = this;
	if(!oAjax.act){ return; }
	if(oAjax.xml.readyState != 0){ oAjax.xml.abort(); }

    var aQs = oAjax.url.split("?");
    if(aQs.length > 1){
        oAjax.url = aQs[0];
        var aQS = "";
        var aQsx = aQs[1].split("&")
        
        for(var i=0; i<aQsx.length; i++){
            var aQSitem = aQsx[i].split("=");
            if(aQSitem.length>1 && aQSitem[0]!="uniq"){
                aQS += (aQS!=""? "&" : "?") + aQsx[i];
            }
        }
        oAjax.url += aQS;
    }
	oAjax.url += (oAjax.url.indexOf('?')>-1?'&':'?') + 'uniq=' + new Date().getTime();
	
	var sParams = '';
	var znak = "?";
	if(oAjax.url.indexOf('?')>-1)
	{
		znak="&";
	}
	
	for(var i=0; i<parameters.length; i++)
	{
		sParams += (sParams.length > 0 ? "&" : "") + parameters[i][0] +"="+ oAjax.encFunc(parameters[i][1]);
	}


	if(async === undefined){async = true;}
	if(oAjax.method.toUpperCase() == "GET")
	{
		oAjax.xml.open("GET",oAjax.url+(sParams.length>0?znak+sParams:""),async);
		if(Br.IE)
		{
			oAjax.xml.onreadystatechange = function(){oAjax.handleResponse(oAjax);}
		}
		else
		{
			oAjax.xml.onload = function(){oAjax.handleResponse(oAjax);}
			oAjax.xml.onerror = function(){try{eval(oAjax.errorJScode);}catch(err){}}
		}
		
		oAjax.xml.send('');
	}
	else
	{
		oAjax.xml.open("POST",oAjax.url,async);
		if(Br.IE)
		{
			oAjax.xml.onreadystatechange = function(){oAjax.handleResponse(oAjax);}
		}
		else
		{
			oAjax.xml.onload = function(){oAjax.handleResponse(oAjax);}
			oAjax.xml.onerror = function(){try{eval(oAjax.errorJScode);}catch(err){}}
		}
		oAjax.xml.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		oAjax.xml.setRequestHeader("Content-length", sParams.length);
		oAjax.xml.send(sParams);
	}	
	//setTimeout(function(){if(oAjax && (oAjax.xml.readyState==1 || oAjax.xml.readyState==2 || oAjax.xml.readyState==3)){oAjax.xml.abort();alert('Probably Client - Server communication error')}},10000);
}


Ajax.prototype.handleResponse = function(ajax)
{
	switch(ajax.xml.readyState){
		case 0:
			//uninitialized
			break;
		case 1:
			//loading
			break;
		case 2:
			//loaded
			break;
		case 3:
			//interactive
			break;
		case 4:
			//complete
			if(ajax.xml.status==200)
			{
				clearTimeout(this.time);
				if(typeof(ajax.cbf)=='function')
				{
					ajax.cbf(ajax.xml.responseText);
				}
			}else
			{
				//alert(ajax.xml.responseText);
				try{eval(ajax.errorJScode);}catch(err){}
			}
	}
}

