var formObj = null;
var formObjTyp = "";
var request=null;

// Obsugi zdarze pl danych wejciowych.
window.onload=function(){
   var txtA = document.getElementById("tarea");
   if(txtA != null){
      txtA.onblur=function(){if (this.value) { getInfo(this);}};   }

   var tfd = document.getElementById("tfield");
   if(tfd != null){
      tfd.onblur=function(){if (this.value) { getInfo(this);}};   }
}

function getInfo(obj){
   if (obj == null ) { return; }
   formObj=obj;
   formObjTyp =obj.tagName;
   if(formObjTyp == "input" || formObjTyp == "INPUT"){
      formObjTyp = formObjTyp + " "+formObj.type;
   }
   formObjTyp = formObjTyp.toLowerCase();
   var url = "http://www.parkerriver.com/s/webforms?objtype="+
      encodeURIComponent(formObjTyp)+"&val="+ encodeURIComponent(obj.value);
   httpRequest("GET",url,true);
}

// Obsuga zdarze dla obiektu XMLHttpRequest.
function handleResponse(){
   try{
      if(request.readyState == 4){
         if(request.status == 200){
            var resp = request.responseText;
            var func = new Function("return "+resp);
            var objt = func();
            if(formObjTyp == "textarea"){
               if(formObj != null){
                  formObj.value = objt.Form_field_type +
                     " liczba znakw: "+objt.Text_length+
                     "\nLiczba sw: "+
                     objt.Word_count+"\nInformacja serwera: "+
                     objt.Server_info;
               }
            } else if(formObjTyp == "input text"){
               if(formObj != null){
                  formObj.value = objt.Form_field_type +
                     " # znakw: "+objt.Text_length+
                     " Liczba sw: "+objt.Word_count; }
               }
         } else {
            // Warto waciwoci request.status wynosi 503, 
            // jeeli aplikacja jest niedostpna, oraz 
            // warto 500, jeli aplikacja zawiera bd.
            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!");
   }
}
