/**
 * Project: STpl
 * File: dropdown.js
 *
 * Gera as opções de um elemento html 
 * do tipo select de acordo com a seleção 
 * de um outro elemento html do tipo select.
 *
 * @author Frederico Galvão <fredgalvao@gmail.com>
 * @Last-Modified: 24/09/2007 19:15
 * @Version: 2.0
 */





/**
 * Construtor.
 *
 * @param  string scriptUrl:  script que processará a a requisição.
 */
function DynamiComboBox ( scriptUrl )
{
	this.scptUrl  = scriptUrl;
	this.xmlHttp  = createXmlHttpRequestObject();
	this.dataPost = '';
}


/**
 * Adiciona parametros condicionais 
 * na consulta.
 *
 * @param  string param:  identificador do parâmetro
 * @param  string value:  valor do parâmetro
 */
DynamiComboBox.prototype.addCond = function( param, value ) {
	this.dataPost += '&' + param + '=' + value;
}


/**
 * Gera dinamicamente um campo select 
 * segundo o retorno da consulta.
 *
 * @param  string selVal:   valor do filtro passado para a consulta
 * @param  string elemtId:  identificador do campo select a se contruído dinamicamente.
 */
DynamiComboBox.prototype.loadSubCombo = function( selVal, elemtId )
{
	var subCombo = document.getElementById( elemtId );

	if ( selVal )
	{
		var oXmlHttp = this.xmlHttp;
		var dataPost = 'pCombo=' + selVal + this.dataPost;

    	try
		{
		    oXmlHttp.open ( 'POST', this.scptUrl, true );
			oXmlHttp.setRequestHeader ( 'Content-Type', 'application/x-www-form-urlencoded' );

			oXmlHttp.onreadystatechange = function ( )
			{
				if ( oXmlHttp.readyState == 1 ) {
					setLayerVisibility ( 'ajaxLoad', true );
				}
				else if ( oXmlHttp.readyState == 4 )
				{
					if ( oXmlHttp.status == 200 )
					{  
						var reply  = oXmlHttp.responseXML;
						var arrOpt = reply.getElementsByTagName( 'opcao' );

						setLayerVisibility ( 'ajaxLoad', false );

						subCombo.length = 0;
						subCombo.options[0] = new Option( '...', '' );

						if( arrOpt.length ) {
							for ( var i = 0; i < arrOpt.length; i++ ) {
								subCombo.options[( i + 1 )] = new Option( unescape( arrOpt[i].firstChild.data.replace(/\+/g, ' ') ), arrOpt[i].getAttribute( 'valor' ) );
							}
						}
					}
					else {
						alert('Erro na leitura da resposta pelo servidor.');
					}
				}
			}

			oXmlHttp.send ( dataPost );
	    }
		catch ( erro ) {
			alert( 'Erro: ' + erro.message );
		}
	}
	else 
	{
		subCombo.length = 0;
		subCombo.options[0] = new Option( '...', '' );
	}
}
