dynamicSelect = function(objArgs) {
	
	this.config = objArgs;
	
	// to save the dependent element
	this.dependentElements = [];
	
	// to save selected values
	this.selectedValues = [];
	
	// 
	this.relatedOptions = [];
}

/**
 *
 */
dynamicSelect.prototype.addDependentElement = function(sElementId) {
	
	if (sElementId && '' != sElementId) {
		this.dependentElements.push(sElementId);
	}
}

/**
 *
 */
dynamicSelect.prototype.addMainKey = function(key) {
	
	if (key) {
		this.relatedOptions[key] = [];
		
		return this.relatedOptions.length - 1;
	}
	
	return false;
}

/**
 *
 */
dynamicSelect.prototype.addMainKeyOption = function(key, objArgs) {
	
	if (key) {
	
		if ( ! this.relatedOptions[key]) {
			this.relatedOptions[key] = new Array();
		}
		
		if ("undefined" != objArgs.value) {

			var newIndex = this.relatedOptions[key].length;
			
			this.relatedOptions[key][newIndex] = new Array();
			this.relatedOptions[key][newIndex]['value'] = objArgs.value;
			this.relatedOptions[key][newIndex]['label'] = objArgs.label;
		}
	}
}

/**
 *
 */
dynamicSelect.prototype.addSelectedValue = function(objArgs) {
	
	if (objArgs.elementId) {
		this.selectedValues[objArgs.elementId] = objArgs.value ? objArgs.value : ''; 
	}
}

/**
 *
 */
dynamicSelect.prototype.updateDependent = function() {
	
	var oMainSelect		= document.getElementById(this.config.mainId);
	var selectedValue	= oMainSelect.options[oMainSelect.selectedIndex].value;
	var oOptions		= new Array();
	
	if ( this.relatedOptions[selectedValue] ) {
	
		oOptions = this.relatedOptions[selectedValue];
	}

	for (var i = 0; i<this.dependentElements.length; i++)
	{
		var elementID = this.dependentElements[i];
		var oSelect = document.getElementById(elementID);
		
		if (oSelect) {
			this.removeFormSelectOptions(oSelect, true);
			this.rebuildFormSelectOptions(oSelect, oOptions, this.getSelectedValue(elementID));
		}
	}
}

/**
 *
 */
dynamicSelect.prototype.getSelectedValue = function(elementId) {

	if (this.selectedValues[elementId]) {
		return this.selectedValues[elementId];
	}
	
	return false;
}

/**
 *
 */
dynamicSelect.prototype.removeFormSelectOptions = function(oSelect, firstKeepAlive) {
	
	var fIndex = firstKeepAlive ? 1 : 0;
	
	for(var i=oSelect.options.length; i>=fIndex; i--) {
		oSelect.remove(i);
	}
}

/**
 *
 */
dynamicSelect.prototype.addFormSelectOption = function(oSelect, sValue, sName) {

	var oOption = document.createElement('option');
	oOption.setAttribute('value', sValue);
	oOption.appendChild(document.createTextNode(sName));
	
	oSelect.appendChild(oOption);
}

/**
 *
 */
dynamicSelect.prototype.rebuildFormSelectOptions = function(oSelect, oOptions, sSelectedValue) {

	var iSelectedIndex = 0;
	var count = oSelect.length;
	var isObj = true;
	
	for(var i=0; i<oOptions.length; i++)
	{
		var sId;
		var sName;
			
		if (oOptions[i]) {
		
			sId		= oOptions[i]['value'];
			sName	= oOptions[i]['label'];

			var oNewOption = document.createElement('option');
			oNewOption.setAttribute('value', sId);
			
			if (sSelectedValue && sSelectedValue!='' && sSelectedValue == sId) {
				iSelectedIndex = count;
				oNewOption.setAttribute('selected', true);
			}
			oNewOption.appendChild(document.createTextNode(sName));
			oSelect.appendChild(oNewOption);

			count++;
		}
	}

	oSelect.selectedIndex = iSelectedIndex;
} 
