var request;
var urlFragment="http://localhost:8080/";
var st;

function getAllHeaders(url,styl){
   if(url){
      st=styl;
      httpRequest("GET",url,true);
   }
}

/* Ustawienie jednego lub wicej atrybutw stylu CSS na elemencie DOM 
 CSS2Properties Object.
Parametry:
   stType oznacza nazw stylu, na przykad 'plain,''fancy,''loud,' lub 'cosmo'.
   stylObj jest waciwoci stylu elementu HTML, na przykad div.style. */

function setStyle(stType,stylObj){
   switch(stType){
      case 'plain' : 
         stylObj.maxWidth="80%";
         stylObj.border="thin solid black"; 
         stylObj.padding="5%"
         stylObj.textShadow="none";
         stylObj.fontFamily="Arial, serif";
         stylObj.fontSize="0.9em";
         stylObj.backgroundColor="yellow"; break;
      case 'loud' : 
         stylObj.maxWidth="80%";
         stylObj.border="thin solid black"; 
         stylObj.padding="5%"
         stylObj.fontFamily="Impact, serif";
         stylObj.fontSize="1.4em";
         stylObj.textShadow="0 0 2.0em black";
         stylObj.backgroundColor="rgb(181,77,79)"; break;
      case 'fancy' :
         stylObj.maxWidth="80%";
         stylObj.border="thin solid black"; 
         stylObj.padding="5%"
         stylObj.fontFamily="Herculanum, Verdana, serif";
         stylObj.fontSize="1.2em";
         stylObj.fontStyle="oblique";
         stylObj.textShadow="0.2em 0.2em grey";
         stylObj.color="rgb(21,49,110)";
         stylObj.backgroundColor="rgb(234,197,49)"; break;
      case 'cosmo' :
         stylObj.maxWidth="80%";
         stylObj.border="thin solid black"; 
         stylObj.padding="1%"
         stylObj.fontFamily="Papyrus, serif";
         stylObj.fontSize="0.9em";
         stylObj.textShadow="0 0 0.5em black";
         stylObj.color="aqua";
         stylObj.backgroundColor="teal"; break;
      default : 
         alert('default');
   }
}

// Obsuga zdarze dla obiektu XMLHttpRequest.
function handleResponse(){
   try{
      if(request.readyState == 4){
         if(request.status == 200){
            /* Wszystkie nagwki s otrzymane jako pojedynczy cig tekstowy. */
            var headers = request.getAllResponseHeaders();
            var div = document.getElementById("msgDisplay");
            if(st){
               setStyle(st,div.style);
            } else {
               setStyle("plain",div.style);
            }
            div.innerHTML="<pre>"+headers+"</pre>";
         } else {
            // Jeeli aplikacja nie jest dostpna, wtedy stan dania wynosi 503,
            // natomiast w przypadku bdu w aplikacji stan dania wynosi 500.
            alert(request.status);
            alert("Wystpi problem z komunikacj midzy obiektem 
            XMLHttpRequest, "+
               "a programem serwera.");
         }
      }// Koniec zewntrznej ptli if.
   } catch (err) {
      alert("Serwer nie jest dostpny "+
         "dla tej aplikacji. Prosz wkrtce sprbowa"+
         " ponownie. \nBd: "+err.message);
   }
}

/* Inicjalizacja obiektu dania, ktry zosta ju skonstruowany. */
function initReq(reqType,url,bool){
   try{
      /* Okrelenie funkcji, ktra bdzie obsugiwaa odpowied HTTP. */
      request.onreadystatechange=handleResponse;
      request.open(reqType,url,bool);
      request.send(null);
   } catch (errv) {
      alert(
         "Aplikacja nie moe w tej chwili nawiza poczenia z serwerem."+
         " Prosz wkrtce sprbowa ponownie.");
   }
}

/* Funkcja opakowujca do skonstruowania obiektu dania.
Parametry:
   reqType: typ dania HTTP, na przykad GET lub POST.
   url: adres URL programu serwerowego.
   asynch: czy danie bdzie wysane asynchronicznie, czy te nie. */
function httpRequest(reqType,url,asynch){
   // Przegldarki na bazie Mozilli.
   if(window.XMLHttpRequest){
      request = new XMLHttpRequest();
   } else if (window.ActiveXObject){
      request=new ActiveXObject("Msxml2.XMLHTTP");
      if (! request){
         request=new ActiveXObject("Microsoft.XMLHTTP");
      }
   }

   // Jeeli nie powioda si nawet inicjalizacja ActiveXObject,
   // wwczas danie wci moe by typu null.
   if(request){
      initReq(reqType,url,asynch);
   } else {
      alert("Uywana przegldarka nie pozwala na wykorzystanie "+
         "wszystkich funkcji tej aplikacji!");
   }
}
