
//-------------------- mContentLoader.js
var net = new Object();

net.READY_STATE_UNINITIALIZED= 0;
net.READY_STATE_LOADING      = 1;
net.READY_STATE_LOADED       = 2;
net.READY_STATE_INTERACTIVE  = 3;
net.READY_STATE_COMPLETE     = 4;

net.ContentLoader = function( component, url, method, requestParams ) {
   this.component     = component;
   this.url           = url;
   this.requestParams = requestParams;
   this.method        = method;
}

net.ContentLoader.prototype = {

   getTransport: function() {
      var transport;
      if ( window.XMLHttpRequest )
         transport = new XMLHttpRequest();
      else if ( window.ActiveXObject ) {
         try {
            transport = new ActiveXObject('Msxml2.XMLHTTP');
         }
         catch(err) {
            transport = new ActiveXObject('Microsoft.XMLHTTP');
         }
      }
      return transport;
   },

   sendRequest: function() {

      var requestParams = []
      for ( var i = 0 ; i < arguments.length ;  i++ )
         requestParams.push(arguments[i]);
      var oThis = this;
      var request = this.getTransport();
      request.open( this.method, this.url, true );
      request.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded');
      request.onreadystatechange = function() { oThis.handleAjaxResponse(request) };
      request.send( this.queryString(requestParams) );
  },

  queryString: function(args) {

     var requestParams = [];

     for ( var i = 0 ; i < this.requestParams.length ; i++ )
        requestParams.push(this.requestParams[i]);
     for ( var j = 0 ; j < args.length ; j++ )
        requestParams.push(args[j]);
	 if (debug) alert('requestParams: ' + requestParams);
     var queryString = "";
     if ( requestParams && requestParams.length > 0 ) {
        for ( var i = 0 ; i < requestParams.length ; i++ )
        {
           ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
           //8.3.06: provisorisch von Wolfgang. Sollte eher als Array übergeben werden, damit beliebig viele LBs (oder auch            
           //andere Elemente) angesprochen werden können.
           if(requestParams[i].indexOf('getParentSelValue') > -1)
           {
              var pArray = requestParams[i].split("=");
              var helperString = pArray[0] + "=" + eval(pArray[1]);              
              requestParams[i] =  helperString;
           }
           ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
           queryString += requestParams[i] + '&';
         }
        queryString = queryString.substring(0, queryString.length-1);
     }
     return queryString;
  },

  handleAjaxResponse: function(request) {
     if ( request.readyState == net.READY_STATE_COMPLETE ) {
        if ( this.isSuccess(request) )
            this.component.ajaxUpdate(request);
        else
           this.component.handleError(request);
     }
  },

  isSuccess: function(request) {
    return  request.status == 0 
        || (request.status >= 200 && request.status < 300);
  }

};


//-------------------- mDoubleCombo.js

function DoubleCombo( masterId, slaveId, url, options ) {
   this.master     = document.getElementById(masterId);
   this.slave      = document.getElementById(slaveId);
   this.options    = options;	
   this.ajaxHelper = new net.ContentLoader( this, url, "POST", options.requestParameters || [] );
   if (debug) {alert('doublecombo initialisieren. options.requestParameters=' + options.requestParameters)};

   this.initializeBehavior();
}

//////////////////////////////////////////////////////////////////////
// 20.03.06 von Chris
// bbox als Klasseneigenschaft, gilt für alle Instanzen
DoubleCombo.bbox="";

function set_BBox(aBBox) {
	DoubleCombo.bbox=aBBox;
}
// bbox als Klassenmethode
DoubleCombo.setBBox = set_BBox;
//////////////////////////////////////////////////////////////////////

DoubleCombo.prototype = {

   initializeBehavior: function() {
      var oThis = this;
      this.master.onchange = function() { oThis.masterComboChanged(); };
   },

   masterComboChanged: function() {
      var query = this.master.options[this.master.selectedIndex].value;
	  //////////////////////////////////////////////////////////////////////
      //this.slave.length = 1;
      this.empty();
	  //////////////////////////////////////////////////////////////////////
	  // 17.03.06 von Chris
      //wenn bbox gesetzt, diese dem ajaxHelper als weiteren parameter übergeben	  
	  if (DoubleCombo.bbox!='') {
      	this.ajaxHelper.sendRequest( 'q=' + query, 'bbox=' + DoubleCombo.bbox);
      } else {
      	this.ajaxHelper.sendRequest( 'q=' + query);
      }
      //this.ajaxHelper.sendRequest( 'q=' + query );  //original
	  //////////////////////////////////////////////////////////////////////      
   },
   
   //////////////////////////////////////////////////////////////////////
   // 15.03.06 von Chris
   // Methode zum Befüllen der ersten Such-Listbox
   // mit var theSelection direkte Anwahl eines MasterKomboEintrags
   masterComboSelect: function(theSelection,newSlaveId,newOptions) {
      this.slave = document.getElementById(newSlaveId);
      this.options = newOptions;
      var tmpArray = new Array();
      this.ajaxHelper.requestParams = newOptions.requestParameters || [];
      //wenn bbox gesetzt, diese dem ajaxHelper als weiteren parameter übergeben
      if (DoubleCombo.bbox!='') {
      	this.ajaxHelper.sendRequest( 'q=' + theSelection, 'bbox=' + DoubleCombo.bbox);
      } else {
      	this.ajaxHelper.sendRequest( 'q=' + theSelection);
      }
   },
   
   //doubleKombo leeren
   empty: function() {
   	  for (var i=this.options.dblcomboTreeLevel;i<this.options.dblcomboTree.length;i++) {
   	  	this.options.dblcomboTree[i].slave.length = 1;
   	  }
      //this.slave.length = 1;
      //this.master.length = 1;
   },
   //////////////////////////////////////////////////////////////////////

   ajaxUpdate:  function(request) {
	  if (debug) {alert('doublecombo responseText: ' + request.responseText)};
      var slaveOptions = this.createOptions(request.responseXML.documentElement);
      this.slave.length = 0;
      var optionsObj = this.slave.options;
      if (slaveOptions.length>0) {
      	for ( var i = 0 ; i < slaveOptions.length ; i++ )
         	optionsObj.add( slaveOptions[i] );    	
      }
   },

   createOptions: function(ajaxResponse) {
      var newOptions = [];
      var entries = ajaxResponse.getElementsByTagName('entry');
      for ( var i = 0 ; i < entries.length ; i++ ) {
         var text  = this.getElementContent(entries[i],'optionText');
         var value = this.getElementContent(entries[i],'optionValue');
         newOptions.push( new Option(text, value) );
      }
      return newOptions;
   },

   handleError: function(request) {
      if ( this.options.errorHandler )
         this.options.errorHandler(request);
   },

   getElementContent: function(element,tagName) {
      var childElement = element.getElementsByTagName(tagName)[0];
      return childElement.text != undefined ? childElement.text : childElement.textContent;
   }

};


