
var DropboxTrigger = {
	
	listeners: new Object(),
	
	changed: function(id){
		
		if(!DropboxTrigger.listeners[id])
			return false;
		
		for(var i in DropboxTrigger.listeners[id]){
			
			var el = document.getElementById(DropboxTrigger.listeners[id][i]);
			
			el.dropbox.request();
		}
		
		Ajax.send();
	}
}

var Dropbox = function(el, type, listens, leading, onempty){
	
	// We must have a id
	if(!el.id)
		alert('No id set for dropbox element');
	
	// Store values
	this.el = el;
	this.type = type;
	this.listens = listens;
	this.leading = leading;
	this.onempty = onempty;
	
	// Store listeners
	for(var i in listens){
		
		// Get id
		var id = listens[i]['id'];
		
		// Make array
		if(!DropboxTrigger.listeners[id])
			DropboxTrigger.listeners[id] = new Array();
		
		// Push value
		DropboxTrigger.listeners[id].push(el.id);
	}
}

// Send new request
Dropbox.prototype.request = function(){
	
	// Make the options
	var opts = '';
	
	for(var i in this.listens){
		
		var type = this.listens[i]['type'];
		var value = document.getElementById(this.listens[i]['id']).value;
		
		opts += '<' + type + '>' + value + '</' + type + '>';
	}
	
	Ajax.prepare(this.callback, '<request>dropbox_' + this.type + '</request><options>' + opts + '</options>', this);
}

// Callback function
Dropbox.prototype.callback = function(xml){
	
	// Get items
	var items = xml.getElementsByTagName('option');
	var length = items.length;
	
	// Get element
	var el = this.obj.el;
	
	// Clear options
	el.options.length = 0;
	
	// On empty set the on empty message
	if(length == 0)
		el.options[el.length] = new Option(el.dropbox.onempty.value, el.dropbox.onempty.key);
	else
		el.options[el.length] = new Option(el.dropbox.leading.value, el.dropbox.leading.key);
	
	// Loop throw the items
	for(var i = 0; i < length; i++){
		
		// Get item details
		var itm = items[i];
		var id = unescape(itm.getElementsByTagName('id')[0].childNodes[0].nodeValue);
		var value = unescape(itm.getElementsByTagName('value')[0].childNodes[0].nodeValue);
		
		// Add item to the select
		el.options[el.length] = new Option(value, id);
	}
}

