function XS_List(sId, sTitle, sClass, sWidth, sHeight)
{
	this.id = sId;
	this.type = "List";
	if (sWidth != null)
	    var sAncho = ' width:' + sWidth + ';'
	else
	    var sAncho = ' ';
	if (sHeight != null)
	    var sAlto = ' height:' + sHeight + ';'
	else
	    var sAlto = ' ';
	this.multiSelect = 'no';        
    this.onChange = '';
    this.divTabla = document.createElement('div');
    var nHeight = parseInt(sHeight)+15;
    var nSize = ( parseInt(sWidth));   
    var nSizeTable = nSize - 17 ;
     
    var sTable = '<div style="height:' + nHeight + 'px; width:' + nSize + 'px; overflow:auto;"><table cellspacing="0" cellpadding="0" class="XS_ListItem" width="' + nSizeTable + '" id="' + sId + '_list"></table></div>' 

    //Tabla Marco	    
    var sMarco = '<TABLE  class="XS_list" cellspacing="0" cellpadding="0" border="0" style= "' + sAncho + sAlto + '"><TR><TD class="XS_listTitle">' + sTitle + '</TD></TR><TR><TD valign="Top">' + sTable + '</TD></TR></TABLE>'	
	this.divTabla.innerHTML = sMarco;
    this.getContent = function() {return this.divTabla.innerHTML;}   
    this.getContainer = function() {return this.divTabla;}   
    this.getObject = function() {return this.divTabla.firstChild;}   
    this.getTable = function()
            {
                var oTable = $(this.id + "_list");
                if (oTable == null)
                {
                    oTable = this.divTabla.firstChild;
                    oTable = oTable.rows[1].cells[0].firstChild.firstChild;
                }     
                return oTable;
            }   
    
    this.getList = function()
        {
            var oTable = this.getTable();
            var aItems = new Array()
            for(var nI=0;nI<oTable.rows.length;nI++)
            {
                var sItem = oTable.rows[nI].cells[0].innerHTML;
                var sCode = oTable.rows[nI].getAttribute('code')                
                aItems[nI] = { item:sItem, code:sCode }
            }
            return aItems;
        }

    this.getSelected = function()
        {
            var oTable = this.getTable();
            var aItems = new Array()
            var nR = 0;
            for(var nI=0;nI<oTable.rows.length;nI++)
            {
                 if(oTable.rows[nI].cells[0].getAttribute('status') == '1')
                 {
                    var sItem = oTable.rows[nI].cells[0].innerHTML;
                    var sCode = oTable.rows[nI].getAttribute('code');                
                    aItems[nR] = { item:sItem, code:sCode };
                    nR++;
                 }   
            }
            return aItems;
        }
        
    this.unSelectAll = function()
        {    
            _markList(this.id ,"unmark", "all" )
        }
        
    this.addItem = function(sItem, sCode)
        {
            var oTable = this.getTable();
            var oTR = oTable.insertRow(oTable.rows.length);
            
            var oTD = oTable.rows[oTable.rows.length-1].insertCell(0)
                oTD.innerHTML = sItem;
                oTD.setAttribute('code', sCode);
                oTD.setAttribute('status', '0');
                oTD.setAttribute('onmouseover', 'javascript:_inList(this)')
                oTD.setAttribute('onmouseout', 'javascript:_outList(this)')
                if(this.onChange!='')
                   var sOnClick = 'javascript:'+this.onChange+';'
                else
                   var sOnClick = '';
                    
                if(this.multiSelect == 'no')
                    oTD.setAttribute('onclick', sOnClick + 'javascript:_clickListOne(this)');
                else
                    oTD.setAttribute('onclick', sOnClick + 'javascript:_clickListMulti(this)')
        }             

    //jFieldDef = { itemCode:'Id_Cuenta', itemValue:'Cuenta'}
    this.loadXML =  function(objDat, jFields)
                    {
                        jFields = Object.toJSON(jFields).evalJSON();
                        var objXML = objDat.XML;

                        if (objXML == null)
                        {
                            alert('XS_SelectLists ' + this.id  + ': Contenedor XML es nulo')
                            return false;
                        }    

                        //Filas de Datos
                        var aRows = objXML.getElementsByTagName('ROWS')
                        if (aRows.length == 0)
                        {
                            alert('No hay registros XML')
                            return false;
                        }    
                        var aNodos = aRows[0].childNodes;     
                        for(var nR=0;nR<aNodos.length;nR++)
                        {
                            var sItemValue = getNode(aNodos[nR], jFields.itemValue.toUpperCase())
                            var sItemCode  = getNode(aNodos[nR], jFields.itemCode.toUpperCase())
                            this.addItem(sItemValue, sItemCode)
                        }                  
                    }
}                   


function _clickListOne(obj)
{
    if(obj==null)
        obj=this;
    var sStatus = obj.getAttribute('status');
    var oTable = obj.parentNode.parentNode;
    for(var nR=0;nR<oTable.childNodes.length;nR++)
    {
        var oTD = oTable.childNodes[nR].firstChild;
        oTD.style.background = '#ffffff';
        oTD.setAttribute('status', '0')
    }
  
    if (sStatus == '0')
    {
        obj.style.background = '#dddddd';    
        obj.setAttribute('status', '1')
    }
}

function _clickListMulti(obj)
{
    if(obj==null)
        obj=this
    if (obj.getAttribute('status') == '0')
    {
        obj.style.background = '#dddddd';    
        obj.setAttribute('status', '1')
    }
    else
    {
        obj.style.background = '#ffffff';
        obj.setAttribute('status', '0')
    }
}



//***************************************************************************************************
//Selector de dos listas
//***************************************************************************************************
function XS_SelectLists(sId, sTitle1, sTitle2, sClass, sWidth, sHeight)
{
	this.id = sId;
	if (sWidth != null)
	    var sAncho = ' width:' + sWidth + ';'
	else
	    var sAncho = ' ';
	if (sHeight != null)
	    var sAlto = ' height:' + sHeight + ';'
	else
	    var sAlto = ' ';
	        
    this.onChange='';
    this.divTabla = document.createElement('div');
    var nHeight = parseInt(sHeight)+15;
    var nSize = ( parseInt(sWidth) - 60 ) * 0.5;   
    var nSizeTable = nSize - 17 ;
     
    var sBotones = '<table class="XS_listBot" cellspacing="10"><td title="Mover Todos" onClick=javascript:_markList("'+ this.id +'","mark","all")>&gt;&gt;</td></tr><tr><td title="Mover" onClick=javascript:_markList("'+ this.id +'","mark","sel")>&gt;</td></tr><tr><td title="Mover" onClick=javascript:_markList("'+ this.id +'","unmark","sel")>&lt;</td></tr><tr><td title="Mover Todos" onClick=javascript:_markList("'+ this.id +'","unmark","all")>&lt;&lt;</td></tr></table>';
    var sTable = '<table  width=100% height=100% cellspacing="0" cellpadding="0">';
        sTable = sTable + '<tr><td valign="top" ><div style="height:' + nHeight + 'px; width:' + nSize + 'px; overflow:auto;"><table cellspacing="0" cellpadding="0" class="XS_ListItem" width="' + nSizeTable + '" id="' + sId + '_1"></table></div></td>' 
        sTable = sTable + '<td align="center" style="border-left:1px #ddd solid; border-right:1px #ddd solid">' + sBotones + '</td>'
        sTable = sTable + '<td valign="top" ><div style="height:' + nHeight + 'px; width:' + nSize + 'px; overflow:auto;"><table cellspacing="0" cellpadding="0" class="XS_ListItem" width="' + nSizeTable + '" id="' + sId + '_2"></table></div></td></tr>' 
        sTable = sTable + '</table>'

    //Tabla Marco	    
    var sMarco = '<TABLE  class="XS_list" cellspacing="0" cellpadding="0" border="0" style= "' + sAncho + sAlto + '"><TR><TD class="XS_listTitle">' + sTitle1 + '</TD><TD class="XS_listTitle">' + sTitle2 + '</TD></TR><TR><TD valign="Top" colspan="2">' + sTable + '</TD></TR></TABLE>'	

	this.divTabla.innerHTML = sMarco
    this.getContent = function(){return this.divTabla.innerHTML;}   
    this.getObject = function(){return this.divTabla.firstChild;}   
    this.getContainer = function(){return this.divTabla;}   
    this.getTable = function(nList)
            {
                var oTable = $(this.id + "_" + String(nList));
                if (oTable == null)
                {
                    var nNumLis = nList-1
                    oTable = this.divTabla.firstChild;
                    oTable = oTable.rows[1].cells[0].firstChild;
                    oTable = oTable.rows[0].cells[nNumLis].firstChild.firstChild;
                }     
                return oTable;
            }   
    
    this.getList = function(nList)
        {
            var oTable = this.getTable(nList);
            var aItems = new Array()
            for(var nI=0;nI<oTable.rows.length;nI++)
            {
                var sItem = oTable.rows[nI].cells[0].innerHTML;
                var sCode = oTable.rows[nI].getAttribute('code')                
                aItems[nI] = { item:sItem, code:sCode }
            }
            return aItems;
        }
        
    this.unSelectAll = function()
        {    
            _markList(this.id ,"unmark", "all" )
        }
        
    this.addItem = function(nList, sItem, sCode)
        {
            var oTable = this.getTable(nList);
            var oTR = oTable.insertRow(oTable.rows.length);
            
            var oTD = oTable.rows[oTable.rows.length-1].insertCell(0)
                oTD.innerHTML = sItem;
                oTD.setAttribute('code', sCode);
                oTD.setAttribute('status', '0');
                //oTD.onmouseover = _inList
                //oTD.onmouseout  = _outList
                //oTD.onclick = _clickSelectList;
                if(this.onChange!='')
                   var sOnClick = 'javascript:'+this.onChange+';'
                else
                   var sOnClick = '';

                oTD.setAttribute('onmouseover', 'javascript:_inList(this)')
                oTD.setAttribute('onmouseout', 'javascript:_outList(this)')
                oTD.setAttribute('onclick', sOnClick+'javascript:_clickSelectList(this)')
        }             

    //jFieldDef = { itemCode:'Id_Cuenta', itemValue:'Cuenta'}
    this.loadXML = function(objDat, jFields, nList)
                    {
                        jFields = Object.toJSON(jFields).evalJSON();
                        var objXML = objDat.XML;

                        if (objXML == null)
                        {
                            alert('XS_SelectLists ' + this.id  + ': Contenedor XML es nulo')
                            return false;
                        }    

                        //Filas de Datos
                        var aRows = objXML.getElementsByTagName('ROWS')
                        if (aRows.length == 0)
                        {
                            alert('No hay registros XML')
                            return false;
                        }    
                        var aNodos = aRows[0].childNodes;     
                        for(var nR=0;nR<aNodos.length;nR++)
                        {
                            var sItemValue = getNode(aNodos[nR], jFields.itemValue.toUpperCase())
                            var sItemCode  = getNode(aNodos[nR], jFields.itemCode.toUpperCase())
                            this.addItem(nList, sItemValue, sItemCode)
                        }                  
                }
                
}                   


function _markList(sId, sMove, sType)
{
    if (sMove == 'mark')
    {
        var listSource = $(sId + '_1');
        if (listSource.childNodes[0].nodeName.toUpperCase() == 'TBODY')
            listSource = listSource.childNodes[0];

        var listTarget = $(sId + '_2').getElementsByTagName('TBODY')[0];
        if (listTarget == null)
            listTarget = $(sId + '_2');
    }    
    else
    {
        var listSource = $(sId + '_2');
        if (listSource.childNodes[0].nodeName.toUpperCase() == 'TBODY')
            listSource = listSource.childNodes[0];

        var listTarget = $(sId + '_1').getElementsByTagName('TBODY')[0];
        if (listTarget == null)
            listTarget = $(sId + '_1');    
    }
    if(listSource.childNodes.length ==0)
        return;
        
    for(nL=0;nL<listSource.childNodes.length;nL++)
    {
        var oNodo = listSource.childNodes[nL];  
        if (oNodo.nodeName.toUpperCase() == 'TR')
        {
            if (sType == 'all')
            {
              var oNew = oNodo.cloneNode(true); 
              var oTD = oNew.firstChild;
                oTD.style.background = '#ffffff'
                oTD.setAttribute('status','0');
                oTD.onmouseover = _inList
                oTD.onmouseout  = _outList
                oTD.onclick = _clickSelectList;               
              listTarget.appendChild(oNew);
            }
            else
            {   
                if(oNodo.firstChild.getAttribute('status') == '1')
                {
                  var oNew = oNodo.cloneNode(true);  
                  var oTD = oNew.firstChild;
                    oTD.style.background = '#ffffff'
                    oTD.setAttribute('status','0');
                    oTD.onmouseover = _inList
                    oTD.onmouseout  = _outList
                    oTD.onclick = _clickSelectList;
                  
                  listTarget.appendChild(oNew);                    
                }
            }
        }    
    } 
 
    if (sType == 'all') //Mueve todos
    {
        while (1==1)
        {
            listSource.removeChild(listSource.childNodes[0]);
            if (listSource.childNodes.length == 0)
                break;
        }
    }
    else
    {    
        var nTot = 0;
        for(nL=0;nL<listSource.childNodes.length;nL++)
        {
            var oNodo = listSource.childNodes[nL];  
            if (oNodo.nodeName.toUpperCase() == 'TR')
            {
                if(listSource.childNodes[nL].firstChild.getAttribute('status') == '1')     
                    nTot++;   
            }
        }   
        var lHay = (nTot>0);
        var nNum = 0;
        var nL = 0;

        while (lHay)
        {
                if(listSource.childNodes[nL].firstChild.getAttribute('status') == '1')
                {
                    listSource.removeChild(listSource.childNodes[nL]);
                    nNum++;
                    nL = -1;
                }
                if (nNum == nTot)
                    break;
                nL++;  
        }
     }    
}


function _clickSelectList(obj)
{
    if(obj==null)
        obj=this
    if (obj.getAttribute('status') == '0')
    {
        obj.style.background = '#ddd';    
        obj.setAttribute('status', '1')
    }
    else
    {
        obj.style.background = '#ffffff';
        obj.setAttribute('status', '0')
    }
}


function _inList(obj)
{
    if(obj==null)
        obj=this

    if (obj.getAttribute('status') == '0')
    {
        obj.style.cursor = 'pointer';
        obj.style.background = '#F0FBFF';
    }    
}

function _outList(obj)
{
    if(obj==null)
        obj=this

    if (obj.getAttribute('status') == '0')
    {
        obj.style.cursor = 'default';
        obj.style.background = '#ffffff';
    }
}


//***************************************************************************************************
// List Box
//***************************************************************************************************
function XS_ListBox(sId, sClass, sMessage, sValue, onChange)
{
	this.id = sId;
	if (sValue != null)
			this.code = sValue	
	else
			this.code = null
	this.item = null
	this.div = document.createElement('div');	

    var sHtml = '<select name="'+ sId + '" id="' + sId + '" class="' + sClass + '">'
    if (sMessage != null)
        sHtml = sHtml + '<option value="-1">' + sMessage + '</option>'
    sHtml = sHtml + '</select>'
    this.div.innerHTML = sHtml
    if (onChange!=null)
         this.div.firstChild.onchange = onChange;

	this.addItem= function(sItem, sValue)
	              {
	                var oSel  = this.div.firstChild;
	                var oItem = document.createElement('option');	                
	                oItem.setAttribute("value", sValue)
	                if (this.value == sValue)
	                {
	                    oItem.setAttribute("selected", "true")
	                    this.item = sItem;
	                }
	                oItem.text = sItem
                      try
                        {oSel.add(oItem,null)} // standards compliant
                      catch(ex)
                        {oSel.add(oItem);} // IE only
	                }


    //jFieldDef = { itemCode:'Id_Cuenta', itemValue:'Cuenta', value:'', groupCode:'Id_Padre', markCode:'Id_Nivel', markValue:'1', firstCode:'-1', firstItem:'Seleccione'}
    this.loadXML = function(objDat, jFields, oTarget)
                    {
                        jFields = Object.toJSON(jFields).evalJSON();
                        var objXML = objDat.XML;
                        if(oTarget==null)
                        {
							var oSel  = this.div.firstChild;
                        }    
                        else
                        {
                          if(typeof(oTarget) == 'string')
                                oTarget = $(oTarget);
                           oSel= oTarget;
                        }

                        if (objXML == null)
                        {
                            alert('XS_ListBox ' + this.id  + ': Contenedor XML es nulo')
                            return false;
                        }    

                        oSel.innerHTML = ''; //Limpia la lista
                        
                        if ( jFields.firstCode!=null && jFields.firstCode!='undefined') //Hay item inicial
                        {
                            var oItem = document.createElement('option');	                
                            oItem.setAttribute("value", jFields.firstCode)
                            oItem.appendChild( document.createTextNode(jFields.firstItem) )
             	            oSel.appendChild(oItem)
                        }
                        
                        //Filas de Datos
                        var aRows = objXML.getElementsByTagName('ROWS')
                        if (aRows.length == 0)
                        {
                            alert('No hay registros XML')
                            return false;
                        }    
                        var aNodos = aRows[0].childNodes;     
	                    var lGroup = false
                        if (aNodos.length>0)
                            if ( jFields.groupCode==null || jFields.groupCode=='undefined') //No Hay grupos
                            {
                                    for(var nR=0;nR<aNodos.length;nR++)
                                    {
                                        var sItemValue = getNode(aNodos[nR], jFields.itemValue.toUpperCase())
                                        var sItemCode  = getNode(aNodos[nR], jFields.itemCode.toUpperCase())
                                        var oItem = document.createElement('option');	                
                                        oItem.setAttribute("value", sItemCode)
                                        if (sItemCode == jFields.selected)
                                        {
                                            oItem.setAttribute("selected", "true")
                                            this.item = sItemValue;
                                            this.code = sItemCode;
                                        }
                                        oItem.appendChild( document.createTextNode(sItemValue) )
                         	            oSel.appendChild(oItem)
                                    }                  
                            }        
                            else
                            {
                                    for(var nG=0;nG<aNodos.length;nG++)
                                    {
                                        var sGroupMark = getNode(aNodos[nG], jFields.markCode.toUpperCase())
                                        if (sGroupMark == jFields.markValue) //El nodo corresponde a la cabecera de un grupo
                                        {
                                            var sGroupCode  = getNode(aNodos[nG], jFields.itemCode.toUpperCase())
                                            var sGroupName  = getNode(aNodos[nG], jFields.itemValue.toUpperCase())
                                            var oGroup = document.createElement('optgroup');	     
                                            oGroup.setAttribute("label", sGroupName)
                                            oGroup.setAttribute("value", "0")
                             	            oGroup.appendChild( document.createTextNode(sGroupName) )
                             	            oSel.appendChild(oGroup)
                             	            
                             	            //Agrega los items del grupo
                                            for(var nI=0;nI<aNodos.length;nI++)
                                            {
                                                var sParentCode  = getNode(aNodos[nI], jFields.groupCode.toUpperCase())
                                                if (sParentCode == sGroupCode) //Verifica que el Item pertenezca al grupo
                                                {
                                                    var sItemValue = getNode(aNodos[nI], jFields.itemValue.toUpperCase())
                                                    var sItemCode  = getNode(aNodos[nI], jFields.itemCode.toUpperCase())
                                                    var oItem = document.createElement('option');	                
                                                    oItem.setAttribute("value", sItemCode)
                                                    if (sItemCode == jFields.selected)
                                                    {
                                                        oItem.setAttribute("selected", "true")
                                                        this.item = sItemValue;
                                                        this.code = sItemCode;
                                                    }
                                                    oItem.appendChild( document.createTextNode(sItemValue) )
                             	                    oSel.appendChild(oItem)
                                                }
                                            }    
                                        }
                                    }    
                            }
                        
                        return true;
                    }
                    
    this.getObject = function(sId, sSelected)
                    {
                        this.getContent(sId, sSelected)
                        var obj = this.div.firstChild                        
                        return obj.cloneNode(true)
                    }
                    
    this.getContent = function(sId, sSelected)
                    {
                        oSel = this.div.firstChild
                        oSel.setAttribute('id', sId);
                        if (sSelected != null)
                        {    
	                        var aOptions  = oSel.childNodes;
	                        for(var r=0;r<aOptions.length;r++)
                            {
                                oItem = aOptions[r];
			                    if (oItem.getAttribute('value') == sSelected)
			                    {
                                     oItem.setAttribute("selected","true")
		 		                    this.item = oItem.text;
		 		                    this.value = sSelected;
                                }
                                else
                                     oItem.removeAttribute("selected")
                            }
                        }
                        return this.div.innerHTML;
                    }      
                     
                    
    this.getItem = function(sCode)
        {
            var sRet = '';
	        aOptions = this.div.firstChild.childNodes;
	        for(var r=0;r<aOptions.length;r++)
	        {
		        if (aOptions[r].nodeName.toUpperCase() == 'OPTION')
		        {
			        if (aOptions[r].getAttribute('value') == sCode)
			        {
		 		        sRet = aOptions[r].innerHTML;
		 		        this.item = sRet;
		 		        this.value = sCode;
				        break;
			        }	
	            }
	        }
	        return sRet;			
        }

    this.getList = function(sMessage)
        {
            if (sMessage == null)
                var sRet = ''
            else
                var sRet = '-1=' + sMessage; 
            
	        aOptions = this.div.firstChild.childNodes;
	        for(var r=0;r<aOptions.length;r++)
	        {
//	        optgroup
	            var sNode = aOptions[r].nodeName.toLowerCase();
		        if (sNode == 'option')
		        {
		           if (sRet!='') 
		 		      sRet = sRet + ',';
		 		   sRet = sRet + aOptions[r].getAttribute('value')  + '=' + aOptions[r].innerHTML;
	            }
	        }
	        return sRet;			
        }

    this.getItemList = function(sMessage)
        {
            if (sMessage == null)
                var sRet = ""
            else
                var sRet = "{type:'msg', code:-1, item:'" + sMessage +" }"; 
            
	        aOptions = this.div.firstChild.childNodes;
	        for(var r=0;r<aOptions.length;r++)
	        {
	            var sNode = aOptions[r].nodeName.toLowerCase();
		        if (sNode == 'optgroup')
		        {
		           if (sRet!='') 
		 		      sRet = sRet + ',';
		            sRet = sRet + "{type:'grp', code:'" + aOptions[r].getAttribute('value') + "', name:'" + aOptions[r].innerHTML + "'}";
                }
		        if (sNode == 'option')
		        {
		           if (sRet!='') 
		 		      sRet = sRet + ',';
		            sRet = sRet + "{type:'itm', code:'" + aOptions[r].getAttribute('value') + "', name:'" + aOptions[r].innerHTML + "'}";
	            }
	        }
		    sRet = '{list:[' + sRet + ']}';
            sRet = Object.toJSON(sRet).evalJSON();
	        return sRet;			
        }
                                 
}


//************ OBJETO PARA MANEJO DE FORMULARIO DE DATOS *************************
function XS_Form( sId, sClass, jDimentions, sTitle)
{
    this.type = 'Form';
	this.id = sId;
	this.Container = null;
	this.display = 'block';
	this.layout = 'vertical';
	this.LabelWidth = null;
	this.labelStyle = null;	
	this.Instructions = null;
	this.Help = null;
	this.Validation = true;
	this.Changed = false;
    this.TextClass = '';
	this.objDat = null;
	this.Message = '';
	this.alertType = 'box';
    this.dataObject = null;
    this.tabIndex = 100;
    this.numErrors = 0;
    this.lastField = null;
    this.numTable = null;
    this.numRow = null;

	this.divForm = document.createElement('DIV')
	this.divForm.style.float = 'none';
	this.divForm.style.width = '99%';
    this.divForm.id = this.id + '_form'; 
    
	if (sTitle != null && sTitle != '')
        this.Title = sTitle
    else
        this.Title = '&#160;';

    var sAncho = ' ';
    var sAlto  = ' ';
    var sCols = '';
	if (jDimentions != null )
	{
        if ( typeof(jDimentions) == 'object' )
        {
            if(jDimentions.width + '' != 'undefined')
            {
	            sAncho = ' width:'  + jDimentions.width + ';'
                this.divForm.style.width = jDimentions.width;
            }   
            if(jDimentions.cols + '' != 'undefined')
            {
                if(jDimentions.cols == '2')
                    sCols = 'width="50%"';
            }   
	    }    
	    else
	    {    
	        sAncho = ' width:' + jDimentions + ';'
            this.divForm.style.width = jDimentions;
	    }    
	}        
        
    var sForm = ''	
    if(sClass==null)
        sClass = 'XS_Form';
	sForm = '<table border="0" id="' + this.id + '_table" class=' + sClass + ' width="100%" cellspacing=0 style="border-bottom:0px #cccccc solid"></table>';

    //Tabla Marco	    
    var sTabla = '<TABLE class="XS_FormFrame" cellspacing="0" style="' + sAncho + sAlto + '">';
        sTabla += '<TR><TD class="XS_formTitle" colspan="2">' + this.Title + '</TD></TR>';
        sTabla += '<TR><TD style="padding-left:10px;padding-right:10px;" ' + sCols + ' valign="top">' + sForm + '</TD><TD valign="top" style="padding-left:10px;padding-right:10px;">' + sForm + '</TD></TR>';
        sTabla += '<TR><TD colspan="2" class="XS_FormTip" id="' + this.id + '_tips" >&#160;</TD></TR></TABLE>'	

	this.divForm.innerHTML = sTabla; //+ '<span style="float:none; ">...</span>';
    this.onBlur = null
	this.getContainer = function()
	    {
	        if($(this.id + '_form') == null)
	            return this.divForm
	        else
	            return $(this.id + '_form');
	    }
	    
    this.getObject = function()
                     {
                        return this.getContainer().firstChild;
                     }   
                     
	this.getContent= function()
	                 {
	                    return '<div onBlur="alert(\'salió\')" id="' + this.id + '_form" style="padding:5px; padding-bottom:5px;">' + this.getContainer().innerHTML + '</div>';
	                 }

	this.getTable = function(nCol)
	                {
	                    var obj = this.getContainer();
	                    if(nCol==null)nCol=1;
	                       nCol--; 
	                    return obj.firstChild.rows[1].cells[nCol].firstChild;
	                 }
	
    this.toggle = function()
                    {
                        if(this.display == 'none')
                            this.show()
                        else
                            this.hide();
                    }
                     	                 
	this.hide =function()
	                {
	                    $( this.getContainer()).hide()                
	                    this.display = 'none';
	                }                 
	this.show =function()
	                {
	                    $( this.getContainer()).show()                
	                    this.display = 'block';
	                }                 
	                
    	                 
	this.setFrame = function(sFrame)
	                  {
	                    var obj = this.divForm.firstChild;
	                    obj.style.border = sFrame;
	                  }  

	this.init = function(oContainer)
	            {
	                if (oContainer != null)
	                {
	                    this.Container = oContainer;
				        if (oContainer.childNodes.length > 0)	
                           for(var i=0;i<oContainer.childNodes.length;i++)				
						        oContainer.removeChild(oContainer.childNodes[i]);
                        oContainer.appendChild(this.divForm) 
                    }
	                lRet = _F_initFormValidation(this.Validation);
	                return lRet
	            } 

    this.addButtons= function(oButtons, jOptions)
        {
            Insertion.Bottom(this.divForm, '<div class="XS_SecButtom" id="' + this.id + '_but">' + oButtons.getContent() + '</div>' );                   
           
            if (jOptions != null)
            {
               oOptions = Object.toJSON(jOptions).evalJSON();
               if(oOptions.display == 'none')
                  oButtons.hide();               
            }   
            else
               oOptions = null;

        }

    this.focus = function(sField)
                    {
	                    var Table = this.getTable();
	                    if (this.layout == 'vertical')
	                    {
	                        var aListaCampos = Table.rows
	                        for(var nC=0;nC<aListaCampos.length;nC++)
	                        if(aListaCampos[nC].cells.length>1)
	                        {
	                           var obj = aListaCampos[nC].cells[1].firstChild;
	                           if (obj.nodeName.toUpperCase() == 'TABLE')
	                           {
	                             obj = obj.rows[0].cells[0].firstChild;
	                           }
	                           if(sField==null)
	                           {
	                               if (obj.getAttribute('required') != 'P')
	                               {
	                                   obj.focus() 
	                                   break;
	                               }
	                           }    
	                           else
	                           {
	                               if (obj.getAttribute('id').toUpperCase() == sField.toUpperCase() && obj.getAttribute('required') != 'P')
	                               {
	                                   obj.focus() 
	                                   break;
	                               }
	                           }
                            }
	                    }    
	                    else
	                    {
	                        var aListaCampos = Table.rows[1].cells;
	                        for(var nC=0;nC<aListaCampos.length;nC++)
	                        {
	                           var obj = aListaCampos[nC].firstChild;
	                           if (obj.nodeName.toUpperCase() == 'TABLE')
	                           {
	                             obj = obj.rows[0].cells[0].firstChild;
	                           }
	                           if(sField==null)
	                           {
	                               if (obj.getAttribute('required') != 'P')
	                               {
	                                   obj.focus() 
	                                   break;
	                               }    
	                           }    
	                           else
	                           {
	                               sField = String( sField.toUpperCase() ) + ''
	                               var sId = String( obj.getAttribute('id').toUpperCase() ) + ''
	                               if (  sId == sField )
	                               {
	                                   obj.focus() 
	                                   break;
	                               }
	                           }
                            }	                        
	                    }    
                    }

                        
	this.validate = function(sField)
	                {
	                    this.Message = "";
	                    var nErrores = 0;
	                    var sMsg = "";
	                    var sLabel = "";	
	                    var sType = "";                    
	                    var lEste = true;
	                    var objFocus = null;
	                    
                        for(var nK=1;nK<3;nK++)
                        {
                            var Table = this.getTable(nK);
                            if(Table!=null)
                            {
                                if (this.layout == 'vertical')
                                    var aListaCampos = Table.rows
                                else
                                    var aListaCampos = Table.rows[1].cells;
        	                    
                                for(var nC=0;nC<aListaCampos.length;nC++)
                                {
                                    if (this.layout == 'vertical')
                                    {
                                        var oTD = aListaCampos[nC].cells[1];
                                        sLabel = aListaCampos[nC].cells[0].innerHTML;
                                        sType = aListaCampos[nC].cells[0].getAttribute('type');
                                    }
                                    else
                                    {
                                        var oTD = aListaCampos[nC];
                                        sLabel = Table.rows[0].cells[nC].innerHTML;
                                        sType  = Table.rows[0].cells[nC].getAttribute('type');
                                    }
        	                        
                                    if (sField != null) //Busca un campo especifico
                                    {
                                        if ( oTD.getAttribute('fld') == sField.toUpperCase() )
                                            lEste = true;                                    
                                    }                    
                                    else
                                        lEste = true;        	         
                                    	                        
                                    if (lEste)
                                    {
                                        sMsg = "";
                                        if (sType != null)
                                        {    
                                            switch ( sType )
                                            {
                                               case 'text':
                                                    var obj = oTD.firstChild;
                                                    sMsg = XS_textEdit_val(obj, this.alertType);
                                                    break;
                                                    
                                               case 'number':
                                                    var obj = oTD.firstChild;
                                                    sMsg = XS_numberEdit_val(obj, this.alertType);
                                                    break;

                                               case 'percent':
                                                    var obj = oTD.firstChild;
                                                    sMsg = XS_numberEdit_val(obj, this.alertType);
                                                    break;
                                                                                            
                                               case 'rut':
                                                    var obj = oTD.firstChild;
                                                    var sMsg = XS_rutEdit_val(obj, this.alertType);
                                                    break;

                                               case 'date':
                                                    var oTable = oTD.firstChild;
                                                    var obj = oTable.rows[0].cells[0].firstChild;
                                                    var sMsg = XS_dateEdit_val(obj, this.alertType);
                                                    break;                                
                                                    
                                               case 'email':
                                                    var obj = oTD.firstChild;
                                                    var sMsg = XS_emailEdit_val(obj, this.alertType);
                                                    break
            	   	                           
                                               case 'textarea':
                                                    var obj = oTD.firstChild;
                                                    var sMsg = XS_textAreaEdit_val(obj, this.alertType);
                                                    break;

                                               case 'list':
                                                    var obj = oTD.firstChild;
                                                    var sMsg = XS_listEdit_val(obj, this.alertType);
                                                    break;                                

                                               case 'pop':
                                                    var oTable = oTD.firstChild;
                                                    var obj = oTable.rows[0].cells[0].firstChild;
                                                    var sMsg = XS_popEdit_val(obj, this.alertType);
                                                    break;                                

											   case 'upload':
                                                    var oTable = oTD.firstChild;
                                                    var obj = oTable.rows[0].cells[0].firstChild;
                                                    var sMsg = XS_uploadEdit_val(obj, this.alertType);
                                                    break;                                		

                                               case 'check':
                                                    alert('valid check')
                                                    break;                                

                                               case 'option':
                                                    alert('valid option')
                                                    break;                                
                                            }                


                                            if (this.layout == 'vertical')
                                            {
                                                if( sMsg == "")	                            
                                                    aListaCampos[nC].cells[3].innerHTML = '<img src=/XS_Include/Img/Form/icon_f_none.gif border=0/>'                    
                                                else
                                                {
                                                    aListaCampos[nC].cells[3].innerHTML = '<a href="#" tabindex=-1 title="' + sMsg + '"><img src=/XS_Include/Img/Form/icon_f_error.gif border=0/></a>';	                                
                                                    nErrores++
                                                    if (objFocus == null)
                                                        objFocus = obj;    
                                                    if(nErrores==1)
                                                        this.Message = sMsg
                                                    else
                                                        this.Message = nErrores + ' Errores detectados, verifique *';
                                        
                                                }	                    
                                            }
                                            else
                                            {
                                                if( sMsg != "")	                            
                                                {
                                                    nErrores++
                                                    if (objFocus == null)
                                                        objFocus = obj;    
                                                    if(nErrores==1)
                                                        this.Message = sMsg
                                                    else
                                                        this.Message = nErrores + ' Errores detectados';
                                                }        
                                            }                                                
                                        }                                
                                    }
                                }  // for
                            }    
	                    }            
                        if (objFocus != null)
                            objFocus.focus();    
	                    this.numErrors = nErrores;
	                    return (nErrores==0);	
	                }
	                			   


    this.compareDates = function(oFec_1, sFec_2)
                    {
                        
                        if (sFec_2 == null || sFec_2 == 'undefined')
                        {
    	                    var Fecha=new Date()	
	                        var Mes = parseInt(Fecha.getMonth()) + 1
	                            if (Mes < 10 )
	                                Mes = '0' + Mes;
	                        var Dia = Fecha.getDate()        
	                            if (Dia.length == 1)
	                                Dia = '0' + Dia;
	                            
	                        var sFecha = Dia + "/" + Mes + "/" + Fecha.getFullYear()  
	                        var oFec_2 = document.createElement('input')
	                            oFec_2.value = sFecha;
                        }
                        else
                        {
                        	var oFec_2 = $(sFec_2);
                        	if (oFec_2 == null)
                        	{
	                            var oFec_2 = document.createElement('input')
	                                oFec_2.value = sFecha;
                        	}    
                        }	
                        
                        if (oFec_1.value == oFec_2.value)
                            nRet = 0                                                	                    
                        else    
	                    if (!Comparar_Fecha( oFec_1, oFec_2, 'dma'))
	                        nRet = 1
	                    else
	                        nRet = -1    
	                    return nRet
                    }



    this.getControl_ = function(sCampo)
                    {
                        if(sCampo==null)
                        {
                            return null;
                        }
                        //sCampo = sCampo.toUpperCase();
                        
                        var obj = null; 
                        var aObj = $$('#' + this.id + '_table' + ' #' + sCampo);
                        if(aObj != null)
                        {
                            if(aObj.length > 0)
                            {
                                obj = aObj[0];
                                if (obj.getAttribute('format').toUpperCase() == 'CHECK')
                                {
                                    obj = aObj
                                }
                            }
                        }
                        return obj;
                    }
                    
    this.getControl = function(sCampo)
                    {
                        if(sCampo==null)
                        {
                            return null;
                        }
                        var obj = null;
                        var sFormat = '';
                        var aListaCampos = this.getTable(1).rows;
                        for(var nC=0;nC<aListaCampos.length;nC++)
                        {
                           if( aListaCampos[nC].cells.length>1)
                           {
                               sFormat = '';         
                               obj = aListaCampos[nC].cells[1].firstChild;
                               if (obj.nodeName.toUpperCase() == 'TABLE')
                               {
                                  sFormat = obj.getAttribute('format');
                                  if(sFormat != null)
                                     sFormat=sFormat.toUpperCase();                                   
                               }   
                               
                               if(sFormat == 'CHECK' || sFormat == 'DATE' || sFormat == 'POP'  || sFormat == 'UPLOAD')
                               {
                                        var aInput = obj.getElementsByTagName('INPUT');
                                        for(var no=0;no<aInput.length;no++ )
                                        {
                                            var oCampo = aInput[no];
                                            if (oCampo.getAttribute('id').toUpperCase() == sCampo.toUpperCase() )
                                            {
                                                this.numTable = 1;
                                                this.numRow = nC;
                                                return oCampo;
                                            }                                   
                                        }
                               }
                               else   
                               if (obj.getAttribute('id').toUpperCase() == sCampo.toUpperCase() )
                               {
                                   if(sFormat == 'OPTION')
                                   {
                                        var aInput = obj.getElementsByTagName('INPUT');
                                        for(var no=0;no<aInput.length;no++ )
                                        {
                                            var oCampo = aInput[no];
                                            if (oCampo.type == 'radio' && oCampo.checked )
                                            {
                                                this.numTable = 1;
                                                this.numRow = nC;
                                                return oCampo;
                                            }                                   
                                        }
                                        return null;
                                   }
                                   else 
                                   {
                                        this.numTable = 1;
                                        this.numRow = nC;
                                        return obj;
                                   }     
                               }    
                           }    
                        }

                        var aListaCampos = this.getTable(2).rows;
                        for(var nC=0;nC<aListaCampos.length;nC++)
                        {
                           if( aListaCampos[nC].cells.length>1)
                           {        
                               obj = aListaCampos[nC].cells[1].firstChild;
                               if (obj.nodeName.toUpperCase() == 'TABLE')
                               {
                                  obj = obj.rows[0].cells[0].firstChild;
                               }
                               if (obj.getAttribute('id').toUpperCase() == sCampo.toUpperCase() )
                               {
                                    this.numTable = 2;
                                    this.numRow = nC;
                                   return obj;
                               }
                           }    
                        }

                        return null;
                    }



    this.getCode = function(sCampo)
                    {
                        var oCampo = this.getControl(sCampo);
                        if (oCampo == null)
                        {
                            alert('getCode: No se identificó el campo ' + sCampo)
                            return null
                        }
                        var sTipoNodo = oCampo.nodeName.toLowerCase();
                        if (sTipoNodo == 'input')
                        {
                            var sRet = oCampo.getAttribute("code")
                        }
                        if (sTipoNodo == 'select')
                        {
                           var sRet = oCampo.value;
                        }                            
                        return sRet;
                    }    

                    
    this.getValue = function(sCampo)
                    {
                        oCampo = this.getControl(sCampo);
                        if (oCampo == null)
                        {
                            alert('getValue: No se identificó el campo: ' + sCampo)
                            return null
                        }
                        var sRet = null;

                        var sTipoNodo = oCampo.nodeName.toLowerCase();
                        if (sTipoNodo == 'input')
                        {
                            var sTipo = oCampo.getAttribute('format')
                            if (sTipo=='pop' || sTipo=='upload')
                                sRet = oCampo.value
                            else
                            if (sTipo=='check')
                            {
                                if(oCampo.checked == true)
                                   sRet = oCampo.value ;                            
                            }
                            else
                                sRet = oCampo.value ;                            
                        }
                        else    
                        if (sTipoNodo == 'select')
                        {
                           sRet = XS_listEdit_value(oCampo)
                        }                            
                        else
                        if (sTipoNodo == 'textarea')
                        {
                           sRet = oCampo.value; 
                        }
                        else
                        if (sTipoNodo == 'table')
                        {
                           if (oCampo.getAttribute('format') == 'option')
                           {
                              aCells = oCampo.rows[0].cells;
                              for(var nC=0;nC<aCells.length/2;nC++)
                              {
                                var oInput = aCells[0].firstChild;
                                if(oInput!=null)
                                {
                                    alert(oInput.getAttribute('checked'))
                                    if(oInput.getAttribute('checked') == true)
                                    {
                                        alert(oInput.getAttribute('value'))                              
                                        break;
                                    }
                                }
                              }
                           }
                        }
                        return sRet;
                    }


    this.setLabel = function(sField, sLabel)
                    {
                        var obj = this.getControl(sField);
                        if (obj == null )
                        {
                            alert('XS_Form.setLabel: No se identificó campo: ' + sField)
                            return;
                        }
                       var oTR = this.getTable(this.numTable).rows[this.numRow].cells[0].innerHTML = sLabel;         
                       return oTR;
                    }

    this.hideField = function(sField)
                     {
                        var obj = this.getControl(sField);
                        if (obj == null )
                        {
                            alert('XS_Form.hideField: No se identificó campo: ' + sField)
                            return;
                        }
                       var oTR = this.getTable(this.numTable).rows[this.numRow];         
                       $(oTR).hide();
                       return oTR;
                    }    

    this.showField = function(sField)
                     {
                        var obj = this.getControl(sField);
                        if (obj == null )
                        {
                            alert('XS_Form.hideField: No se identificó campo: ' + sField)
                            return;
                        }
                       var oTR = this.getTable(this.numTable).rows[this.numRow];         
                       $(oTR).show();
                       return oTR;
                    }    
                    

    this.setField = function(sField, sValue, sCode)
                     {
                        var obj = this.getControl(sField);
                        if (obj == null )
                        {
                            alert('XS_Form.setField: No se identificó campo: ' + sField)
                            return;
                        }
                        if (obj.tagName == 'TR') //Option
                        {
                            var aNodos = obj.getElementsByTagName('INPUT');
                            if (aNodos.length>0)
                                for(var nR=0;nR<aNodos.length;nR++)
                                {
                                    oItem = aNodos[nR];
                                    if (oItem.getAttribute("value") == sValue)
                                        oItem.setAttribute("checked", "true");
                                }                  
                        }    
                        else if(obj.tagName == 'SELECT') //Lista
                        {
                            var aNodos = obj.getElementsByTagName('OPTION'); 
                            if (aNodos.length>0)
                                for(var nR=0;nR<aNodos.length;nR++)
                                {
                                    oItem = aNodos[nR];
                                    if (oItem.getAttribute("value") == sCode)
                                        obj.selectedIndex =nR;
                                }                  
                        }            
//                        else if (obj.tagName == 'TEXTAREA')
//                        {
//                            obj.innerHTML = sValue;
//                            alert(obj.innerHTML)
//                        }
						else if ( (obj.getAttribute('format') == 'pop') || (obj.getAttribute('format') == 'upload') )
                        {
                            obj.value = sValue;
                            obj.setAttribute('code',sCode);
                        }
                        else
                        {
                            obj.value = sValue;
                            if(sCode != null)
                                obj.setAttribute('code',sCode);
                        }    
                    }

    this.getField = function(sField)
                    {
                        var sPrm = '';                        
                        var obj = this.getControl(sField);
                        if (obj == null )
                        {
                            alert('getCode: No se identificó el campo ' + sField)
                            return null
                        }
                        if (obj.tagName == 'TR') //Option
                        {
                            obj = obj.firstChild;
                            if (obj.getAttribute('format') == 'option')
                            {
                                if (obj.checked)
                                {
                                    sPrm = '{field:"'+obj.getAttribute('id') + '", type:"option", value:"' + obj.value + '"}'
                                }
                            }
                        }    
                        else if(obj.tagName == 'SELECT') //Lista
                        {
                            var aNodos = obj.getElementsByTagName('OPTION'); 
                            if (aNodos.length>0)
                            {
                                sPrm = '{field:"'+obj.getAttribute('id') + '", type:"list", value:"' + aNodos[obj.selectedIndex].innerHTML + '", code:"' + obj.value + '"} '
                            }
                        }            
                        else if (obj.getAttribute('format') == 'pop')
                            sPrm = '{field:"'+obj.getAttribute('id') + '", type:"pop", value:"' + obj.value + '", code:"' + obj.getAttribute('code') + '"} '

						else if (obj.getAttribute('format') == 'upload')
                            sPrm = '{field:"'+obj.getAttribute('id') + '", type:"upload", value:"' + obj.value + '", code:"' + obj.getAttribute('code') + '"} '	

                        else
                            sPrm = '{field:"'+obj.getAttribute('id') + '", type:"'+ obj.getAttribute('type') +'", value:"' + obj.value + '"} '
                        
                        if(sPrm != '')    
                            return sPrm.evalJSON() //Object.toJSON(sPrm )
                        else
                            return null;
                    }
                                            
    this.getFields = function()
                     {
                        var sPrm = '';                        
                    	var aInput = this.getContainer().getElementsByTagName('INPUT');
                        for(var no=0;no<aInput.length;no++)
                        {
                            var obj = aInput[no];
                            if (obj.getAttribute('prm') == "XS_Field")
                            {   
                                if (obj.getAttribute('format') == 'check')
                                {
                                    if (sPrm != '')
                                        sPrm = sPrm + ',';                                    

                                    if (obj.checked)
                                        sPrm = sPrm + '{field:\''+obj.getAttribute('id') + '\', type:\'check\', value:\'' + obj.value + '\'}'
                                    else
                                        sPrm = sPrm + '{field:\''+obj.getAttribute('id') + '\', type:\'check\', value:\'' + obj.value + '\'}'
                                }
                                else                                
                                if (obj.getAttribute('format') == 'pop')
                                {
                                        if (sPrm != '')
                                            sPrm = sPrm + ',';                                    
                                        sPrm = sPrm + '{field:\''+obj.getAttribute('id') + '\', type:\'pop\', value:\'' + obj.value + '\', code:\'' + obj.getAttribute('code')+ '\', fieldCode:\'' + obj.getAttribute('fieldCode')+ '\'}'
                                }                        
								else 
                                if (obj.getAttribute('format') == 'upload')
                                {
                                        if (sPrm != '')
                                            sPrm = sPrm + ',';                                    
                                        sPrm = sPrm + '{field:\''+obj.getAttribute('id') + '\', type:\'upload\', value:\'' + obj.value + '\', code:\'' + obj.getAttribute('code')+ '\', fieldCode:\'' + obj.getAttribute('fieldCode')+ '\'}'
                                }                                
                                else                                
                                if (obj.getAttribute('format') == 'option')
                                {
                                    if (obj.checked)
                                    {
                                        if (sPrm != '')
                                            sPrm = sPrm + ',';
                                        sPrm = sPrm + '{field:\''+obj.getAttribute('id') + '\', type:\'option\', value:\'' + obj.value + '\'}'
                                    }
                                }
                                else
                                {
                                    if (sPrm != '')
                                        sPrm = sPrm + ',';                                
                                        sPrm = sPrm + '{field:\''+obj.getAttribute('id') + '\', type:\'' + obj.getAttribute('format') + '\', value:\'' + obj.value + '\'}'
                                }
                            }
                        }	

                    	var aInput = this.getContainer().getElementsByTagName('SELECT');
                        for(var no=0;no<aInput.length;no++)
                        {
                            var obj = aInput[no];
                            if (obj.getAttribute('prm') == "XS_Field")
                            {   
                                if (sPrm != '')
                                    sPrm = sPrm + ',';
                                sPrm = sPrm + '{field:\''+obj.getAttribute('id') + '\', type:\'list\', value:\'' + obj.value + '\'}'
                            }
                        }	
                    	var aInput = this.getContainer().getElementsByTagName('TEXTAREA');
                        for(var no=0;no<aInput.length;no++)
                        {
                            var obj = aInput[no];
                            if (obj.getAttribute('prm') == "XS_Field")
                            {
                                if (sPrm != '')
                                    sPrm = sPrm + ',';
                                sPrm = sPrm + '{field:\''+obj.getAttribute('id') + '\', type:\'textarea\', value:\'' + obj.value + '\'}'
                            }
                        }	
                        return eval( '[' + sPrm + ']' );
                     }        


    this.clearFields = function()
                     {
	                    var aListaCampos = this.getTable(1).rows;
	                    for(var nC=0;nC<aListaCampos.length;nC++)
	                    {
	                       if(aListaCampos[nC].cells.length > 3) 
                              aListaCampos[nC].cells[3].innerHTML = '<img src=/XS_Include/Img/Form/icon_f_none.gif border=0/>'                    
                        }
	                    var aListaCampos = this.getTable(2).rows;
	                    for(var nC=0;nC<aListaCampos.length;nC++)
	                    {
	                       if(aListaCampos[nC].cells.length > 3) 
                              aListaCampos[nC].cells[3].innerHTML = '<img src=/XS_Include/Img/Form/icon_f_none.gif border=0/>'                    
                        }
                        
                        var sPrm = '';                        
                    	var aInput = this.getContainer().getElementsByTagName('INPUT');
                        for(var no=0;no<aInput.length;no++)
                        {
                            var obj = aInput[no];
                            if (obj.getAttribute('prm') == "XS_Field")
                            {   
                                if (obj.getAttribute('format') == 'check')
                                {
                                }
                                else                                
                                if (obj.getAttribute('format') == 'option')
                                {
                                    if (obj.checked)
                                    {

                                    }
                                }
                                else
                                {
                                    obj.value = '';
                                }
                            }
                            obj.style.border="1px #cccccc solid"                              
                        }	
                    	var aInput = this.getContainer().getElementsByTagName('SELECT');
                        for(var no=0;no<aInput.length;no++)
                        {
                            var obj = aInput[no];
                            if (obj.getAttribute('prm') == "XS_Field")
                            {
                                obj.childNodes[0].selected = true;
                                obj.style.border="1px #cccccc solid"                              
                            }    
                        }	
                    	var aInput = this.getContainer().getElementsByTagName('TEXTAREA');
                        for(var no=0;no<aInput.length;no++)
                        {
                            var obj = aInput[no];
                            if (obj.getAttribute('prm') == "XS_Field")
                            {
                                obj.value = '';
                                obj.style.border="1px #cccccc solid"                              
                            }
                        }	
                        obj = $(obj)                     
                     }        


    this.loadGrid = function(grid, sIdRow)
                    {
                        this.clearFields();
                        var aFields = this.getFields();
                        for(var nF = 0; nF<aFields.length; nF++)
                        {
                            var sCode = null;
                            
                            if(aFields[nF].type=='list')
                            {
                                sCode = grid.getValue( sIdRow, aFields[nF].field);
                                if(sCode==null)
                                    sCode = grid.getKey( sIdRow, aFields[nF].field);
                            }
                            else
                            if( (aFields[nF].type=='pop') || (aFields[nF].type=='upload') )
                            {
                                sCode = grid.getValue( sIdRow, aFields[nF].fieldCode );
                                if(sCode==null)
                                    sCode = grid.getKey( sIdRow, aFields[nF].fieldCode);
                            }
                           
                           var sValue = grid.getValue( sIdRow, aFields[nF].field)
                           if(aFields[nF].type == 'textarea')
                           {
                              sValue = sValue.sub('<BR>', String.fromCharCode(13) + String.fromCharCode(10) ); 
                              this.setField( aFields[nF].field, sValue, sCode );
                           }
                           else
                              this.setField( aFields[nF].field, sValue, sCode );
                        }
                    }
                                            
    this.loadXML = function(objDAT)
                    {
                        if(objDAT==null)
                        {
                            alert('El contenedor de datos es nulo')
                            return false;
                        }
                            
                        this.objDat = objDAT;
                    	var aInput = this.getContainer().getElementsByTagName('INPUT');
                        for(var no=0;no<aInput.length;no++)
                        {
                            var obj = aInput[no];
                            if (obj.getAttribute('prm') == "XS_Field")
                            {                                   
                                var sFormat = obj.getAttribute('format');
                                if ( sFormat == 'check')
                                {
                                    if (obj.checked)
                                    {

                                    }    
                                }
                                else                                
                                if ( sFormat == 'option')
                                {
                                    sSelected = objDAT.ResultNode(obj.id);
                                    var aNodos = $(obj.id).getElementsByTagName('INPUT');
                                    if (aNodos.length>0)
                                        for(var nR=0;nR<aNodos.length;nR++)
                                        {
                                            oItem = aNodos[nR];
	                                        if (oItem.getAttribute("value") == sSelected)
	                                        {
	                                            oItem.setAttribute("checked", "true");
	                                        }    
                                        }                  
                                }
                                else
                                if ( sFormat == 'pop' || sFormat == 'upload')
                                {
                                    obj.value = objDAT.ResultNode(obj.id)
                                    obj.setAttribute('code', objDAT.ResultNode(obj.getAttribute('fieldCode') ) );
                                }
                                else
                                {
                                    obj.value = objDAT.ResultNode(obj.id)
                                }
                            }
                        }	
                        
                    	var aSelect = this.getContainer().getElementsByTagName('SELECT');
                    	
                        for(var no=0;no<aSelect.length;no++)
                        {
                            var obj = aSelect[no];
                            sSelected = objDAT.ResultNode(obj.id);
                            if (obj.getAttribute('prm') == "XS_Field")
                            {   
                                var aNodos = obj.getElementsByTagName('OPTION'); 
                                if (aNodos.length>0)
                                    for(var nR=0;nR<aNodos.length;nR++)
                                    {
                                        oItem = aNodos[nR];
	                                    if (oItem.getAttribute("value") == sSelected)
	                                        obj.selectedIndex = nR;
	                                        //oItem.setAttribute("selected", "true");
                                    }                  
                            }
                        }
                        	
                    	var aInput = this.getContainer().getElementsByTagName('TEXTAREA');
                        for(var no=0;no<aInput.length;no++)
                        {
                            var obj = aInput[no];
                            if (obj.getAttribute('prm') == "XS_Field")
                            {
                                obj.value = objDAT.ResultNode(obj.id);
                            }    
                        }	
                        return true;
                    }        
    
    this.capitalize = function(sCampo)
                    {
                        if (sCampo != null)
                        {
                            var obj = this.getControl(sCampo)
                            InicialesMayusculas(obj)
                        }
                        else
                        {
                    	    var aInput = this.getContainer().getElementsByTagName('INPUT');
                            for(var no=0;no<aInput.length;no++)
                            {
                                var obj = aInput[no];
                                if (obj.prm == "XS_Field" && obj.getAttribute('format') == 'text')
                                {
                                    InicialesMayusculas(obj)
                                }
                            }
                        }	
                    }
                    
	this.addSeparator = function(sMessage, nCol)
	                {
                        var oTR = document.createElement('TR')
	                    if ( sMessage == null)
	                    { 
                            var oTD = XS_CreateChildWithAttrs(oTR,'TD', [ ['colspan','3'], ['style','height:1px;'] ])
                            oTD.innerHTML = '<span style="width:100%; height:1px; border-top:1px #cccccc solid;"></span>'
                        }    
                        else
                        {
                            var oTD = XS_CreateChildWithAttrs(oTR,'TD', [ ['colspan','3'],['width','100%'], ['class','XS_formTitle'], ['align','left']])
                            oTD.innerHTML = sMessage;
                         }    
                        this._F_appendRow( oTR, nCol )
	                }

	this.addTitle= function(sTitle, jOptions, nCol)
	                {
	                    if(jOptions!=null)
	                    {
                            jOptions = Object.toJSON(jOptions).evalJSON();
	                        var sClass = jOptions.myClass;
	                        var sAlign = jOptions.align;
	                        var sHeight = jOptions.height;
	                    }
	                    else
	                    {
	                        var sClass = 'XS_SecSubTitle';
	                        var sAlign = 'left';
	                        var sHeight = '20';
	                    }
                        var oTR = document.createElement('TR')
                        var oTD = XS_CreateChildWithAttrs(oTR,'TD', [ ['colspan','3'],['width','100%'], ['height', sHeight], ['class',sClass], ['align',sAlign] ])
                        oTD.style.paddingLeft = '10px';
                        oTD.style.paddingBottom = '2px';
                        oTD.innerHTML = sTitle;
                        this._F_appendRow( oTR, nCol )
	                }


	this.addControl= function(jParam, nCol)
                   {
                        jObject = Object.toJSON(jParam).evalJSON();
                        var nIdx = this.tabIndex++;
                        var oControl =  XS_createControl(jParam, nIdx);
                        if (this.layout == 'vertical')
                            this._F_appendRow(  this._F_createRow(jObject.label, jObject.field, jObject.type, oControl, jObject.required, '', jObject.tip), nCol )
                        else //horizontal
                            this._F_appendCol( jObject.label, jObject.field, jObject.type, oControl, jObject.required, '', jObject.tip )
                        this.lastField = jObject.field;            
                   }

    this._F_appendCol = function(sLabel, sField, sType, oDat, sRequired, sAlert, sTip)
                {
                    var oTable = this.getTable(1).firstChild;
                    if (oTable.childNodes.length == 0)
                    {                    
                        var oTR_Header = document.createElement('tr')
                        oTable.appendChild(oTR_Header);
                        var oTR_Data = document.createElement('tr')
                        oTable.appendChild(oTR_Data);
                        
                    }
                    else
                    {
                        var oTR_Header = oTable.childNodes[0];
                        var oTR_Data = oTable.childNodes[1];
                    }

                    //Columna del Label
                    var oLabel = this._F_createLabel(sLabel, sType, sRequired, sAlert, sTip, 'center')
                    oLabel.setAttribute("onMouseOver", '_TD_onMouseOver(this,"' + this.id + '_tips' + '")')
                    oLabel.setAttribute("onMouseOut", '_TD_onMouseOut(this,"' + this.id + '_tips' + '")')
                    oTR_Header.appendChild( oLabel )
                    
                    //Columna de Objeto de Edición
                    var oTD = document.createElement('td')    
                    oTD.setAttribute("fld", sField)
                    oTD.style.paddingLeft = '5px';
                    oTD.style.paddingRight = '5px';
                    
                    if ( typeof(oDat) == 'object')
                        oTD.appendChild(oDat)
                    else
                        oTD.innerHTML = oDat;
                    oTR_Data.appendChild(oTD)
                    return oTR        
                }
                   
    this._F_appendRow = function(oTR, nCol)
                   { 
                        var Tabla = this.getTable(nCol)
    	                Tabla.appendChild(oTR)		                        
                   }
                    
                        
    this._F_createLabel = function(sLabel, sType, sRequired, sAlert, sTip, sAlign)
                  {
                        var oTH = document.createElement('th')
                        oTH.setAttribute("type", sType)
                        oTH.setAttribute("required", sRequired)
                        if (sAlert != null)
                            oTH.setAttribute("alert", sAlert)
                        else    
                            oTH.setAttribute("alert", "");

                        if (sTip != null)
                            oTH.setAttribute("tip", sTip)
                        else    
                            oTH.setAttribute("tip", "");
                        
                        if (this.layout == 'vertical')
                        {
                            if (this.LabelWidth != null)
                                oTH.setAttribute("width", this.LabelWidth);    
                        }
                        else
                        {
                            oTH.style.paddingLeft = '5px';
                            oTH.style.paddingRight = '5px';
                            oTH.style.borderBottom = '0px';
                        }                         
                           
                        if (this.labelStyle != null)
                        {
                            if(this.labelStyle.width!=null)
                                oTH.style.width = this.labelStyle.width;
                            if(this.labelStyle.textAlign!=null)
                                oTH.style.textAlign = this.labelStyle.textAlign;
                            if(this.labelStyle.borderBottom!=null)
                            {
                                var sBorder = '"' + this.labelStyle.borderBottom + 'px #ddd solid"'
                            }    
                            if(this.labelStyle.display!=null)
                                oTH.style.display = this.labelStyle.display; 
                        }   
                        
                        if (sAlign != null)
                            oTH.style.textAlign = sAlign;
                        if(sLabel!=null)    
                            oTH.appendChild(document.createTextNode(sLabel))                        
                        return oTH;
                  }

    this._F_createRow = function(sLabel, sField, sType, oDat, sRequired, sAlert, sTip)
                {
                    var oTR = document.createElement('tr')
                    
                    //Columna del Label
                    oTR.appendChild( this._F_createLabel(sLabel, sType, sRequired, sAlert, sTip) )

                    oTR.setAttribute("onMouseOver", '_TR_onMouseOver(this,"' + this.id + '_tips' + '")')
                    oTR.setAttribute("onMouseOut", '_TR_onMouseOut(this,"' + this.id + '_tips' + '")')
                    
                    //Columna de Objeto de Edición
                    var oTD = document.createElement('td')    
                    oTD.setAttribute("fld", sField)
                    
                    if ( typeof(oDat) == 'object')
                        oTD.appendChild(oDat)
                    else
                        oTD.innerHTML = oDat;
                        
                    oTR.appendChild(oTD)
                    

                    //Columna de Icono de requerido
                    var oTD = document.createElement('td')    
                    oTD.setAttribute('width','10')
                    oTD.setAttribute('valign','top')                    
                    if (sRequired != null && sRequired == 'R')
                        oTD.innerHTML =  '<a href="#" tabindex=-1 title="Campo requerido"><img src=/XS_Include/Img/Form/icon_f_required.gif border=0 /></a>'
                    oTR.appendChild(oTD)
                    
                    //Columna de Icono de Error
                    var oTD = document.createElement('td')    
                    oTD.setAttribute('width','10')
                    oTD.setAttribute('valign','top')                    
                    oTD.innerHTML =  '<img src=/XS_Include/Img/Form/icon_f_none.gif border=0/>'                    
                    
                    oTR.appendChild(oTD)
                    
                    return oTR        
                }

}


function _TR_onMouseOver(oTR, divMsg)
{
    var oTD = oTR.cells[0];
    var sTip = oTD.getAttribute('tip') 
    var sRequired = oTD.getAttribute('required')     
    if ( sRequired != null && sRequired == 'R')
        sTip = sTip + ' (Requerido)'
    //var oTD = oTR.cells[1];
    //oTD.style.backgroundColor= "#F0FBFF"; 
    oTD.style.backgroundColor= "#FFFFFF"; 
    oTR.cells[1].style.backgroundColor='#FFFFFF'; 

    if (divMsg != null && divMsg != 'null')
    {
        var oDiv = $(divMsg)
        if (oDiv != null)
            oDiv.innerHTML = sTip + '&#160;';
    }
}        

function _TR_onMouseOut(oTR, divMsg)
{
    if (divMsg != null && divMsg != 'null')
    {
        var oDiv = $(divMsg)
        if (oDiv != null)
            oDiv.innerHTML = '&#160;'
    }
    oTR.cells[0].style.backgroundColor='#f8f8f8'; 
    oTR.cells[1].style.backgroundColor='#f8f8f8'; 
}        

function _TD_onMouseOver(oTD, divMsg)
{
    var sTip = oTD.getAttribute('tip') 
    var sRequired = oTD.getAttribute('required')     
    if ( sRequired != null && sRequired == 'R')
        sTip = sTip + ' (Requerido)'
    oTD.style.backgroundColor= "#FFFFFF"; 
    if (divMsg != null && divMsg != 'null')
    {
        var oDiv = $(divMsg)
        if (oDiv != null)
            oDiv.innerHTML = sTip + '&#160;';
    }
}        

function _TD_onMouseOut(oTD, divMsg)
{
    if (divMsg != null && divMsg != 'null')
    {
        var oDiv = $(divMsg)
        if (oDiv != null)
            oDiv.innerHTML = '&#160;'
    }
    oTD.style.backgroundColor='#f8f8f8'; 
}        

function _F_returnInput(sField, sFormat, sMask, sSize, sValue, sRequired, sMin, sMax, sAlert)
{
    var sInput = '<input id="' + sField + '" size="'+ sSize +'" type="text" format="' + sFormat + '" name="' + sField + '" value="' + sValue + '" mask="' + sMask + '" prm="XS_Field"'

    if (sRequired == 'R')
        sInput = sInput + ' required="' + sRequired + '"'       
    if (sMin != null && sMin != '')
        sInput = sInput + ' min=' + sMin 
    if (sMax != null && sMax != '')
        sInput = sInput + ' maxlength=' + sMax 
    sInput = sInput + ' msg="' + sAlert + '"'
    sInput = sInput + ' style="font:normal 10px verdana,arial,serif; '    
    if (sFormat == "number")            
        sInput = sInput + 'textalign:right"' 
    else
        sInput = sInput + 'textalign:left"' 
    sInput = sInput + '/>'       
    
    return sInput
}





function _viewTip(sTip)
{
    //alert(sTip)
    Tip(sTip, BALLOON, true, ABOVE, true)
}

function _hideTip()
{
    UnTip()
}





// ***************************** VALIDACIÓN DEL FORMULARIO *************************************



// Patterns
var formValidationMasks = new Array();
formValidationMasks['email'] = /\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/gi;	// Email
formValidationMasks['numeric'] = /^[0-9]+$/gi;	// Numeric
formValidationMasks['zip'] = /^[0-9]{5}\-[0-9]{4}$/gi;	// Numeric
formValidationMasks['rut'] = /^[0-9]{8}\-[A-Z0-9]{2}$/gi;	// rut
formValidationMasks['date'] = /^[0-9]{2}\-[0-9]{2}\-[0-9]{4}$/gi;	// Date

var formElementArray = new Array();

function _F_validateCheck(inputObj)
{
	var aInput = document.getElementsByTagName('INPUT');
	for(var no=0;no<aInput.length;no++)
	{
        obj = aInput[no];
    //    if (obj.getAttribute('prm') == "XS_Field" && obj.name == inputObj.name)
        if (obj.getAttribute('prm') == "XS_Field" && obj.id == inputObj.id)
        {
    		if (obj.checked)
    			 return true;
	    }
	}	
	return false;
}
	
	
function _F_validateInput(e, inputObj)
{
	if(!inputObj)inputObj = this;		
	var inputValidates = true;
	if(inputObj.id == '')
	    return;
	    
//	if(formElementArray[inputObj.name]['mask'] && !inputObj.value.match(formValidationMasks[formElementArray[inputObj.name]['mask']]))inputValidates = false;
	if(formElementArray[inputObj.id]['mask'] && !inputObj.value.match(formValidationMasks[formElementArray[inputObj.id]['mask']]))
	    inputValidates = false;

//	if(formElementArray[inputObj.name]['freemask']){
	if(formElementArray[inputObj.id]['freemask']){
		
//		var tmpMask = formElementArray[inputObj.name]['freemask'];
		var tmpMask = formElementArray[inputObj.id]['freemask'];
		tmpMask = tmpMask.replace(/-/g,'\\-');
		tmpMask = tmpMask.replace(/S/g,'[A-Z]');
		tmpMask = tmpMask.replace(/N/g,'[0-9]');
		
		tmpMask = eval("/^" + tmpMask + "$/gi");
		
	    if(!inputObj.value.match(tmpMask))
	        inputValidates = false;		        
	}	
	
//	if(formElementArray[inputObj.name]['regexpPattern'])
	if(formElementArray[inputObj.id]['regexpPattern'])
	{
//		var tmpMask = eval(formElementArray[inputObj.name]['regexpPattern']);
		var tmpMask = eval(formElementArray[inputObj.id]['regexpPattern']);
		if(!inputObj.value.match(tmpMask))inputValidates = false
	}
	
//	if(!formElementArray[inputObj.name]['required'] && inputObj.value.length==0 && inputObj.tagName=='INPUT')
//	if(formElementArray[inputObj.id]['required'] != 'R' && inputObj.value.length==0 && inputObj.tagName=='INPUT')
//	   inputValidates = true	
//	if(formElementArray[inputObj.id]['required'] != 'R' && inputObj.value.length==0 && inputObj.tagName=='SELECT')
//	   inputValidates = true	
				

    var lHay = true;
    if (inputValidates)
    {
//	    if (formElementArray[inputObj.name]['required'])
        if (formElementArray[inputObj.id]['required'])
            if (formElementArray[inputObj.id]['required'] == 'R')	
            {
	            if (inputObj.tagName=='INPUT' )
	            {

	 	            lHay = (inputObj.value.length!=0);
	            }
	            else
	            if (inputObj.tagName=='TEXTAREA')
	            {
	 	            lHay = (inputObj.value.length!=0);
	            }		
	            else	
	            if(inputObj.tagName=='SELECT')
	            {
		            if( inputObj.selectedIndex==0)
		               lHay = false
                    else
	                    if (inputObj[inputObj.selectedIndex].value == '' || inputObj[inputObj.selectedIndex].value == '-1')
		                    lHay = false;
	            }  

                //Valida el largo mínimo y máximo de lo ingresado		
                if(inputValidates) 
                {
                    var nMin = 0;
                    if ( inputObj.min != '' && inputObj.min != null)
                    {
	                     nMin	= parseInt(inputObj.min);	 
                         lHay = (inputObj.value.length >= nMin);					
                    }     
                };
            }		
    }
    else
    {
        if (inputObj.getAttribute('format') == 'email' && inputObj.value.length==0)
            inputValidates = true;
    }    	

	if (lHay) //si hay datos, valida formato
	{
        if (inputObj.getAttribute('format') == 'rut')
        {
	        inputValidates = _F_IsRut(inputObj)
        }			

        if (inputObj.getAttribute('format') == 'date')
        {
	        inputValidates = _F_IsDate(inputObj,'dma')	
        }			

        if (inputObj.getAttribute('format') == 'option')
        {
	        //inputValidates = _F_validateCheck(inputObj);				
	        inputValidates = true;
        }			
    }
    else
        inputValidates = false;


    if(inputValidates)
    {
	    inputObj.parentNode.className='validInput';
	    inputObj.style.border = "1px #cccccc solid"		
    }else
    {
	    inputObj.parentNode.className='invalidInput';
	    inputObj.style.border = "1px #FF0000 solid"		
    }

}





