// JavaScript Document
var _ElementoDinamico = Class.create({
	'edinamico':false,
	'initialize':function(){	
	},
	'Agregar': function(_n,_v){
		this[_n] = _v;
	}
});

var _IdentificadorDinamico = Class.create({
	'id': false,
	'valor':false,
	'initialize':function(i,v){
		this.id = i;
		this.valor = v;
	}
});

var AdministradorConsultaContenido = Class.create({
	'id':false,
	'GeneradorContenido':false,
	'Pantalla' : false,
	'Contenedor' : false,
	'Nodo': false,
	'Multiple':false,
	'Criterio':false,
	'NodoRaiz' : false,
	'initialize' : function(nodo,cad){
		//this.id = id;
		this.Criterio = cad;
		this.Nodo = new Array();
		this.NodoRaiz=nodo;
	},
	'Procesar':function(){
		var cad = this.Criterio;
		var _def = cad;
		var _els = new Array();
		var _tmp = false;
		if(cad.indexOf(":") > -1){
			_tmp = cad.split(":");
			_def = _tmp[0];
			_els = _tmp[1];
		}
		//Se obtienen los datos del div de salida
		this.Pantalla = this._contenido("[","]",_def);
		if(_els.length>0){
			var tmpContenedor = _def.replace("["+this.Pantalla+"]","");
			var valMultiple =  this._contenido("(",")",tmpContenedor);
			this.Contenedor =tmpContenedor.replace("("+valMultiple+")","");
			this.Multiple = valMultiple == "*" ? true : false;
			this.Nodo = _els.split("|");
		}else{
			var elNodo = _def.replace("["+this.Pantalla+"]","");
			var valMultiple =  this._contenido("(",")",elNodo);
			this.Multiple = valMultiple == "*" ? true : false;
			this.Nodo[0] = elNodo.replace("("+valMultiple+")","");
		}
		
	},
	'_contenido':function(ini,fin,cad){
		var posi 	= cad.indexOf(ini);
		var posfIni = ini == fin ? posi+1 : 0;
		var posf 	= cad.indexOf(fin,posfIni);
		var _cont 	= false;
		if(posi>-1 && posf>-1){
			posi  = posi + ini.length;
			posf  = posf-posi;
			_cont = cad.substr(posi,posf);
		}
		return _cont;
	},
	'fnContenido':function(fn){
		this.GeneradorContenido = fn;
	},
	'CargaNodo':function(j, x, o){
		var _iCN = 0;
		var _Valores = new _ElementoDinamico();
		for(_iCN=0; _iCN < this.Nodo.length; _iCN++){
			var _Nodo  = this.Nodo[_iCN];
			var _Valor = j.Nodo(_Nodo,x).Contenido();
			_Valores.Agregar(_Nodo,_Valor);
		}
		var _objNodo = this.GeneradorContenido(_Valores);
		var _objPantalla = this.Pantalla.replace("%" + o.id + "%", o.valor);
		if($(_objPantalla))
			$(_objPantalla).appendChild(_objNodo);
	}
})

var AJAXNoteUpdater = Class.create({
	'id': false,
	'_ids' : false,
	'_idObj' : false,
	'jx' : false,
	'_estado': false,
	'_criterios' : false,
	'initialize': function(id){
		this._criterios = new Array();
		this.jx = new AJAX();
		this._ids = new Array();
		this._idObj = new Array();
		this.id = id;
	},
	'Iniciar' : function(){
		this._estado = "Iniciado";
	},
	'Terminar' : function(){
		this._estado = "Terminado";
	},
	'Incluir' : function (id){
		if(!this._existe(id)){
			this._ids[this._ids.length] = id;
			var _tmpObj = new _ElementoDinamico();
			_tmpObj.Agregar("id",id);
			this._idObj[this._idObj] = _tmpObj;
		}
	},
	'Elemento':function(id){
		var _retorno = false;
		var _iE = 0;
		for(_iE=0; _iE<this._idObj.length;_iE++){
			_retorno = this._idObj[_iE].id == id ? this._idObj[_iE] : _retorno;
		}
		return _retorno;
	},
	'_existe' : function(id){
		var _ei = 0;
		var _encontrado = false;
		for(_ei=0; _ei < this._ids.length; _ei++){
			_encontrado = this._ids[_ei] == id ?  true : _encontrado;
		}
		return _encontrado;
	},
	'Solicitar':function(){
		if(this._estado == "Terminado"){
			this.jx.Reestablecer();
			this.jx.URL("/UpdaterData/xmlColector"+this.id+".php");
			this.jx.Parametro(_Nuevo).Valor("ids",this._ids.join("|"));
			var tmpFn = false;
			eval('tmpFn=function(){'+ this.id + '.ProcesaSolicitud()}') ;
			this.jx.AlTerminar(tmpFn);
			this.jx.Conectar();
		}else{
			if(this._estado== false){
				alert("No se ha iniciado el proceso de recolección");
			}else{
				if(confirm("No se ha concluido el proceso de recolección. ¿Desea continuar?")){
					this.Terminar();
					this.Solicitar();
				}
			}
		}
	},
	'ProcesaSolicitud' : function(){
		var _iPS = 0;
		var _jPS = 0;
		var _iiPS = 0;
		var _iiiPS = 0;
		for(_iPS = 0; _iPS<this._criterios.length; _iPS++){
			// Se extra el renglon princpial
			var DocXMLRaiz = this.jx.Nodo(this._criterios[_iPS].NodoRaiz).DocXML;
			var _Identificador = this._criterios[_iPS].Pantalla.indexOf("%") > 0 ? this._criterios[_iPS]._contenido("%","%",this._criterios[_iPS].Pantalla):"";
			for(_jPS = 0; _jPS < DocXMLRaiz.length; _jPS++){
				var _objIdentificador = new _IdentificadorDinamico(_Identificador,this.jx.Nodo(_Identificador,DocXMLRaiz[_jPS]).Contenido());
				var _pantallaContenedor = this._criterios[_iPS].Pantalla;
				var _criterioContenedor = this._criterios[_iPS].Contenedor;
				if(_criterioContenedor){
					var TotalContenedores = this.jx.Nodo(_criterioContenedor,DocXMLRaiz[_jPS]).Total;
					var DocXMLContenedor = this.jx.Nodo(_criterioContenedor,DocXMLRaiz[_jPS]).DocXML;
				}else{
					_criterioContenedor = this._criterios[_iPS].Nodo[0];
					var TotalContenedores = this.jx.Nodo(_criterioContenedor,DocXMLRaiz[_jPS]).Total;
					var DocXMLContenedor = new Array();
					DocXMLContenedor[0] = DocXMLRaiz[_jPS];				
				}
				var _iteraciones = 0;
				for(_iiPS = 0; _iiPS< TotalContenedores; _iiPS++, _iteraciones++){
					this._criterios[_iPS].CargaNodo(this.jx, DocXMLContenedor[_iiPS], _objIdentificador);
				}
				if(_iteraciones==0){
					//Se elimina el div padre o contenero del cual se esta ingresando
					var _elementoEliminar = $(_pantallaContenedor.replace("%"+_objIdentificador.id+"%",_objIdentificador.valor));
					var _continuar = true;
					while(_continuar){
						var _tag = _elementoEliminar ? _elementoEliminar.tagName.toUpperCase() : "SPAN";
						if("_DIV_ _SPAN_ _BODY_".indexOf("_"+_tag+"_") > -1){
							_continuar = false;
						}else{
							_elementoEliminar = _elementoEliminar.up();
						}
					}
					if(_elementoEliminar)
						_elementoEliminar.remove();
				}
			}
		}
	},
	'Criterio' : function(nodo,criterio,fn){
		var _Ultimo = this._criterios.length;
		this._criterios[_Ultimo] = new AdministradorConsultaContenido(nodo,criterio);
		this._criterios[_Ultimo].GeneradorContenido = fn;
		this._criterios[_Ultimo].Procesar();
	}
});