var ajax = {
//=================================================================================================
xmlHttp : null,

types : {
 text : ['text'], 
 xml : ['xml']
},

typesForm : {
 post : ['post'],
 get : ['get']
},

asyn : true,
url : '',
params : '',
type : null,
typeForm : null,
handleRequestStateChange : null,

//=================================================================================================
 createXHR : function()
 {
  var xmlHttp;
  try
  {
   xmlHttp = new XMLHttpRequest();
  }
  catch(e)
  {
   var xhrVersions = new Array ('MSXML2.XMLHttp.6.0','MSXML2.XMLHttp.5.0','MSXML2.XMLHttp.4.0','MSXML2.XMLHttp.3.0','MSXML2.XMLHttp','Microsoft.XMLHttp');
   for(var i=0;i<xhrVersions.length && !xmlHttp ;i++)
   {
    try
    {
      xmlHttp = new ActiveXObject(xhrVersions[i]);
    }
    catch(e) {  }
   }
  }

 if(!xmlHttp) { alert("Błąd podczas utworzenia objektu XMLHttpRequest() ");  }
 else
 {
  return xmlHttp;
 }
},

//-------------------------------------------------------------------------------------------------
setType : function(sType)
{
  if(sType == ajax.types.text) {
    ajax.type = ajax.types.text;  
  }
  else{
   ajax.type = ajax.types.xml;  
  }

},
//-------------------------------------------------------------------------------------------------
setTypeForm : function(sType)
{
  if(sType == ajax.typesForm.post) {
    ajax.typeForm = ajax.typesForm.post;  
  }
  else{
   ajax.typeForm = ajax.typesForm.get;  
  }
},
//-------------------------------------------------------------------------------------------------
setUrl : function(url)
{
  ajax.url = url;
},
//-------------------------------------------------------------------------------------------------
createParams : function()
{
 var r = (arguments.length % 2);
 if(arguments.length > 0 && r == 0)
 {
   for(var i=0;i<arguments.length;i++)
   {
     if((i % 2) == 0) { ajax.params += '&' + encodeURIComponent(arguments[i]) + '='; }
     else { ajax.params += encodeURIComponent(arguments[i]); }
   }
 }
 else {
  alert('nieprawidłowa liczba argumentów!');
 }
},
//-------------------------------------------------------------------------------------------------
setParams : function()
{
 ajax.params = '';
 ajax.createParams.apply(this,arguments);
},
//-------------------------------------------------------------------------------------------------
addParams : function()
{
  ajax.createParams.apply(this,arguments);
},
//-------------------------------------------------------------------------------------------------
clearParams : function()
{
 ajax.params = '';
},
//-------------------------------------------------------------------------------------------------
abort : function()
{
 ajax.xmlHttp.abort();
},
//-------------------------------------------------------------------------------------------------
runAction : function(handler)
{
 if(!ajax.xmlHttp) ajax.xmlHttp = ajax.createXHR();

 try
 {
  if(!ajax.handleRequestStateChange) { alert('brak handleRequestStateChange');return false; }
  if(!ajax.url || ajax.url == '') { alert('brak podane adresu url');return false; }

  if(ajax.xmlHttp && ajax.xmlHttp.readyState == 0 || ajax.xmlHttp.readyState == 4)
  {   
   ajax.xmlHttp.abort();      
   ajax.xmlHttp.open(ajax.typeForm,ajax.url, ajax.asyn);
   ajax.xmlHttp.onreadystatechange = ajax.handleRequestStateChange;

   ajax.xmlHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded;');
   ajax.xmlHttp.send(ajax.params);
     
  }
 }
 catch(e)
 {    
   alert("wystąpił błąd podczas wysyłania danych: \n" + e.description);

 }
}
//=================================================================================================
}
