/*
 * xSelect: gestione cascade select con Ajax
 *  M.Malagoli 
 *  data:   08/02/2007 10.56.40
 *  release: 1.0.0
 *   Utilizzo:
 *    
 *   inizializzare variabile javascript "xSelectList" : lista dei select
 *    esempio:      
 *   xSelectList[0] = "categoria1";
*    xSelectList[1] = "categoria2";
*    xSelectList[2] = "categoria3";
*    xSelectList[3] = "categoria4";
*    
*   inizializzare  variabile javascript  "xSelectSearchUrl": pagina php che ritorna il risultato di una ricerca
*     esempio:
*   xSelectSearchUrl = "search.php";
 inizializzare (se necessario) le variabili javascript:          
    xSelectSelectNoOptionKey = "nullKey";  // definzione del value della select con nessun valore selezionato
    xSelectSelectNoOptionLabel =  "[seleziona categoria]"; // label per la select che indica di selezionare un valore
//  xSelectSelectNoOptionLabel = null; // indica che la select selziona automaticamente il primo valore                                                           
    xSelectSelectNoMoreOpitonLabel = "[nessuna cartegoria]"; // label per la select che indica nessuna valore trovato
    
 * esempio di pagina select.php con inserita la select:
      <html> 
      <head>
      <script src="/jscommon/ajax.js"></script>
      <script src="/jscommon/DWRutil.js"></script>
      <script src="/jscommon/xSelect.js"></script>
      <script type="text/javascript" language="JavaScript">
          xSelectList[0] = "categoria1";
          xSelectList[1] = "categoria2";
          xSelectList[2] = "categoria3";
          xSelectList[3] = "categoria4";
          xSelectSearchUrl = "search4Select4.php";
          xSelectSelectNoOptionKey = "-1";
          xSelectSelectNoOptionLabel =  "[seleziona categoria]";
          xSelectSelectNoMoreOpitonLabel = "[nessuna cartegoria]";
      </script>
     </head>
      <body onLoad="xSelectSelChange('0')">
    <form name="form1">
    cat 1:
      <select id="categoria1"  onChange="xSelectSelChange('1')" >
      </select>
      <br>
      cat 2:
       <select id="categoria2" onChange="xSelectSelChange('2')">
      </select>
    <br>
    cat 3:
       <select id="categoria3"  onChange="xSelectSelChange('3')">
      </select>
    <br>
    cat 4:
       <select id="categoria4" >
      </select>
    </form>
    </body>
    </html>
 *
 *
 *        
 * esempio di pagina search.php per la ricerca:
     <?php
        require_once 'util.php';
        require_once "json/JSON.php";
        $params['CONTEXT'] = 'NomeRicerca';
      	$searchReturn = null;
        $search = new SmartSearch2($params);
    		while ($search->fetchResults()) {
		      $searchReturn[$search->getValue('IDCLASS')] =$search->getValue('CLASSIFICAZIONE'); 
		    } // while
        $json = new Services_JSON();
        $output = $json->encode($searchReturn);
        print($output);
      ?>  

 *
 *
 *
 *      
 *
 */
    var xSelectList = new Array();
    var xSelectSelChanged = 0;
    var xSelectSearchUrl = "";
    var xSelectSelectNoOptionKey = "-1";
    var xSelectSelectNoOptionLabel =  "[select one]";
    var xSelectSelectNoMoreOpitonLabel = "[no option]";
    var xSelectDebug = 0;
    
function xSelectList_ajax_response(dataFromServer) {
    var option1 = {}; 
    //alert(dataFromServer);
    if(xSelectDebug == 2) {
      var d = '';
      for (var i in dataFromServer) {
    	   d +=  i + ': ' + dataFromServer[i];
      }
      DWRUtil.setValue("xSelectDebug", d);
      
    }
    if(dataFromServer != null) {
      option1[xSelectSelectNoOptionKey] = xSelectSelectNoOptionLabel;
    }
    else {
      option1[xSelectSelectNoOptionKey] = xSelectSelectNoMoreOpitonLabel;
    }
    if(option1[xSelectSelectNoOptionKey] != null) {
   	    DWRUtil.addOptions(xSelectList[xSelectSelChanged], option1);
   	 }
     	 var unescapedData = {};
        for (var i in dataFromServer) {
          unescapedData[unescape(i)] = unescape(dataFromServer[i]);
        }
    	 DWRUtil.addOptions(xSelectList[xSelectSelChanged], unescapedData);
}
  

function xSelectSelChange(selChange) {
    xSelectSelChanged = selChange;
    
    for(i = selChange; i < xSelectList.length; i++) {
        //alert(xSelectList[i]);
       DWRUtil.removeAllOptions(xSelectList[i]);
    }
    var valueBox = new Array();
    for(i = 0; i < xSelectList.length; i++) {
    	valueBox[i] =DWRUtil.getValue(xSelectList[i]);
      if(valueBox[i] == xSelectSelectNoOptionKey) {
        for(k = i + 1; k < xSelectList.length; k++) {
        	DWRUtil.removeAllOptions(xSelectList[k]);
        }
        return;
      } 
    }
    fillSelection(xSelectSelChanged);
  }
  
  
  function fillSelection(selChange, callback) {
    if(!callback) {
      callback = xSelectList_ajax_response;
    }
    xSelectSelChanged = selChange;
    var valueBox = new Array();
    for(i = 0; i < xSelectList.length; i++) {
    	valueBox[i] =DWRUtil.getValue(xSelectList[i]);
    }  
    var submitTo = xSelectSearchUrl + '?SELCHANGE=' +  selChange;
    for(i = 0; i < xSelectList.length; i++) {
        submitTo +=  '&' + xSelectList[i] + "=" +  valueBox[i];
    }
    if(xSelectDebug == 1) {
      //alert(debug);
      submitTo += '&DEBUG=1';  
      location.href = submitTo; //uncomment if you need for debugging
    }
    http('GET', submitTo, callback);
  }
  
    function xSelectSetDebug(d) {
      xSelectDebug = d;
      DWRUtil.setValue("xSelectDebug", "xSelectDebug: " + xSelectDebug);
    }
  


