i_multicombo_nVersion=0.300;
/*
	intelygenz  - www.intelygenz.com
	[VER]	 M:\ig_intelygenz\ig05_intranet\desarrollo\areas\dev\docs\i_multicombo.txt
	[UPDATE] M:\ig_intelygenz\ig05_intranet\desarrollo\areas\dev\libs\js\i_multicombo.js

	open -> i_xbd.js / i_marray.js / i_exml.js

*/

oIGZ.f_loadLib("i_multicombo", i_multicombo_nVersion);
oIGZ.f_require("i_marray", 0.160);
oIGZ.f_require("i_exml", 0.180);
oIGZ.f_require("i_xbd", 0.204);

oMultiCombo = new function (){
	this.m_a_oMultiCombos = [];
	this.f_draw = function (sObj, sName, sTitle, sData, sEXMLText, sParentColName, sXtra, a_vMultiCombosRel, f_preCall, f_postCall){
		eval(sObj+" = new MultiCombo(sObj, sName, sTitle, sData, sEXMLText, sParentColName, sXtra, a_vMultiCombosRel, f_preCall, f_postCall);");
		this.m_a_oMultiCombos.push( eval(sObj) );
		return ( eval(sObj+".f_draw()") );
	}
	this.f_print = function (sObj, sName, sTitle, sData, sEXMLText, sParentColName, sXtra, a_vMultiCombosRel, f_preCall, f_postCall){
		document.write( this.f_draw(sObj, sName, sTitle, sData, sEXMLText, sParentColName, sXtra, a_vMultiCombosRel, f_preCall, f_postCall) );
	}
	this.m_sIdioma = "";
	this.f_init = function (){
		var f=-1, F = this.m_a_oMultiCombos.length;
		while (++f<F){
			this.m_a_oMultiCombos[f].f_build(this.m_sIdioma);
		}
	}
	oIGZ.m_a_sStartUps.push("oMultiCombo.f_init()");
}

function MultiCombo(sObj, sName, sTitle, sData, sEXMLText, sParentColName, sXtra, a_vMultiCombosRel, f_preCall, f_postCall){
	this.m_sObj 	= sObj;
	this.m_nVersion	= i_multicombo_nVersion;
	this.m_sKeyName	= "[i_multicombo v"+this.m_nVersion+"]";
	this.m_oObj		= this;

	this.m_sName	  = sName;
	this.m_sId		  = this.m_sName;
	this.m_sTitle	  = sTitle;
	this.m_sEXMLText  = sEXMLText;
	this.m_sParentColName = sParentColName;
	this.m_sXtra	  = sXtra;

	this.m_vSelectedValue = "";
	this.m_vSelectedText  = "";
	this.m_nSelectedIndex = -1;

	if (GetType(sData)!=String) ErrorJS(this.m_sKeyName+" - Debes pasar el nombre de un válido MArray pero nunca una referencia a este.");
	this.m_sData  = sData;
	this.m_maData = null;
	if (GetType(this.m_sData, 1)) {
		this.m_maData = eval(this.m_sData);
		if (!IsMArray(this.m_maData)){
			if (IsMArrayOld(this.m_maData)) {
				var maData = new MArray();
				maData.f_fillFromOldMArray(this.m_maData, 1);
				this.m_maData = maData;
			}
			else ErrorJS(this.m_sKeyName+" - "+this.m_sData+" no es un MArray");
		}
	}
	
	//oMultiCombo_Target, sParentColNameRelacion_Target, [sSRC]
	this.m_a_vMultiCombosRel = a_vMultiCombosRel;


	this.m_nIdioma	  = 0;
	this.m_maMessages = new MArray(["sIdioma","sLoading", "sNoResults"]
							 	  ,[ ["ES","Cargando Datos...", "-Ningún resultado-"]
							 	  	,["UK","Loading...", "-No results-"]
							 	  	,["EN","Loading...", "-No results-"]
							 	  ]
							  	  );


	this.f_preCall  = f_preCall;
	this.f_postCall = f_postCall;

	this.f_draw = function (){
		var a_sHTML = [];
		var sHTML = "<SELECT id='"+this.m_sId+"' name='"+this.m_sName+"' onchange='"+this.m_sObj+".f_select()' "+this.m_sXtra+" >";
		if(this.m_sTitle) sHTML += "<OPTION value=''>"+this.m_sTitle+"</OPTION>";
		a_sHTML.push (sHTML);
		if (this.m_maData!=null) {
			var sEXML,f,nRegs
			sEXML = "<OPTION value='<BD>"+this.m_sParentColName+"</BD>'>"+this.m_sEXMLText+"</OPTION>"
			f = -1;
			nRegs = this.m_maData.f_length();
			while (++f<nRegs) {
				sHTML = ParseEXMLs(sEXML, "", this.m_maData, f)
				a_sHTML.push(sHTML);
			}
		}
		a_sHTML.push ("</SELECT>")

		return (a_sHTML.join(""));
	}
	this.f_print = function (){ document.write( this.f_draw() ); }

	this.m_oSelect = null;
	this.f_build = function (sIdioma){
		this.m_oSelect = document.getElementById(this.m_sId);
		if (this.m_oSelect==null) ErrorJS(this.m_sKeyName+" No se encuentra ningún elemento SELECT con el nombre "+this.m_sId+" en la página ("+document.location.href+")" )
		else {
			if (sIdioma) this.f_setIdioma (sIdioma);
			this.m_oSelect.setAttribute("m_oMultiCombo", this);
			var f = 0, F = this.m_a_vMultiCombosRel.length;
			while(f<F){
				this.m_a_vMultiCombosRel[f] = eval(this.m_a_vMultiCombosRel[f]);
				f+=F;
			}
		}
	}
	
	this.f_setIdioma = function  (sIdioma) {
		sIdioma = sIdioma.toUpperCase();
		var nReg = this.m_maMessages.f_getReg ("sIdioma", sIdioma);
		if (nReg!=-1) this.m_nIdioma = nReg;
	}
	
	this.f_init = function (vIdActiva, maDatosInitForm, nReg){
		if (this.m_oSelect) {
			if (maDatosInitForm) {
				if (!nReg) nReg = 0;
				vIdActiva = maDatosInitForm.f_maGetVal(this.m_sName ,nReg, null);
				if (vIdActiva==null) vIdActiva = maDatosInitForm.f_maGetVal(this.m_sName.substring(2) ,nReg, "");
			}
			
			this.f_refresh(vIdActiva, "", "", "");
			this.f_select(maDatosInitForm, nReg);
		}
	}

	this.f_select = function (maDatosInitForm, nReg){
		if (this.f_preCall) this.f_preCall();
		if (this.m_a_vMultiCombosRel.length>0){				// Combo hijo
			var vIdActiva = "";
			var oSelect = this.m_a_vMultiCombosRel[0];
			if( maDatosInitForm && maDatosInitForm.f_maGetRegs()>0 ){
				if (!nReg) nReg = 0;
				vIdActiva = maDatosInitForm.f_maGetVal(oSelect.m_sName ,nReg, null);
				if (vIdActiva==null) vIdActiva = maDatosInitForm.f_maGetVal(oSelect.m_sName.substring(2) ,nReg, "");
			}
			oSelect.f_refresh(vIdActiva, this.m_a_vMultiCombosRel[2], this.m_a_vMultiCombosRel[1], this.m_oSelect[this.m_oSelect.selectedIndex].value, maDatosInitForm, nReg);
		}
		this.m_nSelectedIndex = this.m_oSelect.selectedIndex;
		this.m_vSelectedValue = this.m_oSelect[this.m_oSelect.selectedIndex].value;
		this.m_vSelectedText  = this.m_oSelect[this.m_oSelect.selectedIndex].text;
		if (this.f_postCall) this.f_postCall();
	}

	this.f_refresh = function (vIdActiva, sSRC, sParentColName, vParentId, maDatosInitForm, nReg){
		var nReg, sText, vValue;
		this.f_remove(1);
		if (sSRC) {
			this.m_oSelect[0] = new Option( this.m_maMessages.f_getVal("sLoading", this.m_nIdioma), "");
			var oMultiCombo = this;
			sSRC += (sSRC.indexOf("?")==-1)? "?" : "&";
			sSRC += sParentColName+"="+vParentId;

			oXBD.f_submitType("NOMSGS", sSRC, 	function (){ 
										if (GetType(oMultiCombo.m_sData, 1)){
											oMultiCombo.m_maData = eval(oMultiCombo.m_sData);
											if (!IsMArray(oMultiCombo.m_maData)) {
												if (IsMArrayOld(oMultiCombo.m_maData)) {
													var maData = new MArray();
													maData.f_fillFromOldMArray(oMultiCombo.m_maData, 1);
													oMultiCombo.m_maData = maData;
												}
												else ErrorJS(oMultiCombo.m_sKeyName+" - "+oMultiCombo.m_sData+" en ("+sSRC+") no es un MArray");
											}										
											oMultiCombo.f_reDraw(sParentColName, vParentId, vIdActiva);
											if (maDatosInitForm && maDatosInitForm.f_maGetRegs()>0) {
												oMultiCombo.f_select(maDatosInitForm, nReg);
											}
										}
										else ErrorJS(oMultiCombo.m_sKeyName+" - No existe el MArray "+oMultiCombo.m_sData+" en "+sSRC);
									}
							);
		}
		else {
			this.f_reDraw(sParentColName, vParentId, vIdActiva);
		}
	}

	this.f_reDraw = function (sParentColName, vParentId, vIdActiva){
		var f, oSelect = this.m_oSelect;
		// Refresca los valores que tenia seleccionados el combo
		this.m_vSelectedValue = "";
		this.m_vSelectedText  = "";
		this.m_nSelectedIndex = -1;

		if (this.m_maData!=null) {
			var nReg, nRegs;	
			var a_nRegs = [];
			if (IsUndefined(sParentColName)) sParentColName = "";
			if (sParentColName!="") a_nRegs = this.m_maData.f_subIndexOf([sParentColName], [vParentId]);
			if (a_nRegs.length>0) {
				if (this.m_sTitle) oSelect[0] = new Option(this.m_sTitle, "");
				f = -1;
				nRegs = a_nRegs.length;
				while (++f<a_nRegs.length) {
					nReg   = a_nRegs[f];
					sText  = ParseEXMLs(this.m_sEXMLText, "", this.m_maData, nReg);
					vValue = this.m_maData.f_getVal(this.m_sParentColName, nReg);
					oSelect[oSelect.length] = new Option(sText, vValue);
					if (vIdActiva==vValue || vIdActiva==sText) oSelect[oSelect.length-1].selected = 1;
				}
			}
			else if (sParentColName=="" && this.m_maData.f_length()>0) {
				if (this.m_sTitle) oSelect[0] = new Option(this.m_sTitle, "");
				f = -1;
				nRegs = this.m_maData.f_length();
				while (++f<nRegs) {
					sText  = ParseEXMLs(this.m_sEXMLText, "", this.m_maData, f);
					vValue = this.m_maData.f_getVal(this.m_sParentColName, f);
					oSelect[oSelect.length] = new Option(sText, vValue);
					if (vIdActiva==vValue || vIdActiva==sText) oSelect[oSelect.length-1].selected = 1;
				}
			}
			else {
				oSelect[0] = new Option( this.m_maMessages.f_getVal("sNoResults", this.m_nIdioma), "");
			}
		}
	}

	this.f_remove = function (bRecursive) {
		var f = this.m_oSelect.length;
		while (--f>=0) { this.m_oSelect[f] = null; }
		this.m_oSelect[0] = new Option( this.m_maMessages.f_getVal("sNoResults", this.m_nIdioma), "");
		if (bRecursive && this.m_a_vMultiCombosRel.length>0) {
			this.m_a_vMultiCombosRel[0].f_remove(1);
		}
	}
}
