// JavaScript Document
// Ej:.	form_datos.push(new Array("<? echo $form_name; ?>", "<? echo $form_key_name; ?>", "<? echo $list_name; ?>", "<? echo $obj_js; ?>", "<? echo $tabla_real; ?>"));
// Ej:.	form_type.push(new Array("<? echo $$nom_campo_id; ?>[]", "<? echo $$nom_tabla; ?>", 'tipo de control - TREE'));
// Estructura de la variale [form_datos]
// nom_tabla     = form_datos[0];
// nom_campo_key = form_datos[1];
// nom_vista     = form_datos[2];
// nom_objList   = form_datos[3];
// nom_objForm   = form_datos[4];
// form_padre   	= form_datos[5];
// nom_objWinList = form_datos[6];
// id_permiso   	= form_datos[7];
// title   			= form_datos[8];

//
// Form_especial es un array de arrays, es usado para ejecutar funciones adicionales en un formulario especial
// el uso basico es para modificar las funciones de la Toolbar
// Ej:.  form_especial.push(new Array("guardar","guarda_pedido"));
// Ej:.  form_especial.push(new Array("editar","ctrlSH", "'<?php echo $form[0]["nom_objList"]; ?>',true"));

	var form_datos = (form_datos)? form_datos : new Array();
	var form_type  = new Array();
	var varAction_sr = new Array();
	var form_especial = new Array();
	var msgErrFdf001 = "La información del formulario contiene errores, por favor corija los campos antes de intentar Guardar";

//===========================================
// Funcion para Completar la variable global form_datos con 5 datos
//===========================================
	function completar_form_datos()
	{
		// dic. 27 2005 egon
	   //if(form_datos.length > 0)
		//	   alert("23 completar_form_datos\n" + form_datos.length + "\n" );
		for(n=0; n<form_datos.length; n++ )
		{
// alert(form_datos[n].length);
			switch(form_datos[n].length)
			{
				case 1:
	  		  		alert('Error: Variable form_datos incompleta.');
				break;
		  		case 2:
					form_datos[n][2] = new String(form_datos[n][0]);
						form_datos[n][2] = trim(form_datos[n][2].replace(".", "__"));
					form_datos[n][3] = new String("oList_"+form_datos[n][0])
						form_datos[n][3] = trim(form_datos[n][3].replace(".", "__"));
					form_datos[n][4] = new String("oForm_" +form_datos[n][0])
						form_datos[n][4] = trim(form_datos[n][4].replace(".", "__"));
				break;
  				case 3:
					//form_datos[form_datos.length - 1][3] = new String("oList_"+form_datos[form_datos.length - 1][2]).replace(".", "__");
					form_datos[n][3] = new String("oList_" + form_datos[n][0]);
						form_datos[n][3] = trim(form_datos[n][3].replace(".", "__"));
					form_datos[n][4] = new String("oForm_" + form_datos[n][0]);
						form_datos[n][4] = trim(form_datos[n][4].replace(".", "__"));
				break;
	  			case 4:
					form_datos[n][4] = new String("oForm_" + form_datos[n][0]);
						form_datos[n][4] = trim(form_datos[n][4].replace(".", "__"));
					form_datos[n][5] = "";
				break;
			}

		}
	}

//===========================================
// Funcion para Limpiar el Formulario
//===========================================
	function formActionNuevo()
	{
		EstadoSistema("");

		abrirFormSecciones();
		if(form_datos.length > 0)
		{
   		completar_form_datos();
      	for(n=0; n<form_datos.length; n++ )
      	{
    			//nom_tabla     = new String(form_datos[n][0]);
    			//nom_campo_key = new String(form_datos[n][1]);
    			//nom_vista     = new String(form_datos[n][2]);
    			//nom_objList   = new String(form_datos[n][3]);
    			nom_objForm   = new String(form_datos[n][4]);

    			objForm = oBusca(nom_objForm);  // Esta funcion no puede ser reemplazada con la $ de scriptacolous, no encuentra por la propiedad name

				if(objForm)
				{
					// EG 21-02-2008 Los sig 2 if verifican y limpian los input del formulario
					if( trim(objForm.tagName.toUpperCase()) == "FORM" )
					{
		    			objForm.reset();
					}
					if( trim(objForm.tagName.toUpperCase()) == "DIV" )
					{
						objForm = objForm.getElementsBySelector(['input', 'textarea']);
						objForm.each(function(item) {
							item.value = '';
						});
					}

	     			for(i=0; i<objForm.length; i++)
	    			{
		    			_tid = (objForm[i].id) ? trim(objForm[i].id) : "";

						// EG - 23/04/2008
						if( objForm[i].type.toUpperCase() == "TEXTAREA")
						{
							if( typeof(tinyMCE) == "object" )
							{
         					var ed = tinyMCE.get(_tid);
         					if(ed)
         					{
         					ed.setContent("");
							}
						}
						}

						// F0 - 28/05/2009
						if( objForm[i].type.toUpperCase() == "CHECKBOX")
						{
							Ext.ComponentMgr.get(objForm[i].id).setValue(false);
						}

		    			oCampo = oBusca(_tid);
		    			oMsg   = oBusca("ibxMsg_"+ _tid);
		    			if (oMsg)
		    			{
		    				if (!(oCampo.className == "ibxInputRO" || oCampo.className == "ibxHidden" || oCampo.className == "icbxHidden"))
		    				{
	 	    					oCampo.className = "ibxInput";
	                        }
		    				obj_writeHTML(oMsg, "");
		    				oMsg.className = "ibxMsg";
		    			}
		    			//oAux = oBusca("txtBusca['"+objForm[n].id+"']");
		    			//oBusca(objForm[n].id).focus();
		    		}
	    		}

		}
		}

		// Verifico si hay Grillas en el formulario y las limpio  EG- 2007/08/01
		if(typeof(_aGrid) != "undefined")
		{
			for(var n=0; n<_aGrid.length; n++)
			{
	         Anuncio("Vaciando Grilla...");
	         _aGrid[n].vaciar();
	      }
		}

      // Verifico si hay Uploads en el formulario y los limpio  EG- 2008/02/12
		if(typeof(_aUpload) != "undefined")
		{
			for(var n=0; n<_aUpload.length; n++)
	      {
	         Anuncio("Limpiando Formulario...");
	         _aUpload[n].Vaciar();
			}
		}

		// Buscando Listados y limpiandolos  EG - 2008/04/11
		if(typeof(_aListados) != "undefined")
		{
			for(var n=0; n<_aListados.length; n++)
	      {
	         Anuncio("Limpiando Listas...");
	         _aListados[n].vaciar();
			}
		}

		// Buscando ComboBox y limpiandolos  EG - 2008/12/09
		if(typeof(_aControlBox) != "undefined")
		{
			for(var n=0; n<_aControlBox.length; n++)
	      {
	         _aControlBox[n].vaciar();
			}
		}

		cerrarFormSecciones();

		if( typeof(_formActionNuevo) == "function" )
		{
         _formActionNuevo();
      }
     Anuncio("");
 }

//===========================================
// Funcion de Acciones del Formulario Guardar y Borrar
// a traves de Script Remotos
//===========================================
var _axPG = null;
	function formAction_sr()
	{
//   alert("86 formAction_sr \n" + form_datos.length + "\n" + arguments[0] + "\n" + arguments[1] );
		if(typeof(arguments[0]) == "object")
		{
			if(typeof(arguments[0].ctype) == "string")
			{
				cmd = arguments[0].action;
				tabla = typeof(arguments[0].tabla) != "undefined" ? arguments[0].tabla : "";
			}
		}
		else
		{
			cmd = arguments[0];  // Comando
			tabla = typeof(arguments[1]) != "undefined" ? arguments[1] : "";
		}

		_dARR = new Array();
		_pass = new Array();
		_error = new Number(0);
		varType = new String("");
		_func = "";
      _params = "";
		_posicion = form_datos.length - 1;

		//Ejecuta [cmd] con funciones especiales
		if(form_especial.length > 0)
		{
			for(xm=0; xm<form_especial.length; xm++)
			{
// alert(form_especial[xm][0] + " == " + cmd);
				if(form_especial[xm][0] == cmd)
				{
					_func = form_especial[xm][1];
					_params = form_especial[xm][2];
				}
			}
		}

		//Completar el Array form_datos
		completar_form_datos();

		/* for(n=0; n<form_datos.length; n++)
			{
			   alert("dato n,0 " + trim(form_datos[n][0]) +
                  "\ndato n,1 " + trim(form_datos[n][1]) +
                  "\ndato n,2 " + trim(form_datos[n][2]) +
                  "\ndato n,3 " + trim(form_datos[n][3]) +
                  "\ndato n,4 " + trim(form_datos[n][4]) +
                  "\ndato n,5 " + trim(form_datos[n][5])
						);
			}
  */

		// Usado para grabar una pagina con multiples formularios
		for(n=0; n<form_datos.length; n++)
		{
		   if( (typeof(tabla)=="string") && (trim(form_datos[n][0]) == trim(tabla)) )
		   {
				_posicion = n;
				n = form_datos.length;
			}
		   if( (typeof(tabla)=="number") && (form_datos.length > tabla) )
		   {
				_posicion = tabla;
				n = form_datos.length;
			}
			//alert( "T: " + typeof(tabla) + "\nN: " + tabla + "\nPos: " + _posicion);
		}

// alert(_posicion);
		if(_posicion >= 0)
		{
		nom_tabla     = new String(form_datos[_posicion][0]);
		nom_campo_key = new String(form_datos[_posicion][1]);
		nom_vista     = new String(form_datos[_posicion][2]);
		nom_objList   = new String(form_datos[_posicion][3]);
		nom_objForm   = new String(form_datos[_posicion][4]);
		}
		else
		{
			nom_tabla     = new String("");
			nom_campo_key = new String("");
			nom_vista     = new String("");
			nom_objList   = new String("");
			nom_objForm   = new String("");
		}
		//alert(nom_tabla + "\n" + nom_campo_key + "\n" + nom_vista + "\n" + nom_objList + "\n" +nom_objForm);
		switch(cmd)
		{
			case "guardar":
				parametros = new Array();
				if(form_datos.length > 0)
				{
					objForm     = $(trim(nom_objForm));
					_data       = new String("");
					_key        = new String("");
					_estado_key = new String("");

					// EG - 22-02-2008  El sigueinte IF depende de Scriptacoluos y se usa para hacer un array de los Input de un DIV
					 if( objForm.tagName == "DIV" )
					 {
					  objForm = objForm.getElementsBySelector(['input', 'textarea']);
					 }

// alert("Obj: " + objForm + "\nNom: " + nom_objForm + "\nTipo:" );
					if(objForm)
					{
						if(verificaForm(objForm) == false)
						{
						   return;
						}

					for(var n=0; n<objForm.length; n++)
					{
						if( trim( objForm[n].name.toUpperCase() ) == trim( nom_campo_key.toUpperCase() ) )
						{
							if( trim(objForm[n].value) != "" )
							{
								// EG - 2009-04-29
								var oldPK = objForm[n].value;
								if(n-1 >= 0)
								{
									if( trim( objForm[n-1].name.toUpperCase() ) == (trim( nom_campo_key.toUpperCase() ) + "_PK") )
									{
										if(trim(objForm[n-1].value) != "" )
										{
											oldPK = objForm[n-1].value;
										}
									}
								}
								// fin 2009-04-29

								_x001 = ("" + objForm[n].onblur);
								if(_x001.match("esNumero") == "esNumero")
								{
									_key = objForm[n].name + "='" + formatNumero(oldPK) + "'";
								}
								else
								{
									if(_x001.match("esEntero") == "esEntero")
									{
										_key = objForm[n].name + "='" + formatNumero(oldPK) + "'";
									}
									else
									{
										_key = objForm[n].name + "='" + oldPK + "'";
									}
								}
							}
							_estado_key = "" + objForm[n].readOnly;
						}
						_tipo = new String(objForm[n].type);
						//if (trim(objForm[n].value) == "")
						//	_campovalue = "NULL";
						//else
						_campovalue = trim(objForm[n].value);

						switch( trim(_tipo.toUpperCase()) )
						{
							case "PASSWORD":
								_enc = false;
								for(o=0; o<_pass.length; o++ )
								{
									if(objForm[n].name.indexOf(_pass[o][0]) != -1 )
									{
//alert("206 formAction_sr password -> (" + objForm[n].name + " - " + objForm[n].value + ")\n" + objForm[n].type.toUpperCase() );
										// compare las cadenas
										if(hex_md5(objForm[n].value) == hex_md5(_pass[o][1]))
										{
											_data += _pass[o][0]+ separador_col + hex_md5(_campovalue) + separador_reg ;
											_error = 0;
										}
										_enc = true;
									}
								}
								if(_enc == false)
								{
									_pass.push( new Array( objForm[n].name , objForm[n].value ) )
									_error = 1;  // error de password
								}
							break;
							case "TEXT":
								//	if(trim(objForm[n].value) != "")
								if(objForm[n].name.match("txtBusca") != "txtBusca")
								{
									_x001 = ("" + objForm[n].onblur);
									if(_x001.match("esNumero") == "esNumero")
									{
										_campovalue = formatNumero(_campovalue);
									}
									if(_x001.match("esEntero") == "esEntero")
									{
										_campovalue = formatNumero(_campovalue);
									}
									_data += objForm[n].name + separador_col + _campovalue + separador_reg ;
								}
							break;
							case "RADIO":
								if(objForm[n].checked == true)
								{
									_data += objForm[n].name + separador_col + _campovalue + separador_reg ;
								}
							break;
							case "CHECKBOX":
								if(objForm[n].checked == false)
								{ _campovalue = "0"; } // False,  NO NULO - OJO xButil 21/01/2008  10:01:33
								else
								{ _campovalue = "1"; } // False,  NO NULO - OJO xButil 21/01/2008  10:01:33
								// recorremos el array para verficiar si la variable ya esta cargada
								varF = false;
								vPOS = 0;
								for(m=0; m<_dARR.length; m++)
								{
									if(_dARR[m][0] == objForm[n].name)
									{
										varF = true;
										vPOS = m;
									}
								}
								// si es tipo TREE se debe guardar por aparte cada valor y no en cadena
								for(p=0; p<form_type.length; p++)
								{
									if((form_type[p][0] == objForm[n].name) && (form_type[p][2] == 'TREE'))
									{ varF = false; varType = "TREE";}
								}
								if(varF == true)
								{
									_dARR[vPOS][1] += "," + _campovalue;  // los chk box se guardana en un solo campo separandolos con coma ( , )
								}
								else
								{
									if(varType == "TREE")
									{
										if (_campovalue != "")
										{
											_dARR.push(new Array(objForm[n].name, _campovalue));
										}
									}
									else
									{ _dARR.push(new Array(objForm[n].name, _campovalue)); }
								}
								//	_data += objForm[n].name + separador_col + _campovalue + separador_reg ;
							break;
							case "TEXTAREA":
								// EG - 23/04/2008
								if( typeof(tinyMCE) == "object" )
								{
         							var ed = tinyMCE.get(objForm[n].name);
         							if(ed)
         							{
         								_campovalue = ed.getContent();
									}
								}
								_data += objForm[n].name + separador_col +  _campovalue + separador_reg ;
							break;
						}
					 } }
					// Leemos los datos guardados
					for(m=0; m<_dARR.length; m++)
					{
						rExp = "[]";
						_dARR[m][0] = _dARR[m][0].replace(rExp,"");
						///* //si son solo comas le asigna null
/*
						var _aT = _dARR[m][1].replace( (/,/ig), "");
						if( _aT.trim() == "" ) { _dARR[m][1] = ""; }
						else
						{
							_aT = _dARR[m][1].trim();
							while( _aT.indexOf(",,") != -1 )
							{
								_aT = _aT.replace( (/,,/ig), ",");
							}
							if ( _aT.indexOf(",") == 0 ) {  _aT = _aT.substr(1); }
							while((_aT.lastIndexOf(",") == (_aT.length - 1) ) && (_aT.lastIndexOf(",") != -1) )
							{
								_aT = _aT.substr(0, (_aT.length -1) );
							}
							_dARR[m][1] = _aT.trim();
						}
*/
						//*/
						_data += _dARR[m][0] + separador_col + _dARR[m][1] ;
  					if(m < (_dARR.length -1)) { _data += separador_reg; }
					}
					 //alert( "243 \n " + form_datos[form_datos.length - 1][0] + "\n key: " +  _key + "\n _estado_key: " +  _estado_key + "\n data: " +  _data + "\n : " +  "0" + "\n nom_objList: " +  nom_objList + "\n vartype: " +  varType);
					 //alert("244..."+nom_objList);

         		if (_key == "") // Asegura enviar por lo menos el nombre del campo KEY para veirificaciones en el forms_db_fx.php
            		_key = nom_campo_key;
					parametros.push( form_datos[_posicion][0], _key, _estado_key, _data, "0", nom_objList, varType);
// 				alert("472 \n " + form_datos[_posicion][0] +"\n ACA: "+ _key +"\n "+ _estado_key +"\n"+ _data+ "\n"+ nom_objList +"\n"+ varType );
					if(_error == 0)
					{
//						alert("257:"+_func);
						if(_func == "" )
						{
//                 		parametros[3] = parametros[3].replace(/\'/g,"\\'");
							//alert("447 - forms_db_fx...." + parametros[3]);

							if(typeof(sid) != "undefined")
							{
//								jsrsExecute(dirLibsPHP+"forms_db_fx.php?dirInstall="+dirInstall+"&"+sid, _ret_Guardar, "Guardar", parametros, false);
              		var sidname = sid.split('=');
              		//alert("sidname[1]="+sidname[1]);
		              parametros = { "sidname":sidname[1],
                                "function":"Guardar",
                                "tabla":form_datos[_posicion][0],
                                "key":_key,
                                "estado_key":_estado_key,
                                "datos":_data,
                                "verifica":"0",
                                "lista":nom_objList,
                                "especial_guardado":varType
                               };
              }
							else
							{
//								jsrsExecute(dirLibsPHP+"forms_db_fx.php?dirInstall="+dirInstall, _ret_Guardar, "Guardar", parametros, false);
		              parametros = { "function":"Guardar",
                                "tabla":form_datos[_posicion][0],
                                "key":_key,
                                "estado_key":_estado_key,
                                "datos":_data,
                                "verifica":"0",
                                "lista":nom_objList,
                                "especial_guardado":varType
                               };
              }
//alert("fdbfx \n" + parametros.function + "\n" + parametros.tabla + "\n\n" + _data +"\n\n"+_key+"\n\n"+_estado_key);
					_axPG = parametros;
        			jsrsE = new Ajax.Request(dirLibsPHP+"forms_db_fx.php",
        			{
        				method: 'post',
								encoding: axHTMLCharSet,
        				onSuccess: _ret_Guardar,
        				parameters: parametros
        			}
        			);

		 				}
						else
						{
							eval(_func+"("+ _params +")");
							//parametros.push( form_datos[form_datos.length - 1][0], _key, _estado_key, _data, "0", nom_objList, varType);
							//alert("252");
							//jsrsExecute("seguridad_usuarios_fx.php", _ret_Guardar, "Guardar", parametros, true);
						}
					}
					else
						estado("Las claves no coinciden, <br> Registro NO guardado");
				}
			break; // Case Guardar

////////////////////////////////////////////////////////////////////////////////
			case "imprimir":
				if(_func == "" )
				{
					_np = oBusca("nom_pagina");
					_nr = oBusca("nom_reporte");
					_nf = oBusca("nom_formulario");
					if( !isNull(_nf) )
					{
						_nf = oBusca(_nf.value);
						if(_nr.value != "")
						{
							_cad = "";
							for(nl=0; nl<_nf.elements.length; nl++)
							{
								if (_cad == "")
									_cad += "?";
								if (_cad != "?")
									_cad += "&";
								_cad += _nf.elements.item(nl).name + "=" + _nf.elements.item(nl).value;
								//alert(_nf.elements.item(nl).name+ "\n" + _nf.elements.item(nl).value);
							}
							//alert(_nr.value + "\n" + _cad + "\n" + _nf.id);
							myreporte = window.open( ( _nr.value + _cad ) , _nf.id, "menubar=no,toolbar=no,location=no");
						}
					}
				}
				else
				{
					eval(_func+"("+ _params +")");
				}
			break;

////////////////////////////////////////////////////////////////////////////////
			case "borrar":
//alert("r: " + form_datos.length);
				{
					if(form_datos.length > 0)
					{
						objForm = oBusca(nom_objForm);

						// EG - 22-02-2008  El siguiente IF depende de Scriptacoluos y se usa para hacer un array de los Input de un DIV
//alert("567\n" + objForm.tagName );
						 if( objForm.tagName == "DIV" )
						 {
						  objForm = objForm.getElementsBySelector(['input', 'textarea']);
						 }

						_key       = "";
						_key_value = "";
						if(objForm)
						for(n=0; n<objForm.length; n++)
						{
//alert("579 \n" + objForm[n].name + " - " + nom_campo_key + " == " + objForm[n].value);
							if( trim( objForm[n].name.toUpperCase() ) == trim( nom_campo_key.toUpperCase() ) )
							{
								if( trim(objForm[n].value) != "" )
								{
									_key    = objForm[n].name + "='" + objForm[n].value + "'";
								}
								_key_value = objForm[n].value;
							}
						}
						if(_key != "")
						{
							_data = confirm("Está seguro que desea eliminar este Registro [ID #"+_key_value+"] ?");
							if(_data)
							{
								parametros = new Array(nom_tabla, _key, nom_objList, nom_vista);
								//alert("198 \n" + parametros)
					     	if(_func == "" )
					     	{
//									  jsrsExecute(dirLibsPHP+"forms_db_fx.php?dirInstall="+dirInstall+"&"+sid, _ret_Borrar, "Borrar", parametros, false);
										if(typeof(sid) != "undefined")
										{
					              		var sidname = sid.split('=');
						              parametros = { "sidname":sidname[1],
				                                "function":"Borrar",
				                                "tabla":nom_tabla,
				                                "key":_key,
				                                "verifica":"0",
				                                "lista":nom_objList,
				                                "vista":nom_vista
				                               };
				              		 }
											else
											{
						              parametros = { "function":"Borrar",
				                                "tabla":nom_tabla,
				                                "key":_key,
				                                "verifica":"0",
				                                "lista":nom_objList,
				                                "vista":nom_vista
				                               };
				              }
				//alert(axHTMLCharSet + "\n\n" + Object.toJSON(parametros) );
				        			jsrsE = new Ajax.Request(dirLibsPHP+"forms_db_fx.php",
				        			{
				        				method: 'post',
										encoding: axHTMLCharSet,
				        				onSuccess: _ret_Borrar,
				        				parameters: parametros
				        			}
				        			);
                }
								else
								{
								 	eval(_func+"("+ _params +")");
                }
							}
						}
					}
				}
			break;

////////////////////////////////////////////////////////////////////////////////
			case "buscar":
				if(typeof(accion_listar) == "function")
				{ accion_listar(); }
			break;

////////////////////////////////////////////////////////////////////////////////
			case "editar":
//   alert("Editar "+ _func + " -  " + _params);
// EG - Oct 24 de 2006
				if(trim(_func) != "" && trim(_func) != "''" )
				{
				   try
				   {
						eval(_func+"("+ _params +")");
					}
					catch(err)
					{
// 					   alert(err.description);
					}
				}
				else
				{
				}
			break;
		}
	}

function verificaForm(objForm, visAviso)
{
 var visAviso = arguments[1] == false?arguments[1]:true;
 var n=0;

	for(n=0; n<objForm.length; n++)
	{
	   var _sT = new String(objForm[n].className);
		if( (_sT.indexOf("Hidden")) == -1 )
		{
			if( trim(objForm[n].value) == "" )
			{
				try
				{
				   objForm[n].focus();
				   objForm[n].blur();
				}
				catch(err)
				{
				//Handle errors here
				}
			}
		}
	}
	for(n=0; n<objForm.length; n++)
	{
	   var _sT = new String(objForm[n].className);

		if( (_sT.indexOf("Err")) != -1 )
		{
			if(visAviso == true)
			{
		   msg_alerta(msgErrFdf001);
			}
		   return (false);
		}
	}

return(true);
}

//===========================================
// Funcion de Respuesta al SR Guardar
//===========================================
	function _ret_Guardar()
	{
	var transport = arguments[0];
// alert(transport.status + " - " + transport.statusText + " - " + transport.readyState +  "\n\n" + transport.getAllHeaders() + "\n\n" + transport.getAllResponseHeaders() );
//alert("Retorno:\n" + transport.responseText);
	var xo = transport.responseXML;
		var _lista = "";
		var _verifica = 0;

	if(xo.getElementsByTagName('error')[0].childNodes.length !=0)
	{
		var _error = _extractXML(xo.getElementsByTagName('error')[0].childNodes[0]);
	}
	else { var _error = ""; }
// alert(_error);
	if(xo.getElementsByTagName('error_msg')[0].childNodes.length !=0)
	{
		var _error_msg = _extractXML(xo.getElementsByTagName('error_msg')[0].childNodes[0]);
	}
	else { var _error_msg = ""; }
// alert(_error_msg);
	if(xo.getElementsByTagName('verifica')[0].childNodes.length !=0)
	{
		var _verifica = _extractXML(xo.getElementsByTagName('verifica')[0].childNodes[0]);
	}
	else { var _verifica = ""; }
// alert("685 " + _verifica);
	if(xo.getElementsByTagName('tabla')[0].childNodes.length !=0)
	{
		var _tabla = _extractXML(xo.getElementsByTagName('tabla')[0].childNodes[0]);
	}
	else { var _tabla = ""; }
// alert(_tabla);
	if(xo.getElementsByTagName('key')[0].childNodes.length !=0)
	{
		var _key = _extractXML(xo.getElementsByTagName('key')[0].childNodes[0]);
	}
	else { var _key = ""; }
// alert(_key);
	if(xo.getElementsByTagName('lista')[0].childNodes.length !=0)
	{
		var _lista = _extractXML(xo.getElementsByTagName('lista')[0].childNodes[0]);
	}
	else { var _lista = ""; }
// alert(_lista);
	if(xo.getElementsByTagName('sSQL')[0].childNodes.length !=0)
	{
		var _sql = _extractXML(xo.getElementsByTagName('sSQL')[0].childNodes[0]);
	}
	else { var _sql = ""; }
// alert(_sql);
	if(xo.getElementsByTagName('datos')[0].childNodes.length !=0)
	{
		var _datos = _extractXML(xo.getElementsByTagName('datos')[0].childNodes[0], 'datos');
	}
	else { var _datos= ""; }
// alert(_datos);

//alert("ERR "+  _error + "\nMSG " + _error_msg + "\nVER " + _verifica + "\nTAB " + _tabla + "\nKEY " + _key + "\n\nDAT " + _datos + "\n\nLIS " + _lista );

// alert("p1");
		if( (_error != "") && (_error != "1") )
		{
			estado(_error_msg);
		}
		else  // else error
		{
			if(_verifica == "1")
			{
				_data = confirm("Está seguro que desea sobreescribir ?");
				if(_data)
				{
//          parametros[3] = parametros[3].replace("'","\'");
							if(typeof(sid) != "undefined")
							{
              		var sidname = sid.split('=');
		              parametros = { "sidname":sidname[1],
                                "function":"Guardar",
                                "tabla":_tabla,
                                "key":_key,
                                "estado_key":"readonly",
                                "datos":_datos,
                                "verifica":_verifica,
                                "lista":_lista
                               };
              }
							else
							{
		              parametros = { "function":"Guardar",
                                "tabla":_tabla,
                                "key":_key,
                                "estado_key":"readonly",
                                "datos":_datos,
                                "verifica":_verifica,
                                "lista":_lista
                               };
              }

				_axPG.verifica = _verifica;
//alert("760\n" + _axPG.datos + "\n\n"+ _axPG.verifica );
//alert( Object.toJSON(parametros) );
        			jsrsE = new Ajax.Request(dirLibsPHP+"forms_db_fx.php",
	        			{
	        				method: 'post',
							encoding: axHTMLCharSet,
	        				onSuccess: _ret_Guardar,
	        				onException: _err_Guardar,
	        				onFailure: _err_Guardar2,
	        				parameters: _axPG
	        			}
        			);
        			_axPG = null;
				}
			}
			else
			   {
					EstadoSistema("Guardado");
					estado("Datos Guardados...\n" + _error_msg);

		if( trim(_lista) != "")
		{
			for(n=0; n<_aListados.length; n++)
			{
				if( trim(_aListados[n].idDES) == trim(_lista) ) // Solo refresca el Listado que se guardo
				{
				   _aListados[n].cargaInicial = true;
					_aListados[n].refresca();
				}
			}
		}

				if(typeof(fevt_dGuardar) == "function")
				{ fevt_dGuardar(); }
			}
		}  // else error
	}

function _err_Guardar(transport)
{
	alert("EXCEPTION MEGA ERROR");
}
function _err_Guardar2(transport)
{
	alert("FAILURE MEGA ERROR");
	}

//===========================================
// Funcion de Respuesta al SR Borrar
//===========================================
	function _ret_Borrar()
	{
		var transport = arguments[0];
		var str = transport.responseText;
		var _lista = "";
		var _tabla = "";
		var _vista = "";
		var _error_msg = "";
		eval(str);

		estado(_error_msg);

		if(_vista != "")
		{
			for(n=0; n<_aListados.length; n++)
			{
				//alert("forms_db_fx.js 387: \n" + _aListados[n].idDES +"\n" + _lista);
				//alert("forms_db_fx.js 388: \n" + _aListados[n].tabla +"\n" + _vista);
				if(trim(_aListados[n].tabla) == trim(_vista))
				{
				   _aListados[n].cargaInicial = true;
					_aListados[n].refresca();
					n = _aListados.length;
				}
			}
		}
	}


//=======================================================================
// FUNCIONES para el componente Listar cuando va ligado a un Formulario
//=======================================================================
//=======================================================
// Borra los registros marcados en el componente Listar
//=======================================================
function Borrar_listar()
{
	_cad= arguments[0]; // Columnas que se marcaron en el Listar para borrar
	_sID= arguments[1] ? arguments[1] : ""; // ID del objList

	completar_form_datos();

	var nom_tabla 		= new String(form_datos[form_datos.length - 1][0]);
	var nom_campo_key = new String(form_datos[form_datos.length - 1][1]);
	var nom_vista     = new String(form_datos[form_datos.length - 1][2]);
	var nom_objList   = new String(form_datos[form_datos.length - 1][3]);
	var nom_objForm   = new String(form_datos[form_datos.length - 1][4]);

	for(_n=0; _n<form_datos.length; _n++)
	{
		//alert("oList_" + form_datos[_n][0].replace(".", "__") + "\n" + _sID);
		if(trim("oList_" + form_datos[_n][0].replace(".","__") ) == trim(_sID))
		{
			nom_tabla     = new String(form_datos[_n][0]);
			nom_campo_key = new String(form_datos[_n][1]);
			nom_vista     = new String(form_datos[_n][2]);
			nom_objList   = new String(form_datos[_n][3]);
			nom_objForm   = new String(form_datos[_n][4]);
		}
	}

	if(_cad != "")
	{
		if( typeof(_cad) == "object" )
		{
			_cont = new Array();
			for(n=0; n<_cad.length; n++)  {  _cont.push(_cad[n])  }
		}
		else
		{
			_cont = _cad;
		}

		//	_cont =   StringtoArray(_cad, separador_reg);
		for(n=0; n<_cont.length; n++)
		{
			if(typeof(_cont[n]) != 'object')
				_cont[n] = StringtoArray(_cont[n],separador_col);
		}

		_key = "";
		for(n=0; n<_cont.length; n++)
		{
			if( (n+1)<_cont.length )
			{
				_key += "" + _cont[n][0] + "='" +  _cont[n][1] + "' OR ";
			}
			else
			{
				_key += "" + _cont[n][0] + "='" +  _cont[n][1] + "' ";
			}
		}

		var _pos = form_datos.length - 1;
		for(xn=0; xn<form_datos.length; xn++)
		{
		   if( trim(form_datos[xn][0]) == trim(_sID) )
		   {
		      _pos = xn;
		      xn = form_datos.length;
			}
		}
		//alert("Borrar_listar 405\n" + form_datos[_pos] + "\n" + _pos +"\n" +form_datos[_pos].length);
		_data = confirm("Está seguro desea eliminar los Registros Marcados ?");
		if(_data)
		{
//			parametros = new Array(nom_tabla, _key, nom_objList, nom_vista);
			//alert("565 \n" + parametros+ "\n" + _cad +"\n"+ _sID);
//	jsrsExecute(dirLibsPHP+"forms_db_fx.php?dirInstall="+dirInstall+"&"+sid, _ret_Borrar, "Borrar", parametros, true);

							if(typeof(sid) != "undefined")
							{
              		var sidname = sid.split('=');
		              parametros = { "sidname":sidname[1],
                                "function":"Borrar",
                                "tabla":nom_tabla,
                                "key":_key,
                                "vista":nom_vista,
                                "lista":nom_objList
                               };
		}
							else
							{
		   parametros = { "function":"Borrar",
                                "tabla":nom_tabla,
                                "key":_key,
                                "lista":nom_objList,
                                "vista":nom_vista
                               };

	}
					_axPG = parametros;
        			jsrsE = new Ajax.Request(dirLibsPHP+"forms_db_fx.php",
        			{
        				method: 'post',
						encoding: axHTMLCharSet,
        				onSuccess: _ret_Borrar,
        				parameters: parametros
}
        			);


		}
	}
}
//=======================================================
// Edita el componente marcado en el componente Listar
//=======================================================
function Edicion_listar()
{
// alert("retorno de edicion");
Anuncio("Cargando Datos..");
	abrirFormSecciones();
// 	_cad=(arguments[0]);
// 	_cont = new Array();
// 	_cont = StringtoArray(_cad,separador_reg);
	var n=0;
	var xl=0;
// 	for(n=0; n<_cont.length; n++)
// 	{
// 		_cont[n] = StringtoArray(_cont[n],separador_col);
// 	}
  _cont = arguments[0];

	for(xl=0; xl<_cont.length; xl++)
	{
		_obj   = $(trim(_cont[xl][0]));
		_objPK = $(trim(_cont[xl][0])+"_pk");
		if(_obj == null)
		{
			_obj = $$("[name='" + trim(_cont[xl][0]) + "']");
			if(_obj.length <= 0)
	{
				_obj = null;
			}
	}

    	if(_obj != null)
		{
			// radio button
			//2007-11-20 EG
			//alert(_obj.id + " - " + (_cont[xl][1]) + " - " + _cont.length + " - " + xl + " - " + _obj.type);
			if(_obj.type == "checkbox")
			{
				// Removed by xButil - 21/01/2008  09:56:20
				// Se remueve el eval porque al parecer la evaluacion de la 't' (parametro que devuelve postgres en el tipo boolean) para el checkbox genera error en JS
				//if((eval(_cont[xl][1]) == 1) || ((_cont[xl][1]) == 'true') || ((_cont[xl][1]) == 't'))
			   if(((_cont[xl][1]) == 1) || ((_cont[xl][1]) == 'true') || ((_cont[xl][1]) == 't'))
			   {
					/*_obj.checked = true;
					_obj.value = _cont[xl][1];
					try
					{
					   _obj.focus();
					   if(typeof(_obj.onclick) == "function" || typeof(_obj.onclick) == "object" )
					   {
					      _obj.onclick();
						}
					}
					catch (e) {}*/
					//Modificado F0 - 28-05-2009
					//Check Ext
					Ext.ComponentMgr.get(_obj.id).setValue(true);
				}
				else
				{
				  /*_obj.checked = false;
					//_obj.value = _cont[xl][1];
					try
					{
					   _obj.focus();
					   if(typeof(_obj.onclick) == "function" || typeof(_obj.onclick) == "object" )
					   {
					      _obj.onclick();
						}
					}
					catch (e) {}*/
					//Modificado F0 - 28-05-2009
					//Check Ext
					Ext.ComponentMgr.get(_obj.id).setValue(false);
				}
			}

			if(_obj.length)
			{
				for(m=0; m<_obj.length; m++)
				{
					if((_obj[m].value) ==  (_cont[xl][1]))
                  _obj[m].checked = true;
				}
			}
			else
			{
				// otros - Input
				_obj.value = _cont[xl][1];
				if(_objPK != null)
				{
						//alert('asigna el valor en el campo *_pk llave primaria');
						_objPK.value = _cont[xl][1];
				}
				//alert(_objPK.id + "::" + _objPK.value);
				// EG - 23/04/2008
				if(_obj.type == "textarea")
				{
					if( typeof(tinyMCE) == "object" )
					{
	   				var ed = tinyMCE.get(_obj.id);
	   				if(ed)
	   				{
	   				ed.setContent(_obj.value);
					}
				}
				}

				// verifica si el objeto es un combobox
				if(typeof(buscaComboBox) == "function" || typeof(buscaComboBox) == "object" )
				{
					var oCB =  buscaComboBox(_obj.id);
					if( oCB != null )
					{
					   oCB.buscaValor(_obj.value);
					}
				}

				// Modificado 1/4/2009
				// Para componentes de rango de fecha extend
				// xbutil & F0
				if(typeof(_obj.focus) == "function" || typeof(_obj.focus) == "object")
				{
					if(_obj.id.indexOf('fec_') >= 0 ){
						//Ajuste validacion de campos fecha Ext despues de insertar el value
						//funcion obligatoria para rangos de fecha en Extend
						Ext.ComponentMgr.get(_obj.id).validate();
					}
				else{
					try
					{
						_obj.focus();
          			}
					catch (e) {}
					if(typeof(_obj.blur) == "function" || typeof(_obj.blur) == "object" )
					{
						try
						{
							_obj.blur();
	               		}
						catch (e) {}
					}
				}
				}
				//}
			}
		}
		else
		{
			// checkbox
			_obj = oBusca(_cont[xl][0] + "[]");
			if(_obj)
			{
				if(_obj.length)
				{
               for(m=0; m<_obj.length; m++)  { _obj.item(m).checked = false; }

               opc = StringtoArray(_cont[xl][1],",");
					for(xm=0; xm<_obj.length; xm++)
               {
                  if(opc.length)
                  {
                     for(l=0; l<opc.length; l++)
                     {
                        if( opc[l] == (_obj.item(xm).value) )
                           _obj.item(xm).checked = true;
                     }
                  }
                  else
                  { _obj.item(xm).checked = false; }
               }
            }
				else
				{
					if( trim(_cont[xl][1]) == _obj.value )  { _obj.checked = true; }
				}
			}
		}
	}

	// Recorrer las colecciones de objetos 17-05-2007
  // COMBOBOX
if(typeof(_aControlBox) != "undefined")
	for(var n =0; n<_aControlBox.length; n++)
	{
	  _aControlBox[n].onBlur();
  }
if(typeof(_aUpload) != "undefined")
	for(var n=0; n<_aUpload.length; n++)
	{
	  _aUpload[n].onBlur();
	}

	if( typeof(_formActionEditar) == "function" )
	{
		_formActionEditar(_cont);
   }

   cerrarFormSecciones();
	EstadoSistema("Editando");
	Anuncio("");
}

//============================================
//   Manejo de Secciones de un Formulario
//============================================
function abrirSecciones()
{
	var i = 0;
	while(i >= 0)
	{
		i++;
		oAux = oBusca("divFormSeccion"+i);
		if(!oAux)
		{
		  i = -1;
		}
		else
		{
	  		if( (obj_readHTML(oAux)).match("formSeccionOpen") == "formSeccionOpen" )
				mostrarSeccion(oAux,"divSeccion_"+i);
		}
	}
}

function cerrarSecciones(espSec)
{
	var i = 0;

			if(!espSec)
			{
	while(i >= 0)
	{
		i++;
		oAux = oBusca("divFormSeccion"+i);
		if(!oAux)
		{
		  i = -1;
		}
		else
		{
			if( (obj_readHTML(oAux)).match("formSeccionClose") == "formSeccionClose" )
	    	mostrarSeccion(oAux,"divSeccion_"+i);
	 	}
  }
			}
			else
			{
				oAux = oBusca("divFormSeccion"+ espSec);
        		if(oAux)
				{
					if( (obj_readHTML(oAux)).match("formSeccionClose") == "formSeccionClose" )
			    	mostrarSeccion(oAux,"divSeccion_" + espSec);
				}
			}
}

function mostrarSeccion(obj,dest)
{
	_cnt = new String(obj_readHTML(obj));
	if( (obj_readHTML((obj))).match("formSeccionOpen") == "formSeccionOpen" )
	{
		obj_writeHTML(obj, _cnt.replace("formSeccionOpen","formSeccionClose") );
		obj_show(oBusca(dest));
	}
	else
	{
		obj_writeHTML(obj, _cnt.replace("formSeccionClose","formSeccionOpen") );
	  	obj_hide(oBusca(dest));
	}
}


// OBSOLETA
//============================================
//   Manejo de Secciones de un Formulario
//============================================

function abrirFormSecciones()
{
	var i = 0;
	while(i >= 0)
	{
		i++;
		oAux = oBusca("divFormSeccion"+i);
		if(!oAux)
		{
		  i = -1;
		}
		else
		{
	  	if( (obj_readHTML(oAux)).match("formSeccionOpen") == "formSeccionOpen" )
			{
//alert(oAux + "\n" + "tableFormSeccion"+i );
//	    		mostrarFormSeccion(oAux,"tableFormSeccion"+i);
	    		mostrarFormSeccion(oAux,"divSeccion_"+i);
			}
	 	}
  }
}

// OBSOLETA
function cerrarFormSecciones()
{

	var i = 0;
	while(i >= 0)
	{
		i++;
		oAux = oBusca("divFormSeccion"+i);
		if(!oAux)
		{
		  i = -1;
		}
		else
		{
			if( (obj_readHTML(oAux)).match("formSeccionClose") == "formSeccionClose" )
	    	mostrarFormSeccion(oAux,"tableFormSeccion"+i);
	 	}
  }
}

// OBSOLETA
function mostrarFormSeccion(obj,dest)
{
	_cnt = new String(obj_readHTML(obj));
	if( (obj_readHTML((obj))).match("formSeccionOpen") == "formSeccionOpen" )
	{
		obj_writeHTML(obj, _cnt.replace("formSeccionOpen","formSeccionClose") );
		if(oBusca(dest)) obj_show(oBusca(dest));
	}
	else
	{
		obj_writeHTML(obj, _cnt.replace("formSeccionClose","formSeccionOpen") );
	  	if(oBusca(dest)) obj_hide(oBusca(dest));
	}
}
