/* ****************************************************************************
Copyright 2007,
Todos los derechos Reservados
CM.COM E.U.
cmhenao@epm.met.co

El uso sin solicitud espresa a la compañia de esta libreria es una clara
violación a la propiedad intelectual y los derechos de autor.
Prohibida su distribucion y/o uso sin el permiso explicito de cm.com
**************************************************************************** */

/* ****************************************************************************
Autor: Jhon Alejandro Ramirez Velez
       Desarrollador
       Progress - WebSpeed
       jhalrave@epm.net.co
**************************************************************************** */

function cMantenimiento(){
  var self = this;
  this.RESPONSE_OK               = '0';
  this.page                      = "";
  
  this.cObject                   = cObject;
  this.cObject();
  
  this.widgets                   = {};
  this.names                     = {};
  
  this.current                   = null;
  
  this.messages                  = {};
  
  this.urls                      = {};
  
  this.objects                    = {}
  this.objects['datos']           = Object;
  this.objects['filtro']          = Object;                 

  this.init                      = _init;
  this.start                     = _start;
  this.cancelar                  = _cancelar;
  this.actionListener            = _actionListener;
  this.action                    = _action;
  this.nav                       = _nav;
  this.filtrar                   = _filtrar;
  this.GetResultadosFiltro       = _GetResultadosFiltro;
  this.guardar                   = _guardar;
  this.GetGuardar                = _GetGuardar;
  this.show                      = _show;
  this.hide                      = _hide;
  this.help                      = _help; 
  this.reloadHTML                = false;
  
  function _init(){
    self.container = self.application.loadHTML(self.page);
    var oEvent = new Object;
    oEvent.name = "oninit";
    oEvent.object = self;
    self.dispatch(oEvent);
    oEvent = null;
  }
  
  function _start(){
    self.createWidgetsFromNames(null, self.reloadHTML);
    if(self.widgets['browser'] != null && self.widgets['browser'].browse == undefined){
      self.widgets['browser'].extendb = cTableDataBrowser;
      self.widgets['browser'].extendb();
      self.widgets['browser'].addListener('onaction', self.actionListener);
    }
    
    if(self.widgets['formulario'] != null){
      self.widgets['formulario'].extendf = cForm;
      self.widgets['formulario'].extendf();
    }
    
    if(self.widgets['foperaciones'] != null){
      self.widgets['foperaciones'].extendf = cForm;
      self.widgets['foperaciones'].extendf();
    }
    
    if(self.widgets['fpaginacion'] != null){
      self.widgets['fpaginacion'].extendf = cForm;
      self.widgets['fpaginacion'].extendf();
    }

    if(self.widgets['ffiltro'] != null){
      self.widgets['ffiltro'].extendf = cForm;
      self.widgets['ffiltro'].extendf();
    }
    
    self.widgets['foperaciones'].enable();
    self.widgets['formulario'].disable();
    self.widgets['fpaginacion'].enable();
    
    if(self.widgets['results'] != null){
      self.widgets['results'].style.display = "";
    }
    
    if(self.widgets['filter'] != null){
      self.widgets['filter'].style.display = "none";
    }

    if(self.widgets['no_results'] != null){
      self.widgets['no_results'].style.display = "none";
    }
    
    if(self.widgets['nav_bar'] != null){
      self.widgets['nav_bar'].style.display = "";
    }
    
    if(self.widgets['operaciones'] != null){
      self.widgets['operaciones'].style.display = "";
    }
    
    self.filtrar();   
    var oEvent = new Object;
    oEvent.name = "onstart";
    oEvent.object = self;
    self.dispatch(oEvent);
    oEvent = null;
  }
  
  function _actionListener(oEvent){
    self.current = oEvent.object;  
    if(self.widgets['formulario'] != undefined && self.widgets['formulario'] != null){
      self.current.display(self.widgets['formulario']);
    }       
  }
  
  function _cancelar(){
    self.container.hide();
    var oEvent = new Object();
    oEvent.name = "onclose";
    oEvent.object = self;
    self.dispatch(oEvent);
  }
  
  function _action(sAction){
    switch(sAction){
      case 'add':
        var obj = new self.objects['datos']();
        if(self.current != null){
          if(confirm(self.messages['crear_1'])){
            obj = self.current;
          }
        }
        obj.display(self.widgets['formulario']);
        self.widgets['browser'].disable();
        self.widgets['formulario'].enable();
        self.widgets['foperaciones'].disable();
        self.operation = sAction;
      break;
      case 'mod':      
        if(self.current == undefined || self.current == null){
          alert(self.messages['no_selected']);
          return;  
        }
        self.widgets['browser'].disable();
        self.widgets['formulario'].enable();
        self.widgets['foperaciones'].disable();
        self.operation = sAction;
      break;
      case 'del':
        if(self.current == undefined || self.current == null){
          alert(self.messages['no_selected']);
          return;  
        }
        if(confirm(self.messages['delete_1'])){
          var oObject = {};
          oObject.rid = self.current.rid;
          oObject.operacion = self.operation = sAction;
          self.guardar(oObject);
        }
      break;
      case 'cancel':
        self.widgets['browser'].enable();
        self.widgets['formulario'].disable();
        self.widgets['formulario'].clear();
        self.widgets['foperaciones'].enable();
      break;
    }    
  }
  
  function _nav(sDirection){
    switch(sDirection){
      case '':
        var oTd = window.event.srcElement;
        for(;oTd.tagName != "SPAN";){
          if(oTd.parentElement == null || oTd.parentElement == undefined){
            return;
          }
          oTd = oTd.parentElement;
        }
        if(self.page_button != undefined && self.page_button != null){
          self.page_button.className = 'boton_nav';
        }
        
        self.page_button = oTd;
        self.page_button.className = 'boton_nav_1';
      break;
      
      case 'first':
        var oFiltro = self.filtro;
        if(oFiltro){
          oFiltro.direction = "FIRST";
        }
        self.filtrar(oFiltro);
      break;
      
      case 'last':
        var oFiltro = self.filtro;
        if(oFiltro){
          oFiltro.direction = "LAST";
        }
        self.filtrar(oFiltro);
      break;
      
      case 'next':
        var oFiltro = self.filtro;
        if(oFiltro){
          oFiltro.direction = "NEXT";
        }
        oFiltro.rid = self.last_rid;
        self.filtrar(oFiltro);
      break;
      
      case 'prev':
        var oFiltro = self.filtro;
        if(oFiltro){
          oFiltro.direction = "PREV";
        }
        oFiltro.rid = self.first_rid;
        self.filtrar(oFiltro);
      break;
      
      case 'filter':
        self.widgets['filter'].style.display = "";
      break;    
      
      case 'close_filter':
        self.widgets['filter'].style.display = "none";
      break;    
    }
  }
  
  function _filtrar(oFiltro){
    if(oFiltro == undefined){
      var oFiltro = new self.objects['filtro']();
      var oFormFiltro = self.widgets['ffiltro'];
      
      oFormFiltro.validate();
      if(oFormFiltro.failed){
        alert(oFormFiltro.messages);
        return;
      } 
      oFiltro.load(oFormFiltro);
    }
    
    oFiltro.resultados = new Array();
    self.filtro = oFiltro;
        
    //debugGroup("Solicitud del Filtrado", oFiltro);
    //messageBox(self.messages['filter_1'], true);
    self.widgets['browser'].setState('loading', self.messages['filter_1']);
    window.requester.sendRequest("POST", self.urls['filtrar'], oFiltro.serialize('request'), self.GetResultadosFiltro, oFiltro);
  }
  
  function _GetResultadosFiltro(cargado, respuesta){
    messageBox("",false);
    self.widgets['browser'].setState('loading', "mostrando datos");
    if(window.requester.fault){
      alert("Error en la Solicitud:\n" + respuesta.code + "\n" + respuesta.message);
      return;
    }
    debugGroup("Respuesta del Filtro", respuesta);
    if (cargado){
      self.current = null;
      if(respuesta.resultados.length > 0){
        var oBrowser = self.widgets['browser'];
        oBrowser.clear();
        oBrowser.display(respuesta.resultados);
        self.first_rid = respuesta.frid;
        self.last_rid  = respuesta.lrid;
        if(self.widgets['record_count']){
          var sPrimero = respuesta.resultados[0].crr; 
          var sUltimo  = respuesta.resultados[respuesta.resultados.length - 1].crr;
          self.widgets['record_count'].innerHTML = "Resultados " + sPrimero + " al " + sUltimo + " de " + respuesta.registros + " coincidencias encontradas"; 
        }
        window.show(self.names['results']);
        window.hide(self.names['no_results']);
        if(parseInt(respuesta.registros_por_pagina) < parseInt(respuesta.registros)){
          self.widgets['nav_bar'].style.display = "";
        }else{
          self.widgets['nav_bar'].style.display = "none";
        }
        if(self.current_rid != undefined && self.current_rid != null && self.current_rid != ""){
          oBrowser.reposition(self.current_rid);
          self.current_rid = null;  
        }else{
          oBrowser.reposition(respuesta.frid);
        }
        
      }else{
        window.show(self.names['no_results']);
        window.hide(self.names['results']);        
      }
      self.widgets['browser'].setState('complete');
    }else{
      alert("Error:\n" + respuesta);
    }    
  }
  
  function _guardar(oObject){
    if(oObject == undefined){
      var oObject = new self.objects['datos']();
      var oForm = self.widgets['formulario'];
      var sMsg = "";
       
      if (oForm){
        oForm.validate();
        if(oForm.failed){
          sMsg += oForm.messages;  
        }
        
        // otras validaciones
        
        if(sMsg != ""){
          alert(sMsg);
          return;
        }
        
        oObject.load(self.widgets['formulario']);
        oObject.operacion = self.operation;
      }               
    }

    debugGroup("Solicitud Guardar", oObject);
    messageBox(self.messages['guardar_1'],true);
    window.requester.sendRequest("POST", self.urls['guardar'], oObject.serialize('request'), self.GetGuardar, oObject);        
  }
  
  function _GetGuardar(cargado, respuesta){
    messageBox("",false);
    if(window.requester.fault){
      alert("Error en la Solicitud:\n" + respuesta.code + "\n" + respuesta.message);
      return;
    }
    debugGroup("Respuesta Guardar", respuesta);
    if (cargado){
      if(respuesta.codigo != self.RESPONSE_OK){
        alert("Error:\n" + respuesta.codigo + "\n" + respuesta.mensaje);
        return;
      }else{
        self.current_rid = respuesta.rid;
        self.widgets['browser'].enable();
        self.widgets['formulario'].disable();
        self.widgets['foperaciones'].enable();
        if(respuesta.operacion != 'del'){
          var oFiltro         = self.filtro;
          oFiltro.rid         = respuesta.rid;
          oFiltro.direction   = "FIRST";
          self.filtrar(oFiltro);
        }else{
          self.filtrar();
        }
      } 
    }else{
      alert("Error:\n" + respuesta);
    }
  }
  
  function _show(){
    self.container.show();  
  }
  
  function _hide(){
    self.container.hide();  
  }
  
  function _help(){
    var oTrg = window.event.srcElement;
    if(oTrg.helpid == undefined || oTrg.helpid == null){
      return;
    }
    if(oTrg._help == undefined || oTrg._help == null){
      oTrg._help = document.getElementById(oTrg.helpid);
    }
    if(oTrg._help == null){return;}
    
    if(oTrg.help_state == undefined || oTrg.help_state == null){
      oTrg.help_state = false;
    }
    
    if(oTrg.help_state){
      oTrg._help.style.display = "none";
    }else{
      oTrg._help.style.display = "";
    }
    oTrg.help_state = !oTrg.help_state;
  }
}

function cFiltro(){
  this.registros              = "";
  this.registros_por_pagina   = iRegistroPorPagina;
  this.tipo_filtro            = "";
  this.filtro                 = "";
  this.rid                    = "";
  this.direction              = "";
}


