﻿/*******************************************Klasa AJAXFrącz Wojciech - Vojtek =)ALL RIGHTS RESERVED =DPrzykład użycia:XMLObject = new AJAX();XMLObject.metoda='POST';  	//przestawia na POSTXMLObject.async=true;		// asynchronicznieXMLObject.zwrotna=function(odpowiedz){alert("Odpowiedź serwera: " + odpowiedz);}XMLObject.loading=funciton(){alert("Zawartość jest w tej chwili ładowana");}XMLObject.przeslij('skrypt.php','zmienna1=wartosc1&zmienna2=wartosc2');********************************************/function AJAX() {}AJAX.prototype = {metoda: 'POST',  		//jak przesyłane są danekolejka: new Array(), 	// do kolejkowania zapytańkolejkaAdr: new Array(),//do kolejkowania adresówasync: true, 			// asynchroniczne?obj:false,  			// przechowa obiekt XMLHttpRequestzwrotna:function(odp){alert(odp);},  // funkcja zwrotna, domyślnie wywala odpowiedź na alertloading:false,  		// funkcja uruchamiana podczas ładowania zawartościblad:function(e){ alert("Blad: "+e); }, //pokazywanie błędówinit:function(){  		//inicjalizuje XMLHttpRequesttry  {    this.obj = new XMLHttpRequest();  }  catch(e)  {    var XmlHttpVersions = 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<XmlHttpVersions.length && !this.obj; i++)     {      try       {         this.obj = new ActiveXObject(XmlHttpVersions[i]);      }       catch (e) {}    }  }  if (!this.obj)    this.blad("Błąd podczas tworzenia obiektu XMLHttpRequest.");},przeslij: function(adres,dane){  //ustawia zapytania w kolejce i wysyła zapytanie	if(!this.obj)this.init();	if(adres){		this.kolejka.push(dane);		this.kolejkaAdr.push(adres);	}	if((this.obj.readyState==4 || this.obj.readyState==0)&&this.kolejkaAdr.length>0){		var biezacy=this.kolejka.shift();		var biezacyAdr=this.kolejkaAdr.shift();		if(this.metoda=='GET'){		try{//modified 31.01.08			this.obj.open("GET",biezacyAdr+'?'+biezacy,this.async);			var self=this;			this.obj.onreadystatechange = function(){ self._obserwuj(); }			this.obj.send(null);			}catch(e){this.blad(e);}//modified 31.01.08		}		else{		try{//modified 31.01.08			this.obj.open("POST",biezacyAdr,this.async);			var self=this;			this.obj.setRequestHeader('Content-type','application/x-www-form-urlencoded;charset=utf-8;');			this.obj.onreadystatechange = function(){ self._obserwuj(); }			this.obj.send(biezacy);			}catch(e){this.blad(e);}//modified 31.01.08		}	if(!this.async) this.zwrotna(this.obj.responseText);	}},_obserwuj: function(){	// prywatna funkcja obsługująca odpowiedź serwera	switch(this.obj.readyState){		case 2: if(this.loading)this.loading(); break;		case 4: if(this.obj.status == 200)this.zwrotna(this.obj.responseText);				else this.blad(this.obj.status+': '+this.obj.statusText);				this.przeslij('','');				break;	}}}
