//////////////////////////////////////////////////////////////////////////////
// Javascript basado en dojo utilizado por el servicio de catalogos del 
// framework
//////////////////////////////////////////////////////////////////////////////

// Campos de texto
function loadTextField(requestUrl, fieldId, timeOut) {
	var theField = dojo.byId(fieldId);
		// Para compatibilidad con javascript estático heredado
	if (!timeOut){
		timeOut = 5000;
	}
	dojo.xhrGet({ 
		url:requestUrl, 
		handleAs:"text",
		load: function(response, ioArgs) {
			theField.value = "";
			var oData = dojo.fromJson(response);
			if (oData.length > 0) {
				theField.value = oData.options[0].text;
			}
		},
		error: function (response, ioArgs) {
			console.log("Error obteniendo el catalogo: " + response);
		},
		timeout: timeOut
	});
}
 
// Se tiene que añadir comportamiento la funcion de timeout y la de error
function loadCombo(requestUrl, comboId, timeOut){

	var theCombo = dojo.byId(comboId);
	clearCombo(comboId);
	// Para compatibilidad con javascript estático heredado
	if (!timeOut){
		timeOut = 5000;
	}
	dojo.xhrGet({
					url: requestUrl,
					handleAs: "text",
					load: function(response, ioArgs) {
							populateCombo(theCombo, response);
					},
					error: function(response, ioArgs) {
                      console.log("Error obteniendo el catalogo: " + response);
                   	},
					timeout: timeOut
	});
}

function clearCombo(comboId){
		dojo.require("dojo.i18n");
		dojo.requireLocalization("dijit", "loading");
		//var _nlsResources = dojo.i18n.getLocalization("dijit", "loading");
	    var theCombo = dojo.byId(comboId);
	    theCombo.options.length = 0;  
		theCombo.options.length++;  
		theCombo.options[0].value = "";
		//theCombo.options[0].text  = _nlsResources.loadingState;
}

function populateCombo(theCombo, jsonData){
	
	var oData = dojo.fromJson(jsonData);
	
	theCombo.options.length = 0;
	theCombo.options.length = oData.length;
	
	for(var i=0;i<oData.length;i++){
	
		theCombo.options[i].value = oData.options[i].value;
		theCombo.options[i].text = oData.options[i].text;
		var defaultValue = getDefaultValue(theCombo);
		if (defaultValue!=null){
			if(theCombo.options[i].value==getDefaultValue(theCombo)){
				theCombo.options[i].selected =true;
			}
		}
	}
	
	//Se provoca un onchange en el combo dependiente
	if (theCombo.onchange != null) {
		theCombo.onchange();
	}
}


//////////////////////////////////////////////////////////////////////////////

// Inicializacion de los combos
dojo.addOnLoad(loadComboInit);

var registry = new Array();
var registryIndex=0;
var defaultValueForCombo = new Array();
var defaultValueForComboIndex=0;

function ComboDefaultValue(combo, value){
	this.combo = combo;
	this.value = value;
}
function saveDefaultValue(combo,value){
	defaultValueForCombo[defaultValueForComboIndex++] = new ComboDefaultValue(combo,value);
}
function getDefaultValue(combo){
	for(var i=0;i<defaultValueForComboIndex;i++){
		if(combo.id==defaultValueForCombo[i].combo){
			return defaultValueForCombo[i].value;
		}
	}
	return null;
}

function loadComboReset(){
	defaultValueForCombo = null;
	defaultValueForComboIndex=0;
}

function loadComboInit(){
	if(registryIndex==0)
			return;
	for(var i=0;i<registryIndex;i++){
		loadCombo(registry[i].url,registry[i].combo, registry[i].timeout);
	}
	registryIndex=0;
	registry=null;
}

function comboCall(url, comboId, timeout){
	this.url = url;
	this.combo = comboId;
	this.timeout = timeout;
}

function registerCall(url,  mainCombo, comboId, timeout){
	if(typeof(mainCombo)!='undefined'){
			theCombo = dojo.byId(mainCombo);
	}
	registry[registryIndex++] = new comboCall(url, comboId, timeout);
}
 
function setDefaultValue(combo, value){
	for(var i=0;i<defaultValueForComboIndex;i++){		
		if(combo.id==defaultValueForCombo[i].combo){
			defaultValueForCombo[i].value = value;
		}
	}
	return null;
}