var AjaxUpdTarget = null;
var AjaxUpdMode = "";

    /*try {
     //netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
    } catch (e) {
     //alert("Permission UniversalBrowserRead denied.");
    }*/

var AjaxClass = function()
{
	this.xmlHttp = false;
	this.xmlHttp_coll = [];
	this.url = "";
	this.updateFun = null;
	this.updateFunCB = null;

	this.Create = function(url, updateFun)
	{

		if(!this.xmlHttp&&typeof XMLHttpRequest != 'undefined'){
			this.xmlHttp = new XMLHttpRequest();
		}

		this.url = url;
		this.updateFun = updateFun;
	}

	this.Open = function(url, param, updateFun, updateFunCB, UpdTarget, UpdMode)
	{
	  if(!this.xmlHttp&&typeof XMLHttpRequest != 'undefined'){
			xmlHttp = new XMLHttpRequest();
	  }
     try {
    
      if (typeof UpdTarget == "undefined") UpdTarget = AjaxUpdTarget;
      if (UpdTarget == null) UpdTarget = AjaxUpdTarget;
      xmlHttp.UpdTarget = UpdTarget;
      if (typeof UpdMode == "undefined") UpdMode = AjaxUpdMode;
      if (UpdMode == null) UpdMode = AjaxUpdMode;
      xmlHttp.UpdMode = UpdMode;
      
      if (typeof updateFunCB == "undefined") updateFunCB=null;
	  xmlHttp.updateFunCB = updateFunCB;
	  if (url==null) url = this.url;
 
      if (param==null) param = '';
      if (updateFun==null) updateFun = this.updateFun;
      this.url = url + param;
		//this.xmlHttp.onreadystatechange = updateFun;

	  xmlHttp.open("GET", this.url, true);
	  
	  xmlHttp.onreadystatechange= function() { 
        if (xmlHttp.readyState==4) updateFun(xmlHttp);
      }
      
	  xmlHttp.send(null);
	  //this.xmlHttp = xmlHttp;
	  //this.xmlHttp_coll.add(xmlHttp);
	  return xmlHttp;
     } catch (e) {
      //alert(e);
     }
     
     //Open end
    }
	
}

var AjaxObj = new AjaxClass();

  function AjaxUpd (e)
  {
    var XH = e;
    var UpdTarget = e.UpdTarget;
    var UpdMode = e.UpdMode;
    if(XH.readyState == 4) {
     var ret = XH.responseText;
     var rex = XH.responseXML;
     var target = document.getElementById(UpdTarget);
     if (target!==null) { 
      target.disabled=false;
     }
     
     if (ret=="") {
     
     } else if (UpdTarget==null) {
      //alert(ret);
     } else if (UpdMode=="json" || UpdMode=="json-key") {
      var resultvar = eval(ret);
      //alert(resultvar);
      if (target.tagName=='DIV') {
       target.innerHTML = ret;
      } else if (target.tagName=='SELECT') {
       target.disabled=false;
       var beforelen = target.options.length;
       var newopt;
       var n = 0;
       for ( key in resultvar ) {
        if (typeof resultvar[key]=="string") {
        	if (UpdMode=="json-key") {
	         newopt = new Option(resultvar[key], key, false, false);
    	    } else {
       		 newopt = new Option(resultvar[key], resultvar[key], false, false);
      	  	}
	        target.options[beforelen+n] = newopt;
   		    n++;
        }
       }
       target.options.length=beforelen+n;
      } else if (target.tagName=='INPUT') {
       target.value = ret;
      }
     } else if (UpdMode=="xml") {
      
     } else {
      //alert(target.innerHTML);
      //if (target.tagName=='DIV') { 
       target.innerHTML = ret;
      //}
     }
     if (XH.updateFunCB!==null) {
      XH.updateFunCB.call();
     }
    }
	}
	
function dump(arr,level) {
	var dumped_text = "";
	if(!level) level = 0;
	
	//The padding given at the beginning of the line.
	var level_padding = "";
	for(var j=0;j<level+1;j++) level_padding += "    ";
	
	if(typeof(arr) == 'object') { //Array/Hashes/Objects 
		for(var item in arr) {
			var value = arr[item];
			
			if(typeof(value) == 'object') { //If it is an array,
				dumped_text += level_padding + "'" + item + "' ...\n";
				dumped_text += dump(value,level+1);
			} else {
				dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
			}
		}
	} else { //Stings/Chars/Numbers etc.
		dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
	}
	return dumped_text;
}

function dumpProps(obj, parent) {
   // Go through all the properties of the passed-in object 
   for (var i in obj) {
      // if a parent (2nd parameter) was passed in, then use that to 
      // build the message. Message includes i (the object's property name) 
      // then the object's property value on a new line 
      if (parent) { var msg = parent + "." + i + "\n" + obj[i]; } else { var msg = i + "\n" + obj[i]; }
      // Display the message. If the user clicks "OK", then continue. If they 
      // click "CANCEL" then quit this level of recursion 
      if (!confirm(msg)) { return; }
      // If this property (i) is an object, then recursively process the object 
      if (typeof obj[i] == "object") { 
         if (parent) { dumpProps(obj[i], parent + "." + i); } else { dumpProps(obj[i], i); }
      }
   }
}
