/* ----EJEMPLO----EJEMPLO----EJEMPLO----EJEMPLO----EJEMPLO----EJEMPLO----EJEMPLO----EJEMPLO----EJEMPLO

Se supone que objInfoMae fue cargado con el metodo NuevoElem().
Se muestra como interar con un for/in sobre los objetos PadMaestro almacenados en en el
objeto InfoMaestro.

if (gobjInfoMae.Cant() > 0) {
	var strDebug = "";

	strDebug += 'Cant elem en gobjInfoMae= ' + gobjInfoMae.Cant() + '\n\n';

	for (objPad in gobjInfoMae.arrPadrones) {
		strDebug += gobjInfoMae.arrPadrones[objPad].Depto  + '---' +
					gobjInfoMae.arrPadrones[objPad].Padron + '---' +
					gobjInfoMae.arrPadrones[objPad].Nombre + '---' +
					gobjInfoMae.arrPadrones[objPad].FExt   + '---' +
					gobjInfoMae.arrPadrones[objPad].Id2Bolson + '\n';
	}
	alert(strDebug);
}
 ----EJEMPLO----EJEMPLO----EJEMPLO----EJEMPLO----EJEMPLO----EJEMPLO----EJEMPLO----EJEMPLO----EJEMPLO */



// ---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O
//
// OBJETO: PadMaestro
//
// DESCRIPCION: informacion referida a un padron extaida del archivo maestro CONEAT.
//
// PROPIEDADES:
//		Id2 		(string) - identificador de padron en layers catastrales (Ej. "I-691").
//		Padron		(string) - numero de padron.
//		Depto		(string) - letra de depto (segun nomenclatura CONEAT.)
//		Id2Bolson   (string) - codigo Id2 que figuran en los layers catastrales del estilo 'I-B 1300233'.
//								(este dato no se obtiene de CONEATMAESTRO).
//		Nombre		(string) - nombre propietario.
//		SeccJudic	(number) - seccion judicial.
//		SupCat		(string) - superficie catastral (expresada en hectareas con 4 decimales).
//		FExt		(number) - factor extrinseco.
//		AfEsp		(string) - afectacion especial.
//		Dist		(number) - cod distancia a centro poblado. (NO SE USA).
//		CtoCod		(string) - codigo de centro poblado. (NO SE USA).
//		AfecCP		(number) - afectacion a centro poblado.
//		AfRuta		(number) - afectacion de ruta.
//		IPF_mae		(number) - indice de productividad final (maestro).
//		IVR_mae		(number) - indice de valor real (maestro).
//		Carpeta		(string) - codigo de carpeta.
//		CodFicto    (number) - codigo ficto (0 = padron normal, 1 = Ficto, 2 = I.N.C.).
//		DescFicto   (string) - descripcion ("", "Ficto", "I.N.C.").
//		StatusBusq  (number) - status de busqueda. Los codigos indican lo siquiente:
//		  (binario)  (dec)     (significado)
//
//			0000       0   - NO en SDE.CONEATMAESTRO. NO en SDE.CATCON.
//			0001       1   - NO en SDE.CONEATMAESTRO. SI en SDE.CATCON.
//			0010       2   - SI en SDE.CONEATMAESTRO. NO en SDE.CATCON.
//			0011       3   - SI en SDE.CONEATMAESTRO. SI en SDE.CATCON.
//      Lamina      (string) - lamina
//      Coord       (string) - coordenada dentro de la lamina
//
// METODOS: ninguno.
//
//
// FECHA: creacion:    10/09/2001
//		  modif.: 27/11/2001
//        modif : 11/4/2002 - para el calculo del IVR se agregaron Lamina y Coord.
//		  modif : 29/7/2004 - se agrego IPF_mae, IVR_mae y Carpeta para registro de notificaciones.
// ---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O


// -----------------------------------------------------------------------------------------------------
// CONSTRUCTOR: PadMaestro
//
// PARAMETROS: ninguno.
//
// USO: var objPad = new PadMaestro();
//
// -----------------------------------------------------------------------------------------------------
function PadMaestro()
{
	// PROPIEDADES.
	this.Id2 = "";
	this.Padron = "";
	this.Id2Bolson = "";
	this.Depto = "";
	this.Nombre = "";
	this.SeccJudic = 0;
	this.SupCat = 0;
	this.FExt = 0;
	this.AfEsp = "";
	this.Dist = 0;
	this.CtoCod = "";
	this.AfecCP = 0;
	this.AfRuta = 0;
	this.CodFicto = 0;
	this.DescFicto = "";
	this.StatusBusq = 0;

	// MODIF 11/4/2002: para el calculo del IVR.
	this.Lamina = "";
	this.Coord  = "";

	// MODIF 29/7/2004: para registro de notificaciones.
	this.IPF_mae = 0;
	this.IVR_mae = 0;
	this.Carpeta = "";
}



// ---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O
//
// OBJETO: InfoMaestro
//
// DESCRIPCION: objeto de arrays de objetos PadMaestro.
//				Representa a todos los padrones de busqueda con informacion del archivo maestro Coneat
//				(bolsones incluuidos) y tambien representa el status de busqueda para aquellos padrones
//				buscados que salen de la situacion normal (ver comentario en objeto PadMaestro).
//
// PROPIEDADES:
//		arrPadrones (array PadMaestro) - array de objetos PadMestro con informacion del maestro CONEAT.
//		tot_elem    (number)
//
// METODOS:
//		Cant			- total de elementos con info de padrones.
//		NuevoElem		- agregar un nuevo elemento con informacion (del maestro) de un padron.
//		InfoPorId2Bolson - obtener informacion de maestro CONEAT para padron identificado por id2 (de los layers).
//		InfoPorPadron  - obtener informacion de maestro CONEAT por padron (atributo Padron).
//		InfoPorId2     - obtener informacion de maestro CONEAT por codigo Id2 (letra-depto + guion + padron).
//		GenerarVecAdefesio - generar vector de valores para un campo dado formateado segun la guia
//							 de id2Arr cargado en aimsMio.js (funcion: obtengoDatos). Es muy feo
//							 pero no queda otra. Modificar el codigo original no es para simples mortales.
//		ColocarCodBolson - colocar codigo de bolson (id2bolson) al objeto PadMaestro identificado por (padron).
//		StatusSegunBusquedaMaestro - setear los status correspondientes segun esten en CONEATMAESTRO o no.
//		ObtenerStatusPorPadron - obtener el status de busqueda de un padron dado.
//		ObtenerCodFictoPorPadron - obtener el codigo de ficto para un padron dado.
//		PadronesNoEnLayer - obtener los numeros de padron que no estan en el layer (SDE.CATCON).
//		ReportarStatusBusq - obtener un array con los diferentes status de busqueda de los padrones.
//		VaciarObjeto    - reinicializar el objeto a un estado 'vacio' (sin datos).
//
// FECHA: 10/09/2001
//
// MODIF: 11/4/2002 - se agrego Lamina y Coord tomados de CONEATMAESTRO.
// MODIF: 29/7/2004 - se agrego IPF_mae, IVR_mae y Carpeta para registro de notificaciones.
// ---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O

// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
// METODO: Cant
//
// DESCRIPCION: retornar la cantidad de objetos PadMaestro.
//
// PARAMETROS: ninguno.
//
// RETORNO: (integer) - cantidad de objetos padron con informacion extraida del Maestro CONEAT.
// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
InfoMaestro.prototype.Cant = function()
{
	return this.tot_elem;
}


// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
// METODO: NuevoElem
//
// DESCRIPCION: agregar un nuevo elemento PadMaestro.
//
// PARAMETROS:
//		id2 		(string)  - identificador de padron en layers catastrales (Ej. "I-691").
//		padron		(string)  - numero de padron.
//		depto		(string)  - letra de depto (segun nomenclatura CONEAT.)
//		nombre		(string)  - nombre propietario.
//		seccJudic	(integer) - seccion judicial.
//		supCat		(string ) - superficie catastral (expresada en hectareas con 4 decimales).
//		fext		(integer) - factor extrinseco.
//		afEsp		(string)  - afectacion especial.
//		dist		(integer) - codigo de distancia a centro poblado. (NO SE USA).
//		ctoCod		(string)  - codigo de centro poblado. (NO SE USA).
//		afeccp		(integer) - afectacion a centro poblado
//		afruta		(integer) - afectacion de ruta.
//		codficto    (integer) - codigo de padron ficto (0 = no es ficto ni nada, 1 = Ficto, 2 = I.N.C.).
//		descficto   (string)  - descripcion ("", "Ficto", "I.N.C.").
//		statusbusq  (number)  - codigo resultado de busquedas para las validaciones correspondientes.
//								(Ver comentario en constructor del objeto PadMaestro).
//		lamina      (string)  - lamina catastral.
//		coord       (string)  - coordenada en la lamina.
//		IPF_mae		(integer) - indice de productividad final (maestro).
//		IVR_mae		(integer) - indice de valor real (maestro).
//		Carpeta		(string)  - codigo de carpeta.
//
// RETORNO: nada.
// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
InfoMaestro.prototype.NuevoElem = function(id2, nombre, secjud, supcat, fext, afesp, dist, ctocod, afeccp,
										   afruta, codficto, descficto, statusbusq, lamina, coord,
										   ipf_mae, ivr_mae, carpeta)
{
	this.arrPadrones[this.tot_elem] = new PadMaestro();
	this.arrPadrones[this.tot_elem].Id2       = id2;
	this.arrPadrones[this.tot_elem].Padron    = id2.split("-")[1];
	this.arrPadrones[this.tot_elem].Id2Bolson = id2;   // En principio se asigna lo mismo (ej.: "I-691"), hasta que
													   // se aplique el metodo ColocarCodBolson() el cual colocaria
													   // algo del estilo "I-B 1300426".
	this.arrPadrones[this.tot_elem].Depto     = id2.split("-")[0];
	this.arrPadrones[this.tot_elem].Nombre    = nombre;
	this.arrPadrones[this.tot_elem].SeccJudic = secjud;
											    // Convertir a hectareas (esta en metros en CONEATMAESTRO).
	this.arrPadrones[this.tot_elem].SupCat    = FormatearNumConPrecision((1.0000 * supcat / 10000), 4);
	this.arrPadrones[this.tot_elem].FExt      = fext;
	this.arrPadrones[this.tot_elem].AfEsp     = afesp;
	this.arrPadrones[this.tot_elem].Dist      = dist;
	this.arrPadrones[this.tot_elem].CtoCod    = ctocod;
	this.arrPadrones[this.tot_elem].AfecCP    = afeccp;
	this.arrPadrones[this.tot_elem].AfRuta    = afruta;
	this.arrPadrones[this.tot_elem].CodFicto  = codficto;
	this.arrPadrones[this.tot_elem].DescFicto = descficto;
	this.arrPadrones[this.tot_elem].StatusBusq |= statusbusq;  // Atenti: el OR de bits.

	// MODIF 11/4/2002.
	this.arrPadrones[this.tot_elem].Lamina = lamina;
	this.arrPadrones[this.tot_elem].Coord  = coord;

	// MODIF 29/7/2004. Para registro de notificaciones.
	this.arrPadrones[this.tot_elem].IPF_mae = ipf_mae;
	this.arrPadrones[this.tot_elem].IVR_mae = ivr_mae;
	this.arrPadrones[this.tot_elem].Carpeta = carpeta;

	this.tot_elem++;
}

// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
// METODO: InfoPorId2Bolson
//
// DESCRIPCION: obtener informacion de maestro CONEAT para el padron identificado por id2 (codigo tal
//				cual figura en los layers catastrales, p. ej. SDE.CATCON).
//				Se retorna un array porque los valores de id2bolson en cada objeto PadMaestro puede
//				estar repetido por el caso de los codigos de bolsones.
//
//				El llamador debe verificar el length del array retornado para saber si se encontraron
//				elementos.
//
// PARAMETROS:
//		id2bolson (string) - identificador de padron en layers catastrales (Ej. "I-691", "I-B 1300426")
//							  incluyendo codigos de bolsones y demas cosas extranias.
//
// RETORNO: (arrays de objetos PadMaestro)
//
// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
InfoMaestro.prototype.InfoPorId2Bolson = function(id2bolson)
{
	var arrobjPadMae = new Array();
	var j = 0;

	for (var i = 0; i < this.tot_elem; i++) {
		if (this.arrPadrones[i].Id2Bolson == id2bolson) {
			arrobjPadMae[j] = this.arrPadrones[i];
			j++;
		}
	}

	return arrobjPadMae;
}


// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
// METODO: InfoPorPadron
//
// DESCRIPCION: obtener informacion de maestro CONEAT para strPadron (identificado por atributo Padron
//				del objeto PadMaestro).
//
// PARAMETROS:
//		strPadron (string) - identificador de padron segun atributo Padron.
//							 Usa el formato numero de padron a secas (sin letra-depto + guion).
//
// RETORNO: (objeto PadMaestro) -
//
// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
InfoMaestro.prototype.InfoPorPadron = function(strPadron)
{
	var objPadMae = new PadMaestro();

	for (var i = 0; i < this.tot_elem; i++) {
		if (this.arrPadrones[i].Padron == strPadron) {
			objPadMae = this.arrPadrones[i];
			return objPadMae;
		}
	}

	// Si no encontro nada, retornar null.
	return null;
}


// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
// METODO: InfoPorId2
//
// DESCRIPCION: obtener informacion de maestro CONEAT para strId2 (identificado por atributo Id2
//				del objeto PadMaestro).
//
// PARAMETROS:
//		strId2 (string) - identificador de padron con formato: letra-depto + guion + padron
//						  Excepcion: no usar los codigos de bolsones u otros.
//
// RETORNO: (objeto PadMaestro) -
//
// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
InfoMaestro.prototype.InfoPorId2 = function(strId2)
{
	var objPadMae = new PadMaestro();

	for (var i = 0; i < this.tot_elem; i++) {
		if (this.arrPadrones[i].Id2 == strId2) {
			objPadMae = this.arrPadrones[i];
			return objPadMae;
		}
	}

	// Si no encontro nada, se retorna null.
	return null;
}


// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
// METODO: DatosDeCampo(strNomCampo)
//
// DESCRIPCION: obtener todos los valores por campo.
//				Se llama 'campo' a los atributos del objeto PadMaestro ya que coinciden con los
//				nombres de campo de la tabla CONEATMAESTRO.
//
// PARAMETROS:
//		strNomCampo		(string)  - nombre del campo para el cual se quieren los valores.
//
// USO:
//		...
//		var arrFExt = new Array();
//		arrFExt = objInfoMae.DatosDeCampo("FExt");
//
//
// RETORNO: (arrValores)
//					array con los valores para un campo dado.
//
// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
InfoMaestro.prototype.DatosDeCampo = function(strNomCampo)
{
	var arrVal = new Array();

	for (var i = 0; i < this.tot_elem; i++) {
		// VALIDAR: existencia del campo a parsear.
		if (this.arrPadrones[i][strNomCampo] == null) {
			return arrVal;
		}

		// Todo bien... seguir normalmente.
		arrVal[i] = this.arrPadrones[i][strNomCampo];
		// NOTA: ver pag. 145 del Rhino Book (3 ed.) para explicacion de esta forma
		//       de acceso a las propiedades de un objeto (onda array asociativo).
	}

	// Retornar el array con todos los valores para campo strNomCampo.
	return arrVal;
}


// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
// METODO: GenerarVecAdefesio(strNomCampo, arrId2Guia, boolEtiquetar)
//
// DESCRIPCION: generar array "adefesio" formateado segun segun venga el arrId2Guia.
//				Para entender este asunto hay que mirar javascript/aimsMio.js, Funcion: obtengoDatos().
//				Ahi hay suficientes comentarios...(!)
//
// PARAMETROS:
//		strNomCampo  (string) - nombre del campo a parsear.
//		arrId2Guia	 (array) - vector con los valores del SDE.CATCON.ID2 que viene de la respuesta.
//		boolEtiqueta (boolean) - indicador si el array generado es para etiquetar (es para contemplar
//								 el caso de los padrones que caen dentro de un mismo bolson).
//
// USO:
//		... etc.
//
//		id2Arr <- cargado en el for misterioso en obtengoDatos() (javascript/aimsMio.js).
//
//		var arrFExt = new Array();
//		var arrPadron = new Array();
//
//		arrFExt = objInfoMae.GenerarVecAdefesio("FExt", id2Arr);
//		arrPadron = objInfoMae.GenerarVecAdefesio("Padron", id2Arr);
//
//      ... etc.
//
// RETORNO: (arrAdefesio)
//					array con los valores para un campo dado pero con el super formato 'adefesio'.
//
// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
InfoMaestro.prototype.GenerarVecAdefesio = function(strNomCampo, arrId2Guia, boolEtiquetar)
{
	var arrAdefesio = new Array();
	var arrobjPadMae = new Array();

	// validar existencia y tamanio de arrId2Guia.
	if ((arrId2Guia == null) || (arrId2Guia.length <= 0)) {
		return arrAdefesio;
	}

	for (var i = 0; i < arrId2Guia.length; i++) {
		arrobjPadMae = this.InfoPorId2Bolson(arrId2Guia[i]);

		// VALIDAR: existencia del campo a parsear.
		if (arrobjPadMae.length <= 0) {
			return arrAdefesio;
		}

		// Todo bien... seguir normalmente (!).

		// Si el campo a parsear es Padron o SupCat se debe armar los strings de tal forma de ser
		// presentados en pagina HTML o en el mapa (caso numeros de padrones).
		// CASO "SupCat": se formatea de tal forma de mostrar 4 decimales.
		if ((strNomCampo == "Padron") || (strNomCampo == "SupCat") ||
			(strNomCampo == "Lamina") || (strNomCampo == "Coord")) {
			// CASO: arrAdefesio es para 'etiquetar'.
			if (arrobjPadMae.length == 1) {
				if (strNomCampo == "SupCat") {
					arrAdefesio[i] = FormatearNumConPrecision(arrobjPadMae[0][strNomCampo], 4);
				} else {
					arrAdefesio[i] = arrobjPadMae[0][strNomCampo];
				}
				// NOTA: ver pag. 145 del Rhino Book (3 ed.) para explicacion de esta forma
				//       de acceso a las propiedades de un objeto (onda array asociativo).
			} else {
				// Se esta generando el adefesio (TM) y hay mas de un padron en el mismo bolson.
				// El formato es para ETIQUETA estilo "1040 - 4363 - 6570" o
				// el formato es para salida en HTML estilo "1040<BR>4363<BR>6570"
				var strEtiqBolson = "";

				for (var x = 0; x < arrobjPadMae.length; x++) {
					if (strNomCampo == "SupCat") {
						strEtiqBolson += FormatearNumConPrecision(arrobjPadMae[x][strNomCampo], 4);
					} else {
						strEtiqBolson += arrobjPadMae[x][strNomCampo];
					}
					if (x == (arrobjPadMae.length - 1)) {
						continue;
					}
					if (boolEtiquetar) {
						strEtiqBolson += " - ";
					} else {
						strEtiqBolson += "<BR>";  // Poner salto de linea en el HTML.
					}
				}
				arrAdefesio[i] = strEtiqBolson;
			}
		} else {
			// CASO: arrAdefesio no es para 'etiquetar'.
			arrAdefesio[i] = arrobjPadMae[0][strNomCampo];
		}
	}

	// Retornar el array con todos los valores para campo strNomCampo formateado segun de arrId2Guia.
	return arrAdefesio;
}


// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
// METODO: ColocarCodBolson
//
// DESCRIPCION: colocar codigo de bolson (id2bolson) al objeto PadMaestro identificado por (padron).
//
// PARAMETROS:
//		padron 		(string) - identificador de padron en (Ej. "I-691").
//		id2bolson   (string) - codigo de bolson del estilo "I-B 1300232" que identifica el poligono donde
//							   se encuentra el padron (padron).
//
// NOTA: si padron no existe en los objetos PadMaestro, no se asigna nada a la propiedad Id2Bolson.
//
// RETORNO: (nada)
// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
InfoMaestro.prototype.ColocarCodBolson = function(padron, id2bolson)
{
	for (var i = 0; i < this.tot_elem; i++) {
		if (this.arrPadrones[i].Id2 == padron) {
			this.arrPadrones[i].Id2Bolson = id2bolson;
			return;		// SALIR: ya encontro y asigno codigo de bolson.
		}
	}
}


// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
// METODO: StatusSegunBusquedaMaestro
//
// DESCRIPCION: PARCHE para encajar en buscarPadConeatForm.asp luego de que se hizo la busqueda en
//				SDE.CONEATMAESTRO y sde dieron de alta la info de padrones usando el metodo NuevoElem.
//				El parametro debe ser el string de busqueda ingresado en el form, para setear los
//				padrones encontrados en maestro (StatusBusq = 2) y dar de alta a los no encontrados
//				(StatusBusq = 0).
//
// NOTA: No es muy elegante pero estamos llegando al plazo.
//
// PARAMETROS:
//		strBusqOriginalForm (string) - el string ingresado en el form de busqueda, p. ej:
//									   "I-691;I-277;I-1526".
//
// RETORNO: nada.
//
// FECHA: 27/11/2001
// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
InfoMaestro.prototype.StatusSegunBusquedaMaestro = function(strBusqOriginalForm)
{
	// En strBusqOriginal estan TODOS los padrones a buscar. Por lo cual, aca mismo se dan de alta a los
	// padrones no encontrados pero con StatusBusq = 0.
	var arrPadBusq = new Array();
	var nEnMaestro = 2;		// O lo que es lo mismo en binario: 0010.
	var nNoEnMaestro = 0;   // O lo que es lo mismo en binario: 0000.
	var bEstaMaestro;		// Flag para indicar si el padron ya esta ingresado en InfoMaestro de modo
							// de poder dar de alta a los padrones no encontrados en maestro.
	var arrNoEstanMaestro = new Array();   // Padrones que no se encontraron en Maestro y se daran de alta
										   // con StatusBusq = 0.

	arrPadBusq = strBusqOriginalForm.split(';');

	for (var i = 0; i < arrPadBusq.length; i++) {
		bEstaMaestro = false;
		for (var x = 0; x < this.tot_elem; x++) {
			if (this.arrPadrones[x].Id2 == arrPadBusq[i]) {
				// Esta en CONEATMAESTRO: encender el 2do bit menos significativo.
				this.arrPadrones[x].StatusBusq |= nEnMaestro;
				bEstaMaestro = true;
			}
		}

		// BUG (30/11/2001): caso de padrones NO en maestro (SI en bolson) y SI catcon....
		// ... se da de alta en la siguiente pasada y ya queda con StatusBusq = 2 (como
		// si estuviera en el maestro).
		// RESUELTO al incorporar el array arrNoEstanMaestro para darlos de alta sin repetidos.

		// Si no estaba ingresado en el objeto InfoMaestro es porque no se encontraron
		// datos en CONEATMAESTRO... darlo de alta pero con StatusBusq = 0.
		if (bEstaMaestro == false) {
			// Agregar a arrNoEstanMaestro SIN elementos repetidos.
			var z;
			for (z = 0; z < arrNoEstanMaestro.length; z++) {
				if (arrNoEstanMaestro[z] == arrPadBusq[i]) {
					// Ya lo encontro... salir
					break;
				}
			}
			if (z == arrNoEstanMaestro.length) {
				// Darlo de alta a arrNoEstanMaestro.
				arrNoEstanMaestro[z] = arrPadBusq[i];
			}
		}
	}

	// Hacer alta de los padrones que estan en arrNoEstanMaestro al objeto InfoMaestro
	// con StatusBusq = 0.
	for (var i = 0; i < arrNoEstanMaestro.length; i++) {
		this.NuevoElem(arrNoEstanMaestro[i], '', 0, 0, 0, '', 0, '', 0, 0, 0, '', nNoEnMaestro, '', '', 0, 0, '');
	}
}

// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
// METODO: StatusSegunBusquedaCatcon
//
// DESCRIPCION: PARCHE para encajar en aimsMio.js (funcion obtengoDatos) luego de que se hizo la busqueda en
//				SDE.CATCON.
//				A los padrones encontrados en CATCON se les prende el 1er bit menos significativo de StatusBusq.
//
// NOTA: No es muy elegante pero estamos llegando al plazo.
//
// PARAMETROS:
//		arrCatcon (array) - array de strings con los id2 de poligonos encontrados en CATCON con el siguiente
//							  formato: { "R-B 8000282", "R-B 8000282", "R-6081", "R-5695", "R-99099" }.
//
// RETORNO: nada.
//
// FECHA: 27/11/2001
// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
InfoMaestro.prototype.StatusSegunBusquedaCatcon = function(arrCatcon)
{
	// En arrCatcon pueden venir elementos repetidos (es lo mas probable) debido a la forma que se manejan
	// los datos en el codigo fuente original ... todo orientado a arrays paralelos cargados con los datos
	// de poligonos como vienen en la respuesta del servidor arcIMS. (Que le vamos a hacer!).

	// En esta funcion se compara contra Id2Bolson ya que esta almacenado el valor de Id2 que
	// estaria en los poligonos de CATCON.
	var nEnCatcon   = 1;	// En binario: 0001.

	for (var i = 0; i < arrCatcon.length; i++) {
		for (var x = 0; x < this.tot_elem; x++) {
			if (this.arrPadrones[x].Id2Bolson == arrCatcon[i]) {
				// Esta en CATCON: encender el 1er bit menos significativo de StatusBusq.
				this.arrPadrones[x].StatusBusq |= nEnCatcon;
			}
		}
	}
}


// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
// METODO: ObtenerStatusPorPadron
//
// DESCRIPCION: obtener el status de busqueda de strNumPadron segun se haya encontrado en CONEATMAESTRO
//				y CATCON.
//
// PARAMETROS:
//		strNumPadron (string) - numero de padron (formato sin letra-depto y guion).
//
// RETORNO: nStatusBusq (number) - status de busquedas en CONEATMAESTRO y CATCON (layer).
//								   Significado de codigos:
//										0   - NO en SDE.CONEATMAESTRO. NO en SDE.CATCON.
//										1   - NO en SDE.CONEATMAESTRO. SI en SDE.CATCON.
//										2   - SI en SDE.CONEATMAESTRO. NO en SDE.CATCON.
//										3   - SI en SDE.CONEATMAESTRO. SI en SDE.CATCON.
//
// FECHA: 29/11/2001
// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
InfoMaestro.prototype.ObtenerStatusPorPadron = function(strNumPadron)
{
	// En esta funcion se compara contra el campo Padron (formato sin letra-depto y guion).
	var nStatusBusq = -1;

	for (var i = 0; i < this.arrPadrones.length; i++) {
		if (this.arrPadrones[i].Padron == strNumPadron) {
			nStatusBusq = this.arrPadrones[i].StatusBusq;
			break;
		}
	}
	return nStatusBusq;
}


// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
// METODO: ObtenerCodFictoPorPadron
//
// DESCRIPCION: obtener el codigo de ficto para un padron.
//
// PARAMETROS:
//		strNumPadron (string) - numero de padron (formato sin letra-depto y guion).
//
// RETORNO: nCodFicto (number) - codigo ficto.
//						   Significado de codigos:
//
//					nCodFicto = -1 (Error. No se encontro el padron en objeto InfoMaestro)
//					nCodFicto = 0 (caso normal. no es ficto, etc.)
//					nCodFicto = 1 (padron Ficto).
//					nCodFicto = 2 (padron I.N.C., Colonizacion).
//
// FECHA: 4/12/2001
// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
InfoMaestro.prototype.ObtenerCodFictoPorPadron = function(strNumPadron)
{
	// En esta funcion se compara contra el campo Padron (formato sin letra-depto y guion).
	var nCodFicto = -1;

	for (var i = 0; i < this.arrPadrones.length; i++) {
		if (this.arrPadrones[i].Padron == strNumPadron) {
			nCodFicto = this.arrPadrones[i].CodFicto;
			break;
		}
	}
	return nCodFicto;
}


// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
// METODO: PadronesNoEnLayer
//
// DESCRIPCION: obtener padrones que no se encontraron en el layer.
//
// PARAMETROS: nada.
//
// RETORNO: arrPadrones (arrNumPad) - array de numeros de padron que no se encontraron en el layer
//									  SDE.CATCON.
//									  (Los numeros de padron tienen el formato letra-depto + guion).
//
// FECHA: 29/11/2001
// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
InfoMaestro.prototype.PadronesNoEnLayer = function()
{
	// Se retornan los padrones identificados por el campo Padron (formato sin letra-depto y guion)
	// que no se encontraron en el layer CATCON.
	var arrRet = new Array();   // Array retorno de la funcion.
	var x = 0;

	for (var i = 0; i < this.arrPadrones.length; i++) {
		if ((this.arrPadrones[i].StatusBusq == 0) || (this.arrPadrones[i].StatusBusq == 2)) {
			arrRet[x] = this.arrPadrones[i].Padron;
			x++;
		}
	}
	return arrRet;
}


// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
// METODO: ReportarStatusBusq
//
// DESCRIPCION: devolver un array (sin elementos repetidos) con los diferentes status de busqueda.
//				Los status diferentes son:
//
//	(status)     (significado)
//		0   - NO en SDE.CONEATMAESTRO. NO en SDE.CATCON.
//		1   - NO en SDE.CONEATMAESTRO. SI en SDE.CATCON.
//		2   - SI en SDE.CONEATMAESTRO. NO en SDE.CATCON.
//		3   - SI en SDE.CONEATMAESTRO. SI en SDE.CATCON.
//
// PARAMETROS: nada.
//
// RETORNO: arrStatus (arrays) - array de numeros (codigos) de status de busqueda.
//
// FECHA: 3/12/2001
// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
InfoMaestro.prototype.ReportarStatusBusq = function()
{
	var arrRet = new Array();   // Array retorno de la funcion.
	var x;

	for (var i = 0; i < this.arrPadrones.length; i++) {
		// Altas a arrRet sin elementos repetidos.
		for (x = 0; x < arrRet.length; x++) {
			if (this.arrPadrones[i].StatusBusq == arrRet[x]) {
				break;
			}
		}
		if (x == arrRet.length) {
			// Se llego al final de arrRet sin encontrarse el status...
			// dar el status de alta en el array de retorno.
			arrRet[x] = this.arrPadrones[i].StatusBusq;
		}
	}

	return arrRet;
}


// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
// METODO: ReportarCodFictos
//
// DESCRIPCION: devolver un array (sin elementos repetidos) con los diferentes codigos de fictos.
//				Los codigos de fictos son:
//
//	(status)     (significado)
//		0   - Normal (no es FICTO, no es INC, etc).
//		1   - Ficto.
//		2   - I.N.C. (Colonizacion).
//
// PARAMETROS: nada.
//
// RETORNO: arrcodFicots (array) - array de numeros (codigos de fictos).
//
// FECHA: 4/12/2001
// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
InfoMaestro.prototype.ReportarCodFictos = function()
{
	var arrRet = new Array();   // Array retorno de la funcion.
	var x;

	for (var i = 0; i < this.arrPadrones.length; i++) {
		// Altas a arrRet sin elementos repetidos.
		for (x = 0; x < arrRet.length; x++) {
			if (this.arrPadrones[i].CodFicto == arrRet[x]) {
				break;
			}
		}
		if (x == arrRet.length) {
			// Se llego al final de arrRet sin encontrarse el codigo de ficto...
			// dar de alta al codigo de ficto en el array de retorno.
			arrRet[x] = this.arrPadrones[i].CodFicto;
		}
	}

	return arrRet;
}

// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
// METODO: VaciarObjeto
//
// DESCRIPCION: reinicializar el objeto InfoMaestro a un estado 'vacio' (sin valores almacenados).
//				Deja el objeto al mismo estado que si se hubiera hecho un new del objeto.
//
// PARAMETROS: ninguno.
//
// RETORNO: nada.
// ---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M---M
InfoMaestro.prototype.VaciarObjeto = function()
{
	// Eliminar los objetos arrays...
	delete this.arrPadrones;
	// ... crear de nuevo los arrays.
	this.arrPadrones = new Array();

	this.tot_elem = 0;
}

// -----------------------------------------------------------------------------------------------------
// CONSTRUCTOR: InfoMaestro
//
// PARAMETROS: ninguno.
//
// USO: var objInfo = new InfoMaestro();
//
// -----------------------------------------------------------------------------------------------------
function InfoMaestro()
{
	// PROPIEDADES.
	this.arrPadrones = new Array();	// Array de objetos PadMaestro.
	this.tot_elem = 0;				// Contador de cantidad de elementos. Iniciar en cero.
}

