// Een JavaScript class om een json processor aan te roepen
/*
  usage

  var bla=null;
  jsonProc=new JsonProc({
    			  url:"http://log.krak.nl/processor,
			  command:"send-data",
			  data:dataobject,
  			},
  			function(theobject){
    				response=theobject;
				if(response){
				  alert("Hoera");
				}
			}
		);
*/


function freeze(obj){
             return JSON.stringify(obj,null,' ');
}

function jthaw(text){
  return JSON.parse(text);
}


 function JsonProc(procobject,callback){

    this.request = false;
    var url=procobject.url;
    
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest) {
      try {
       this.request = new XMLHttpRequest();
      } catch(e) {
       this.request = false;
      }
    // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
      try {
      	this.request = new ActiveXObject("Msxml2.XMLHTTP");
      } catch(e) {
          try {
            this.request = new ActiveXObject("Microsoft.XMLHTTP");
          } catch(e) {
            this.request = false;
          }
      }
    }
    var self=this 
    this.message="Hiephoi";
    if(this.request) {
		this.request.onreadystatechange = function(){
		    if(self.request.readyState==4){
		      self.request.onreadystatechange=function(){};
		      self.handler();
		    }
		  };
		this.request.open("POST", url, true);
                this.request.setRequestHeader('Content-type','application/x-www-form-urlencoded');
		this.request.send("request=" + encodeURIComponent(freeze(procobject)));
    }else{
      return null;
    }

    this.handler=function(){
      if(this.request.readyState==4 &&
	 this.request.status==200){
	 this.response=jthaw(this.request.responseText);
	 if(this.response !== false){
   	   callback(this.response);
	 }else{
	   alert("handler error: JSONPROC: "+this.request.responseText);
	 }
	 return;
      }
      callback(false);
    }
   
 }//end of JsonProc class definition


// Een JavaScript class om een json file down te loaden 
/*
  usage

  var bla=null;
  jsonProc=new JsonGet("http://log.krak.nl/database.json",
  			function(theobject){
    				response=theobject;
				if(response){
				  alert("Hoera");
				}
			}
		);
*/
 function JsonGet(url,callback){

    this.request = false;
    var url=url;
    
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest) {
      try {
       this.request = new XMLHttpRequest();
      } catch(e) {
       this.request = false;
      }
    // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
      try {
      	this.request = new ActiveXObject("Msxml2.XMLHTTP");
      } catch(e) {
          try {
            this.request = new ActiveXObject("Microsoft.XMLHTTP");
          } catch(e) {
            this.request = false;
          }
      }
    }
    var zelf=this 
    this.message="Hiephoi";

    this.handler=function(){
      if(this.request.readyState==4 &&
	 this.request.status==200){
	if(this.request.responseText ==undefined){
	  callback(null);
	  return;
	}
	 this.response=jthaw(this.request.responseText);
	 if(this.response !== false){
   	   callback(this.response);
	 }else{
	   alert(this.request.responseText);
	 }
	 return;
      }
      callback(false);
    }

    if(this.request) {
		this.request.onreadystatechange = function(){
		    if(zelf.request.readyState==4){
		      zelf.request.onreadystatechange=function(){};
		      zelf.handler();
		    }
		  };
		this.request.open("GET", url, true);
		this.request.send("");
    }else{
      return null;
    }

   
 }//end of JsonGet class definition


//[F9 cp jsonproc.js /home/jacco/vid/radio]




