/**
 * @author neopa
 */

function DoubleCombo(masterId,slaveId,url,label){
	this.master = $(masterId);
	this.slave = slaveId;
	this.url = url;
	this.label = (label != "") ? label:"none";
	
	this.initializeBehavior();
}

DoubleCombo.prototype = {
	
	initializeBehavior: function(){
		var oThis = this;
		this.master.onchange = function() { oThis.masterComboChanged(); };
	},
	
	masterComboChanged: function(){
		var query = 'id=' + $F(this.master) + '&t=' + this.slave+ '&l=' + this.label;
		var myAjax = new Ajax.Request(
			this.url,
			{
				method: 'get',
				parameters: query,
				onComplete: this.ajaxUpdate
			})
	},
	
	ajaxUpdate: function(request){
		var slaveOptions = [];
		var xmlDoc = request.responseXML;
		var entries = xmlDoc.getElementsByTagName('entry');
		
		var labels = xmlDoc.getElementsByTagName('emptyLabel')[0];
		var labelsElement = labels.getElementsByTagName('lavelText')[0];
		var labelText = (labelsElement.text != undefined) ? labelsElement.text:labelsElement.firstChild.nodeValue;
	
		var childElement = "";
		for(var i = 0; i < entries.length; i++){
			if(i == 0 && labelText != "none"){
				slaveOptions.push(new Option(labelText,''));
			}
				childElement = entries[i].getElementsByTagName('optionText')[0];
				var text = (childElement.text != undefined) ? childElement.text:childElement.firstChild.nodeValue;
				childElement = entries[i].getElementsByTagName('optionValue')[0];
				var value = (childElement.text != undefined) ? childElement.text:childElement.firstChild.nodeValue;
				slaveOptions.push(new Option(text,value));
			
		}
		
		var targets = xmlDoc.getElementsByTagName('targetOption')[0];
		var targetElement = targets.getElementsByTagName('optionId')[0];
		var targetId = (targetElement.text != undefined) ? targetElement.text:targetElement.firstChild.nodeValue;
		var slave = $(targetId);
		slave.length = 0;
		for(var i = 0; i < slaveOptions.length; i++){
			try{
				slave.add(slaveOptions[i],null)
			}catch(e){
				slave.add(slaveOptions[i],-1)
			}
		}
	}
}


