#    This file is part of Rmldonkey.
#    Rmldonkey is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#    Rmldonkey is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#    You should have received a copy of the GNU General Public License
#    along with Rmldonkey.  If not, see <http://www.gnu.org/licenses/>.
#    Copyright 2009, Manuel Ramos Caro manuelramoscaro@yahoo.es
require 'ConectaTelnet'
     def ventana_error(conexion)
        window(:title => "Fallo la conexión", :width => 750, :height => 150) do
           background "#464646".."#000000"                       
           stack :margin_left => 20 do 
               flow :margin => 15 do
                 image 'warning.png', :height => 80 
                 para "Error: " + conexion.conectatelnet_error_msg.to_s, :stroke => white,:margin => 15
                end
            end
                          
            stack :margin_left => 300 do
                 button " ACEPTAR  " do
                    close()
                 end
            end  
        end
     end

############################### VENTANA DE LOGIN INICIO ####################################################

Shoes.app(:title => "Rmldonkey - Conexión", :width => 310, :height => 400) do
#activate debug
#     Shoes.show_log
#activate debug
     background "#464646".."#000000"
     image 'mldonkey.gif', :height => 145, :margin_left => 85, :magin_top => 500
        flow :margin => 5 do  
            para "Servidor      ", :stroke => white, :size => 10   
            @ip = edit_line :left=> 80     
        end

        flow :margin => 5 do  
            para "Puerto        ", :stroke => white, :size => 10      
            @puerto = edit_line :left=> 80
        end

        flow :margin => 5 do  
            para "Usuario       ", :stroke => white, :size => 10      
            @usuario = edit_line :left=> 80
        end

        flow :margin => 5 do
            para "Contraseña  ", :stroke => white, :size => 10   
            @contrasena = edit_line :secret => true, :left=> 80
        end

        flow :margin => 10 do
            button "      OK      " do 
                conexion = ConectaTelnet.new(@ip.text,@puerto.text,@usuario.text,@contrasena.text)
                control_login = conexion.estado_conectatelnet
                if control_login == false 
####################################### VENTANA FALLO CONEXION INICIO ##################################
        window(:title => "Fallo la conexión", :width => 750, :height => 150) do
           background "#464646".."#000000"                       
           stack :margin_left => 20 do 
               flow :margin => 15 do
                 image 'warning.png', :height => 80 
                 para "Error: " + conexion.conectatelnet_error_msg.to_s, :stroke => white,:margin => 15
                end
            end
                          
            stack :margin_left => 300 do
                 button " ACEPTAR  " do
                    close()
                 end
            end  
        end

 ###################################### VENTANA FALLO CONEXION FIN #####################################
                else
####################################### VENTANA CONEXION INICIO ########################################
                   control_login = conexion.ctversion
                   titulo = "Conectado a " + @ip.text + " - Versión de Cliente " + conexion.ctversion_retorno_msg[0].to_s
                   window(:title => titulo.to_s, :width => 900, :heigth => 900)  do
                       background "#000000".."#464646"
                       @accion = "inicial"
                       flow do
                          background "#000000".."#464646"
                          boton_descargas = image "descargas.gif",:width => 110, :height => 110, :margin => 20,:align => "center"
                          boton_descargas.click do 
                                                     @accion = "descarga" 
                                                     @tasa_refresco = 2
                                                  end   
		          boton_buscar = image "buscar.gif",:width => 110, :height => 110, :margin => 20,:align => "center"
                          boton_buscar.click do 
                                                     @accion = "busca" 
                                                     @refresco = true
                                                end  
                       
		          boton_buscar = image "servers.gif",:width => 110, :height => 110, :margin => 20,:align => "center"
                          boton_buscar.click do 
                                                     @muestra = "conectado"
                                                     @accion = "server" 
                                                     @refresco = true                                
                                              end  

		          boton_buscar = image "estadisticas.gif",:width => 110, :height => 110, :margin => 20,:align => "center"
                          boton_buscar.click do 
                                                     @accion = "estadistica"
                                                     @refresco = true
                                             end

		          boton_buscar = image "configuracion.gif",:width => 110, :height => 110, :margin => 20,:align => "center"
                          boton_buscar.click do 
                                                     @accion = "opciones"
                                                     @refresco = true
                                                     @mensaje_opt = "Opciones"
                                                end  

		          boton_buscar = image "ayuda.gif",:width => 110, :height => 110, :margin => 20,:align => "center"
                          boton_buscar.click do 
                          	
						                         @accion = "ayuda"
						                         @refresco = true
                           end  

		          boton_buscar = image "salir.gif",:width => 110, :height => 110, :margin => 20,:align => "center"
                          boton_buscar.click do 
				                  window(:title => "Confirmación...", :width => 500, :height => 150) do
                                                  background "#000000".."#999999"
                                                  stack :margin_left => 20 do 
                                                    flow :margin => 15 do
                                                        image 'warning.png', :height => 80 
                                                        para "Se ha pulsado salir.¿Esta seguro?", :stroke => white,:margin_top => 20,
                                                        :size=> 10
                                                    end
                                                  end
                                                  flow :margin_left => 125 do
			                              button "     SI      " do
			                                exit()
			                              end
						      button "     NO      " do
                                                        close() 
                                                      end	 	    
 
						  end	
                                                  end
                                              end  
                    end


                         def mensaje_banner(conexion)
		           @mostrar_mensaje_banner.clear do 
                             background "#000000".."#464646"
                               if conexion.ctestado
                                  conexion.ctestado_retorno_msg.each do |mensaje|
                                    mensaje = mensaje.gsub("Down:","Bajando a:")
                                    mensaje = mensaje.gsub("Up:","Subiendo a:")
                                    mensaje = mensaje.gsub("Shared:","Compartido:")
                                    mensaje = mensaje.gsub("Downloaded:","Bajado:")
                                    mensaje = mensaje.gsub("Uploaded:","Subido:")
                                    mensaje = mensaje.gsub("\n","")
                                    para mensaje.to_s, :stroke => lightblue, :size => 10
                                  end
#almacenamos valores para la estadistica
                                  
                                  if @tiempo_est[@indice_est - 1] != conexion.ctestado_time_msg 
                                    if @indice_est < 1400
                                       @descarga_est[@indice_est] = conexion.ctestado_down_msg
                                       @carga_est[@indice_est] =  conexion.ctestado_up_msg
                                       @tiempo_est[@indice_est] =  conexion.ctestado_time_msg 
                                       @indice_est += 1
                                    end
                                    if @indice_est >= 1400
                                       crear_hueco(@descarga_est)
                                       @descarga_est[@descarga_est.length - 1] = conexion.ctestado_down_msg
                                       crear_hueco(@carga_est)
                                       @carga_est[@carga_est.length - 1] = conexion.ctestado_up_msg
                                       crear_hueco(@tiempo_est)
                                       @tiempo_est[@tiempo_est.length - 1] = conexion.ctestado_time_msg  
                                    end
                                  end
#almacenamos valores para la estadistica
                               else
        window(:title => "Fallo la conexión", :width => 750, :height => 150) do
           background "#464646".."#000000"                       
           stack :margin_left => 20 do 
               flow :margin => 15 do
                 image 'warning.png', :height => 80 
                 para "Error: " + conexion.conectatelnet_error_msg.to_s, :stroke => white,:margin => 15
                end
            end
                          
            stack :margin_left => 300 do
                 button " ACEPTAR  " do
                    close()
                 end
            end  
        end
                                close()
                               end
                           end
                         end

                         def crear_hueco(tabla)
                             i = 0
                             while i < ( tabla.length - 1)
                                   tabla[i] = tabla[ i + 1]
                                   i += 1
                             end
                         end

                          @mostrar_mensaje_banner = flow
#iniciamos tablas de estadisticas
                          @descarga_est = Array.new
                          @carga_est = Array.new
                          @tiempo_est = Array.new
                          @indice_est = 0
#iniciamos tablas de estadisticas
                          mensaje_banner(conexion)
                          animate(2) do
                             mensaje_banner(conexion)
                          end

####metodos comunes####
def tratar_mensaje(mensaje,campos,conexion)
       mensaje_salida=Array.new
          iz=0
          de=0 
          y=0
          while campos[y] != nil
              if y == 0
                 while mensaje[de..de] != "\]" && mensaje[de..de] != nil
                     de += 1
                 end
                 mensaje_salida[y] = mensaje[iz..de] 
                 iz = de + 1
                 de = iz
              else
                 if campos[y] =~ /File/
                     while mensaje[de..de] == " "
                        de += 1
                     end
                     iz = de
                     de = de + conexion.posfile_msg.to_i
                     while mensaje[de..de] != " "
                           de += 1
                     end
#eliminamos ahora blancos a la izquierda
                     blanco = de
                     while mensaje[blanco..blanco] == " "
                           blanco -= 1
                     end
                     mensaje_salida[y] = mensaje[iz..blanco]  
#siguiente palabra
                     iz = de + 1
                 else
                   if campos[y] =~ /User/ || campos[y] =~ /Group/
                     blanco=0
                     while mensaje[de..de] == " "
                        de += 1
                        blanco += 1
                     end
                     if blanco >= 2
                        mensaje_salida[y] = " "
                        de = iz
                     else
                        iz = de
                        while mensaje[de..de] != " " && mensaje[de..de] != nil
                           de += 1
                        end
                        mensaje_salida[y] = mensaje[iz..de] 
                        iz = de + 1
                     end
                   else
                     while mensaje[de..de] == " "
                        de += 1
                     end
                     iz = de
                     while mensaje[de..de] != " " && mensaje[de..de] != nil
                        de += 1
                     end
                     mensaje_salida[y] = mensaje[iz..de] 
                     iz = de + 1
                   end
                 end
              end
              y += 1
          end
       return mensaje_salida
end
def formatea_descarga(array_cadenas,array_campos,columna)
    i=0
    salida = String.new
    while array_campos[i] != nil
       case array_campos[i]
         when columna          
           if array_cadenas[i] != nil
              salida = salida + array_cadenas[i]
           end
       end 
       i+=1
    end
    return salida 
end
def formatea_prioridad(prio)
    case prio
    when "0" 
       return "Normal"
    when "-10"
       return "Baja"
    when "-20"
       return "Muy Baja"
    when "10"
       return "Alta"
    when "20"
       return "Muy Alta"
    else
       return prio  
    end
end
def prioridad_a_numerica(prio)
    case prio
    when "Normal"
        return 0
    when "Baja"
        return -10
    when "Muy Baja"
        return -20
    when "Alta"
        return 10
    when "Muy Alta"
        return 20
    else
        return prio.to_i
    end
end



############################## MENSAJE DE ESTADO INICIAL INICIO##############################################
                       def mensaje(conexion)
		         @mensaje_estado.clear do 
                             background "#000000".."#464646"
                             banner "Conectado a Mldonkey", :stroke => darkred, :left => 120, :top => 200
                         end
                       end
############################# LISTA DE DESCARGAS ############################################################
                       def mensaje_descargas(conexion)
                         @mensaje_estado.clear do 
                           if conexion.ctdescargas("")
                             flow do
                                background "#464646".."#000000"
                                para "Fichero", :stroke => lightblue, :size => 10
                                para "%", :left => 370, :stroke => lightblue, :size => 10
                                para "Hecho", :left => 420, :stroke => lightblue, :size => 10
                                para "Total", :left => 490, :stroke => lightblue, :size => 10
                                para "Ult. Compl.", :left => 570, :stroke => lightblue, :size => 10
                                para "Dias:Compl.", :left => 660, :stroke => lightblue, :size => 10
                                para "Velocidad", :left => 750, :stroke => lightblue, :size => 10
                                para "Prioridad", :left => 820, :stroke => lightblue, :size => 10
                             end
                             campos = Array.new
                             campos = conexion.ctestado_campos_descarga_msg
                             conexion.ctdescargas_retorno_msg.each do |transmision|
                                campos_transmision = Array.new
                                campos_transmision = tratar_mensaje(transmision.to_s,campos,conexion)
                                elemento_transmision = stack do
                                    background "#464646".."#000000"
                                    flow do
                                     enlace = link formatea_descarga(campos_transmision,campos,'File').to_s
                                     para enlace, :size => 10 
                                     enlace.click do  
                                            @accion = "detalle" 
                                            @refresco = true
                                            @numero = campos_transmision.to_s
                                            @actual = formatea_descarga(campos_transmision,campos,'Done').to_s
                                            @total  = formatea_descarga(campos_transmision,campos,'Size').to_s
                                            @prio   = 
                                            formatea_prioridad(formatea_descarga(campos_transmision,campos,'Prio')).to_s
                                            if formatea_descarga(campos_transmision,campos,'Rate').to_s =~ /Paused/
                                               @pausa   = true
                                            else
                                               @pausa   = false
                                            end
                                     end
                                     para formatea_descarga(campos_transmision,campos,'%').to_s, :left => 370, 
                                     :stroke => white, :size => 10
                                     para formatea_descarga(campos_transmision,campos,'Done').to_s, :left => 420,
                                     :stroke => white, :size => 10
                                     para formatea_descarga(campos_transmision,campos,'Size').to_s, :left => 490, 
                                     :stroke => white, :size => 10
                                     para formatea_descarga(campos_transmision,campos,'lSeen').to_s, :left => 570, 
                                     :stroke => white, :size => 10
                                     para formatea_descarga(campos_transmision,campos,'Old').to_s, :left => 660, 
                                     :stroke => white, :size => 10
                                     para formatea_descarga(campos_transmision,campos,'Rate').to_s, :left => 750, 
                                     :stroke => white, :size => 10
                                     para formatea_prioridad(formatea_descarga(campos_transmision,campos,'Prio')).to_s,
                                     :left => 820,:stroke => white, :size => 10
                                    end
                                end
                             end       
                           else
                            ventana_error(conexion)
                            close()
                           end
                         end
                       end
################################## DETALLE DE DESCARGA SELECCIONADA ##########################################
                       def tratar_retorno_detalle(detalle)
                           array_detalle = Array.new
                       #valor[0] Red    
                           detalle[1]=detalle[1].gsub("0","")
                           detalle[1]=detalle[1].gsub("1","")
                           detalle[1]=detalle[1].gsub("2","")
                           detalle[1]=detalle[1].gsub("3","")
                           detalle[1]=detalle[1].gsub("4","")
                           detalle[1]=detalle[1].gsub("5","")
                           detalle[1]=detalle[1].gsub("6","")
                           detalle[1]=detalle[1].gsub("7","")
                           detalle[1]=detalle[1].gsub("8","")
                           detalle[1]=detalle[1].gsub("9","")
                           detalle[1]=detalle[1].gsub("\[","")
                           detalle[1]=detalle[1].gsub("\]","")
                           array_detalle[0] = flow do
                                                para "Red", :left => 95, :stroke => lightblue, :size => 10
                                                para ":",:left=> 205, :stroke => lightblue, :size => 10
                                                para detalle[1], :left => 225, :stroke => white, :size => 10
                                              end
                       #valor[1] Id
                           array_detalle[1] = flow do
                                                para "Id", :left => 95, :stroke => lightblue, :size => 10
                                                para ":",:left=> 205, :stroke => lightblue, :size => 10
                                                para @numero[3..5], :left => 225, :stroke => white, :size => 10
                                              end
                       #valor[2] Nombre Fichero
                           array_detalle[2] = flow do 
                                                para "Nombre", :left => 95, :stroke => lightblue, :size => 10
                                                para ":",:left=> 205, :stroke => lightblue, :size => 10
                                                para detalle[2], :left => 225,:stroke => white, :size => 10
                                              end
                       #valor[3] Id de red del fichero
                           array_detalle[3] = flow do
                                                para "Urn link", :left=> 95, :stroke => lightblue, :size => 10
                                                para ":",:left=> 205, :stroke => lightblue, :size => 10
                                                para detalle[3],:left => 225, :stroke=> white, :size => 10
                                              end
                       #valor[4] Tamaño fichero
                           array_detalle[4] = flow do 
                                                para "Total", :left=> 95,:stroke => lightblue, :size => 10
                                                para ":",:left=> 205, :stroke => lightblue, :size => 10
                                                para @total,:left => 225, :stroke=> white, :size => 10
                                              end
                       #valor[5] Descargado actualmente
                           array_detalle[5] = flow do 
                                                para "Descargado", :left=> 95,:stroke => lightblue, :size => 10
                                                para ":",:left=> 205, :stroke => lightblue, :size => 10
                                                para @actual,:left => 225, :stroke=> white, :size => 10
                                              end
                       #valor[6] Prioridad 
                           array_detalle[6] = flow do 
                                                para "Prioridad", :left=> 95,:stroke => lightblue, :size => 10
                                                para ":",:left=> 205, :stroke => lightblue, :size => 10
                                                para @prio,:left => 225, :stroke=> white, :size => 10
                                              end
                       #valor[7] Chunks - Visibilidad
                           detalle.each do |valor|
                             if valor =~ /Chunks:/
                                valor = valor.gsub("Chunks:","")
                                valor = valor.gsub("\[","")
                                valor = valor.gsub("\]","")
                                valor = valor.gsub(" ","")
                                array_detalle[7] =flow do 
                                                     para "Estado", :left=> 95,:stroke => lightblue, :size => 10
                                                     para ":",:left=> 205, :stroke => lightblue, :size => 10
                                                     i = 0
                                                     while i <= valor.length 
                                                        case valor[i..i]
                                                        when "0"
                                                             fill red
                                                             stroke red
                                                        when "1"
                                                             fill darkblue
                                                             stroke darkblue
                                                        when "2"
                                                             fill green
                                                             stroke green
                                                        when "3"
                                                             fill blue
                                                             stroke blue
                                                        end
                                                        if i == 0 ||i == valor.length
                                                             rect 230 + i*2,1,2,20,2              
                                                        else
                                                             rect 230 + i*2,1,2,20 
                                                        end
                                                        i +=1
                                                     end 
                                                  end
                             end
                           end
                       #valor[8..] Comentarios 
                           i=8
                           ban=false
                           detalle.each do |valor|
                             if valor =~ /Comment/
                                if ban == false
                                   array_detalle[i] = flow do
                                                        para "Comentario/s", :left=> 95,
                                                        :stroke => lightblue, :size => 10
                                                        para ":",:left=> 205, :stroke => lightblue, :size => 10
                                                      end
                                   ban = true
                                end 
                                valor = valor.gsub("Comment","")
                                array_detalle[i] =  flow do para valor, :left => 225, :stroke => white, :size => 10
                                                    end
                                i += 1
                             end
                           end
                       #valor[9..] Nombres
                           ban = false
                           detalle.each do |valor|
                              if valor =~ /Probable name:/
                                 ban = true
                                 array_detalle[i] = flow do 
                                                        para "Otros Nombres", :left=> 95,:stroke => lightblue, 
                                                        :size => 10
                                                        para ":",:left=> 205, :stroke => lightblue, :size => 10
                                                    end
                                 i += 1
                              end
                              if valor =~ /sources:/ || valor =~ /Comment/
                                 ban = false
                              end
                              if ban 
                                 valor = valor.gsub("Probable name:","")
                                 array_detalle[i] = flow do para valor, :left => 225, :stroke => white, :size => 10
                                                     end 
                                 i += 1
                              end
                           end   
                           return array_detalle
                        end
                       def detalle_descarga(conexion)
                              @mensaje_estado.clear do
                                if conexion.ctdescargas(@numero[3..5])
                                    flow do
                                       background "#464646".."#000000"
                                       para "Acciones:   ",:left=> 95,  :stroke => lightblue, :size => 10
                                       if @pausa
                                          boton_reanudar = button("Reanudar") 
                                          boton_reanudar.click do
                                              if conexion.ctdescarga_resume(@numero[3..5].to_s)
                                                 @accion = "descarga"
                                              else
                                                 ventana_error(conexion)
                                                 close()
                                              end
                                          end
                                       else
                                          boton_pausa = button(" Parar ") 
                                          boton_pausa.click do
                                              if conexion.ctdescarga_pause(@numero[3..5].to_s)
                                                 @accion = "descarga"
                                              else
                                                 ventana_error(conexion)
                                                 close()
                                              end
                                          end
                                       end
                                       boton_cancelar = button("Cancelar")
                                       boton_cancelar.click do
                                        if conexion.ctdescarga_cancel(@numero[3..5].to_s)
                                          window(:title => "Confirmación...", :width => 500, :height => 150) do
                                             background "#000000".."#999999"
                                             stack :margin_left => 20 do 
                                                flow :margin => 15 do
                                                      image 'warning.png', :height => 80 
                                                      para "¿Eliminamos la descarga?", :size=> 10,
                                                      :stroke => white,:margin_top => 20,:margin_left => 35
                                                end
                                             end
                                             flow :margin_left => 125 do
                                                  button "     SI      " do
                                                        conexion.ctdescarga_cancel_confirm('s')
			                                                 close()
			                                            end
						                                      button "     NO      " do
                                                        conexion.ctdescarga_cancel_confirm('n')
                                                        close() 
                                                  end	 	  
                                              end	
                                          end
                                          @accion = "descarga"
                                        else
                                          ventana_error(conexion)
                                          close()
                                        end
                                       end
                                       boton_reanudar_todo = button("Reanudar Todo") 
                                       boton_reanudar_todo.click do
                                           if conexion.ctdescarga_resume("all")
                                              @accion = "descarga"
                                           else
                                              ventana_error(conexion)
                                              close()
                                           end
                                       end
                                       boton_pausar_todo = button("Parar Todo") 
                                       boton_pausar_todo.click do
                                           if conexion.ctdescarga_pause("all")
                                              @accion = "descarga"
                                           else
                                              ventana_error(conexion)
                                              close()
                                           end
                                       end
                                       para "Prioridad:   ",:left=> 610, :stroke => lightblue, :size => 10
                                       list_box :items => ["Normal","Muy Alta","Alta","Muy Baja","Baja"],
                                                :choose => @prio do |list| 
                                           case list.text
                                             when "Normal"
                                                   valor_deseado = 0
                                             when "Muy Alta"
                                                   valor_deseado = 20
                                             when "Alta"
                                                   valor_deseado = 10
                                             when "Muy Baja"
                                                   valor_deseado = -20
                                             when "Baja"
                                                   valor_deseado = -10
                                           end
                                              valor_actual = prioridad_a_numerica(@prio)
                                              valor = (valor_actual - valor_deseado) * -1
                                              if @prio != list.text
                                                 if conexion.ctdescarga_prioridad(valor.to_s,@numero[3..5].to_s)
                                                    @prio = list.text
                                                    @refresco = true
                                                 else
                                                    ventana_error(conexion) 
                                                    close()
                                                 end
                                              end
                                       end
                                    end
                                    detalles = Array.new
                                    detalles = tratar_retorno_detalle(conexion.ctdescargas_retorno_msg)
                                    detalles.each do |mostrar|
                                                      mostrar
                                    end  
                                else
                                    ventana_error(conexion)
                                    close()
                                end
                           end
                       end
########################################## BUSQUEDA #############################################################
                       def busqueda(conexion)
                              @mensaje_estado.clear do
                                 @minimo = 0
                                 @maximo = 0
                                 if conexion.ctlista_busqueda()
                                    flow do
                                      background "#464646".."#000000"
                                      para " "
                                      @cadena_para_buscar = edit_line :width => 200
                                      para " "
                                      boton_nueva_busqueda = button("Buscar") 
                                      para "Minimo ", :stroke => lightblue, :size => 10
                                      @tam_min_num = edit_line :width => 70
                                      @tam_min_text = "MBytes"
                                      list_box :items => ["Bytes", "KBytes","MBytes","GBytes"],:width => 70,
                                               :choose => "MBytes" do |tam_min|
                                               @tam_min_text = tam_min.text
                                      end
                                      para "Maximo ", :stroke => lightblue, :size => 10
                                      @tam_max_num = edit_line :width => 70
                                      @tam_min_text = "MBytes"
                                      list_box :items => ["Bytes", "KBytes","MBytes","GBytes"], :width => 70,
                                               :choose => "MBytes" do |tam_max|
                                               @tam_max_text = tam_max.text
                                      end
                                      boton_nueva_busqueda.click do
                                         @minimo = @tam_min_num.text.to_i
                                         @maximo = @tam_max_num.text.to_i
                                         if @maximo != 0
                                              case @tam_max_text
                                                  when "Bytes"
                                                       @maximo = @maximo * 1
                                                  when "KBytes"
                                                       @maximo = @maximo * 1024
                                                  when "MBytes"
                                                       @maximo = @maximo * 1024 * 1024
                                                  when "GBytes"
                                                       @maximo = @maximo * 1024 * 1024 * 1024
                                              end
                                         end
                                         if @minimo != 0
                                              case @tam_min_text
                                                  when "Bytes"
                                                        @minimo = @minimo * 1
                                                  when "KBytes"
                                                        @minimo = @minimo * 1024
                                                  when "MBytes"
                                                        @minimo = @minimo * 1024 * 1024
                                                  when "GBytes"
                                                        @minimo = @minimo * 1024 * 1024 * 1024
                                              end
                                         end
                                         if conexion.ctbusqueda(@cadena_para_buscar.text,@minimo,@maximo)
                                            @accion = "busca"
                                            @refresco = true
                                         else
                                            ventana_error(conexion)
                                            close()
                                         end
                                      end
                                      para " "
                                      boton_nuevo_enlace = button(" Ed2k ")
                                      boton_nuevo_enlace.click do
                                          titulo = "Añadir nuevo enlace Ed2k " + conexion.ctversion_retorno_msg[0].to_s
                                          window(:title => titulo.to_s[0..25],:width => 600,:height => 200) do
                                            background "#000000".."#464646"
                                            stack do
                                               flow do
                                                image "emule.gif",:width => 120, :height => 160, :margin_left => 20,:align => "center"
                                                @enlace = edit_line :width => 400, :margin_left => 10,:align => "center",:margin_top => 75
                                               end
                                               flow :margin_left => 150 do
                                                 boton_aceptar = button "     Aceptar      " 
                                                 boton_cancelar = button "    Cancelar      " 
	                                         boton_aceptar.click do
                                                     if conexion.ctdownurl(@enlace.text)
				                                                window(:title => "Aviso", :width => 400, :height => 210) do
                                                                 background "#000000".."#999999"
                                                                 flow do
                                                                    image "emule.gif",:width => 110, :height => 160, :margin_left => 10
                                                                    para "Se ha añadido la descarga...", :stroke => white,:size =>10,
                                                                    :margin_top => 60
                                                                    stack :margin => 10 do
                                                                       boton_aceptar2 = button "    Aceptar    ",:margin_left => 120
                                                                       boton_aceptar2.click do
                                                                          close()
                                                                       end  
                                                                    end
                                                                 end
                                                        end
                                                     else
                                                        window(:title => "Aviso", :width => 400, :height => 210) do
                                                                 background "#000000".."#999999"
                                                                 flow do
                                                                       image "emule.gif",:width => 110, :height => 160,:margin_top => 10
                                                                       para "No se ha añadido la descarga...", :stroke=>white,:size =>10,
                                                                       :margin_top => 90
                                                                    stack :magin => 30 do
                                                                       boton_aceptar2 = button "    Aceptar    ", :margin_left => 130
                                                                       boton_aceptar2.click do
                                                                          close()
                                                                       end
                                                                    end                                                            
                                                                 end
                                                        end
                                                     end
                                                     close()
                                                 end	
                                                 boton_cancelar.click do
                                                    close() 
                                                 end
                                               end 
                                            end
                                          end
                                      end
                                      para " "
                                      boton_nuevo_torrent = button("Bittorrent") 
                                      boton_nuevo_torrent.click do
                                          titulo = "Añadir nuevo enlace Bittorrent " + conexion.ctversion_retorno_msg[0].to_s
                                          window(:title => titulo.to_s[0..30],:width => 600,:height => 200) do
                                            background "#000000".."#464646"
                                            stack do
                                               flow do
                                                image "bittorrent_128-0001.png",:width => 120, :height => 160, :margin_left => 20,:align => "center",
                                                :margin_top => 10
                                                @enlace = edit_line :width => 400, :margin_left => 10,:align => "center",:margin_top => 75
                                               end
                                               flow :margin_left => 150 do
                                                 boton_aceptar = button "     Aceptar      " 
                                                 boton_cancelar = button "    Cancelar      " 
	                                         boton_aceptar.click do
                                                     if conexion.ctdownurl(@enlace.text)
				                             window(:title => "Aviso", :width => 400, :height => 210) do
                                                                 background "#000000".."#999999"
                                                                 flow do
                                                                    image "bittorrent_128-0001.png",:width => 110, :height => 160, :margin_left => 10,
                                                                    :margin_top => 10
                                                                    para "Se ha añadido la descarga...", :stroke => white,:size =>10,
                                                                    :margin_top => 60
                                                                    stack :margin => 10 do
                                                                       boton_aceptar2 = button "    Aceptar    ",:margin_left => 120
                                                                       boton_aceptar2.click do
                                                                          close()
                                                                       end  
                                                                    end
                                                                 end
						             end
                                                     else
				                             window(:title => "Aviso", :width => 400, :height => 210) do
                                                                 background "#000000".."#999999"
                                                                 flow do
                                                                       image "bittorrent_128-0001.png",:width => 110, :height => 160,:margin_left => 10,
                                                                       :margin_top => 10
                                                                       para "No se ha añadido la descarga...", :stroke=>white,:size =>10,
                                                                       :margin_top => 90
                                                                    stack :magin => 30 do
                                                                       boton_aceptar2 = button "    Aceptar    ", :margin_left => 130
                                                                       boton_aceptar2.click do
                                                                          close()
                                                                       end
                                                                    end                                                            
                                                                 end
						             end
                                                     end
                                                     close()
                                                 end	
                                                 boton_cancelar.click do
                                                    close() 
                                                 end
                                               end 
                                            end
                                          end

                                      end
                                    end
                                    conexion.ctlista_busqueda_retorno_msg.each do |buscado|
                                      flow do
                                         background "#464646".."#000000"
                                         buscado = buscado.gsub("CONTAINS","Contiene.: ")
                                         buscado = buscado.gsub("found","Encontrados.: ")
                                         buscado = buscado.gsub("size","Tamaño ")
                                         buscado = buscado.gsub("\["," ")
                                         buscado = buscado.gsub("\]"," ")
                                         olvidar = link "Borrar", :size => 10
                                         para olvidar
                                         para "  "
                                         enlace = link buscado.chomp.to_s, :size => 10
                                         para enlace 
                                         enlace.click do  
                                            @accion = "lista_resultados" 
                                            @refresco = true
                                            @numero = buscado
                                            @li_minimo = 0
                                            @li_maximo = 100
                                         end
                                         olvidar.click do
                                            conexion.ctver_forget(buscado[1..5])
                                            @refresco = true
                                         end
                                      end
                                    end
                                 else
                                    ventana_error(conexion)
                                    close()
                                 end
                              end
                       end
                       def lista_busqueda(conexion)
                              @mensaje_estado.clear do
                                 if conexion.ctver_resultado_busqueda(@numero[1..5])
                                       flow do
                                          background "#464646".."#000000"
                                          para "Id",:left=> 20,  :stroke => lightblue, :size => 10
                                          para "Tamaño", :left => 140, :stroke => lightblue, :size => 10
                                          para "Disponibilidad", :left=> 240, :stroke => lightblue, :size => 10
                                          para "Nombre        ", :left=> 380, :stroke => lightblue, :size => 10
                                          para "                                                    "
                                            if @li_minimo != 0
                                               retroc_100 = button("<< 100")
                                               retroc_100.click do
                                                 @refresco = true
                                                 @li_minimo -= 100
                                                 @li_maximo -= 100
                                               end
                                            else
                                               para "           "
                                            end
                                            avanza_100 = button(" 100 >>")
                                            avanza_100.click do
                                               @refresco = true
                                               @li_minimo += 100
                                               @li_maximo += 100
                                            end
                                       end
                                       i=0
                                       resultado_0 = String.new
                                       resultado_1 = String.new
                                       resultado_2 = String.new
                                       resultado_3 = String.new
                                       conexion.cver_resultado_busqueda_msg(@li_minimo,@li_maximo).each do |resultado|
                                               case i
                                                 when 0
                                                    resultado_0 = resultado.to_s.gsub(" ","")
                                                 when 1
                                                    resultado_1 = resultado.to_s
                                                 when 2
                                                    resultado_2 = resultado.to_s
                                                 when 3
                                                    resultado_3 = resultado.to_s
                                               end
                                               i += 1
                                               if i == 4 && resultado_0 != 'total'
                                                  elemento_encontrado = flow do
                                                     background "#464646".."#000000"
                                                     descargar = link resultado_0.to_s
                                                     para descargar, :left => 20, :size => 10
                                                     para resultado_1, :left => 140, :stroke => white, :size => 10
                                                     para resultado_2, :left => 240, :stroke => white, :size => 10
                                                     para resultado_3, :left => 380, :stroke => white, :size => 10
                                                     descargar.click do
                                                          titulo1 = "Confirmación... " + resultado.to_s
                                                          window(:title => titulo1,:width => 600, :height => 150) do
                                                               background "#000000".."#999999"
                                                               stack :margin_left => 20 do 
                                                                flow :margin => 15 do
                                                                 image 'warning.png', :height => 80 
                                                                 pregunta = "¿Procedemos a la descarga de...?"  
                                                                 pregunta += "\n" + titulo1.gsub("Confirmación... ","")
                                                                 para pregunta, :stroke => white, :size => 10
                                                                end
                                                               end
                                                               flow :margin_left => 170 do
			                                         boton_si = button "     SI      " 
                                                                 boton_no = button "     NO      " 
						                 boton_si.click do
                                                                    conexion.ctver_descarga(descargar.text.to_s)
                                                                    close() 
                                                                 end	
						                 boton_no.click do
                                                                    close() 
                                                                 end	 	  
 	  
                                                               end	
                                                          end
                                                     end     
                                                  end
                                                  i = 0

                                               end
                                       end
                                 else
                                       ventana_error(conexion)
                                       close()
                                 end
                              end
                           
                       end
##################################### SERVIDORES ##########################################
                       def tipo_servidor(cadena_serv)
                           encontrado_iz = false
                           encontrado_de = false
                           iz=0
                           de=0
                           while cadena_serv[iz..de] != nil && encontrado_de != true
                                 if encontrado_iz != true
                                     iz += 1
                                 end
                                 if encontrado_de != true
                                     de += 1
                                 end
                                 if cadena_serv[iz..iz] == '['
                                     encontrado_iz = true
                                     iz +=1
                                     de = iz
                                 end   
                                 if cadena_serv[de ..de] == ' ' && encontrado_iz
                                     encontrado_de = true
                                     de -= 1
                                 end
                           end
                           @siguiente_pos_tratamiento_servidores = de += 1
                           return cadena_serv[iz..de]
                       end

                       def id_servidor(cadena_serv)
                           iz = @siguiente_pos_tratamiento_servidores
                           de = @siguiente_pos_tratamiento_servidores
                           encontrado_de = false
                           while cadena_serv[iz..de] != nil && encontrado_de != true
                               de += 1
                               if cadena_serv[de..de] == ']'
                                  encontrado_de = true
                               end 
                           end
                           @siguiente_pos_tratamiento_servidores = de
                           return cadena_serv[iz..(de-1)].gsub(" ","")
                       end
                    
                       def ip_servidor(cadena_serv)
                           iz = @siguiente_pos_tratamiento_servidores
                           de = @siguiente_pos_tratamiento_servidores
                           encontrado_de = false
                           encontrado_iz = false
                           while cadena_serv[iz..de] != nil && encontrado_de != true
                                 if encontrado_iz != true
                                     iz += 1
                                 end
                                 if encontrado_de != true
                                     de += 1
                                 end
                                 if encontrado_iz == false && cadena_serv[iz..iz] =~ /\d/
                                     encontrado_iz = true
                                 end
                                 if encontrado_iz == true && cadena_serv[de..de] == ' '
                                    encontrado_de = true
                                 end
                            end
                           @siguiente_pos_tratamiento_servidores = de
                           return cadena_serv[iz..(de-1)]
                       end

                       def nombre_servidor(cadena_serv)
                           iz = @siguiente_pos_tratamiento_servidores
                           de = 0
                           encontrado_iz = false
                           while cadena_serv[iz..iz] != nil && cadena_serv[iz..iz] != ' '
                               iz += 1
                           end
                           nombre_serv = cadena_serv[iz..(iz+50)]  
                           @siguiente_pos_tratamiento_servidores = iz + 51
                           #eliminamos blancos a la derecha
                           de = nombre_serv.length
                           while nombre_serv[de..de] == ' ' && nombre_serv[de..de] != nil
                                 de -=1
                           end 
                           return nombre_serv[1..de]
                       end

                       def usuarios_servidor(cadena_serv)
                           iz = @siguiente_pos_tratamiento_servidores
                           de = @siguiente_pos_tratamiento_servidores
                           encontrado_de = false
                           encontrado_iz = false
                           while cadena_serv[iz..de] != nil && encontrado_de != true
                                 if encontrado_iz != true
                                     iz += 1
                                 end
                                 if encontrado_de != true
                                     de += 1
                                 end
                                 if encontrado_iz == false && cadena_serv[iz..iz] =~ /\d/
                                     encontrado_iz = true
                                 end
                                 if encontrado_iz == true && cadena_serv[de..de] == ' '
                                    encontrado_de = true
                                 end
                            end
                           @siguiente_pos_tratamiento_servidores = de
                           return cadena_serv[iz..(de-1)]
                       end

                       def ficheros_servidor(cadena_serv)
                           iz = @siguiente_pos_tratamiento_servidores
                           de = @siguiente_pos_tratamiento_servidores
                           encontrado_de = false
                           encontrado_iz = false
                           while cadena_serv[iz..de] != nil && encontrado_de != true
                                 if encontrado_iz != true
                                     iz += 1
                                 end
                                 if encontrado_de != true
                                     de += 1
                                 end
                                 if encontrado_iz == false && cadena_serv[iz..iz] =~ /\d/
                                     encontrado_iz = true
                                 end
                                 if encontrado_iz == true && cadena_serv[de..de] == ' '
                                    encontrado_de = true
                                 end
                            end
                           @siguiente_pos_tratamiento_servidores = de
                           return cadena_serv[iz..(de-1)]
                       end

                       def estado_servidor(cadena_serv)
                           iz = @siguiente_pos_tratamiento_servidores
                           de = @siguiente_pos_tratamiento_servidores
                           encontrado_de = false
                           encontrado_iz = false
                           while cadena_serv[de..de] != nil && encontrado_de != true
                                 if encontrado_iz != true
                                     iz += 1
                                 end
                                 if encontrado_de != true
                                     de += 1
                                 end
                                 if encontrado_iz == false && cadena_serv[iz..iz] == ':'
                                     encontrado_iz = true
                                     iz += 1
                                 end
                                 if encontrado_iz == true && cadena_serv[de..de] == nil
                                    encontrado_de = true
                                 end
                            end
                           @siguiente_pos_tratamiento_servidores = 0
                           return cadena_serv[iz..(de + 1)]
                       end


 
                       def parse_servidor(lista_servidor,conexion)
                           ver_server = String.new
                           lista_servidor.each do |servidor|
                                 if servidor =~ /\]/ 
                                    ver_server = ver_server + servidor.to_s
                                 else  
                                    if servidor =~ /Users:/
                                       ver_server = ver_server + servidor.to_s
                                       ver_server = ver_server.gsub("\n","")
                                       mostrar = true
                                    else
                                       mostrar = false
                                    end
                                 end
                                 if mostrar
                                      stack do                                   
                                        flow do  
                                           background "#464646".."#000000"                                 
                                           para tipo_servidor(ver_server), :stroke=>white, :size=>10, :left=>15
                                           servidor_id = id_servidor(ver_server)
                                           para servidor_id, :stroke=>white, :size=>10, :left=> 80
                                           para ip_servidor(ver_server), :stroke=>white, :size=>10, :left=>115
                                           para nombre_servidor(ver_server), :stroke=>white, :size=>10, :left=>260
                                           para usuarios_servidor(ver_server), :stroke=>white, :size=>10, :left=>465
                                           para ficheros_servidor(ver_server), :stroke=>white, :size=>10, :left=>535
                                           servidor_estado = estado_servidor(ver_server)
                                           para servidor_estado, :stroke=>white, :size=>10, :left=>605
                                      #####acciones posibles####
                                           if servidor_estado == "Connected"
                                                 desconecta = link "Desconectar", :size => 10
                                                 para desconecta, :left => 680 
                                                 desconecta.click do  
                                                    if conexion.ctdesconecta_server(servidor_id)
                                                    else
                                                        ventana_error(conexion)
                                                        close()
                                                    end      
                                                 end
                                           end
                                           if servidor_estado == ""
                                               conecta = link "Conectar", :size => 10
                                               para conecta, :left => 680
                                               conecta.click do
                                                   if conexion.ctconecta_server(servidor_id)
                                                   else
                                                       ventana_error(conexion)
                                                       close()
                                                   end
                                               end
                                           end
                                           borrar = link "Eliminar", :size=> 10
                                           para borrar, :left => 760
                                           borrar.click do
                                              if conexion.ctborra_server(servidor_id)
                                              else
                                                  ventana_error(conexion) 
                                                  close()
                                              end
                                           end
                                        end
                                       ver_server = ""
                                      end
                                 end                             
                          end
                       end

                       def server(conexion) 
                          if @refresco  
                             @mensaje_estatico.clear do
                                flow do
                                   background "#464646".."#000000"
                                   para "Servidores  ",:stroke => lightblue, :size => 10 
                                   boton_conectado = button "Conectados"
                                   boton_conectado.click do
                                      @muestra = "conectado"
                                   end
                                   para "  "
                                   boton_todo = button "Todos"
                                   boton_todo.click do
                                      @muestra = "todo"
                                   end
                                   para " "
                                   boton_mas = button "Conectar mas servidores"
                                   boton_mas.click do
                                      if conexion.ctconecta_server(" ")
                                      else
                                         ventana_error(conexion)
                                         close()
                                      end
                                   end
                                end
                                flow do
                                   background "#464646".."#000000"
                                   para "Red",:stroke => lightblue, :size => 10, :left=>15
                                   para "ID",:stroke => lightblue, :size => 10, :left=>80
                                   para "IP",:stroke => lightblue, :size => 10, :left=>115
                                   para "Nombre",:stroke => lightblue, :size => 10, :left=> 285
                                   para "Usuarios",:stroke => lightblue, :size => 10, :left=>465
                                   para "Ficheros",:stroke => lightblue, :size => 10, :left=>535
                                   para "Estado",:stroke => lightblue, :size => 10, :left=>605
                                   para "Acciones Permitidas",:stroke => lightblue, :size => 10,:left => 680
                                end
                             end
                             @refresco = false 
                          end
                          @mensaje_estado.clear do       
                               case @muestra
                                 when "todo"
                                    if conexion.ctlista_server()
                                       parse_servidor(conexion.cver_lista_todos_server_msg,conexion)
                                    else
                                       ventana_error(conexion) 
                                       close()
                                    end
                                 when "conectado"
                                    if conexion.ctlista_server_conectado()
                                       parse_servidor(conexion.cver_lista_server_msg,conexion)
                                    else
                                       ventana_error(conexion)
                                       close()
                                    end
                               end
                          end
                       end

                       def maximo(tabla)
                           max_valor = 0.0
                           tabla.each do |valor|
                                if max_valor < valor.to_f
                                   max_valor = valor.to_f
                                end
                           end
                           return max_valor
                       end
                       
                       def muestra_grafica(tipo,max,array_valores)
                           pos_total = 700
                           array_valores.reverse.each do |valor|
                              if max == 0
                                altura = 0
                              else  
                                altura = (valor.to_f * 100) / max
                              end
                              posicion = pos_total + 100
                              if tipo == 'descarga'
                                    fill darkgreen
                                    stroke darkgreen
                                    line(posicion,140,posicion,140 - altura,:height => 0.5)
                              else
                                    fill darkred
                                    stroke darkred
                                    line(posicion,140 + altura ,posicion,140, :height => 0.5)
                             end
                              pos_total -= 0.5
                              if pos_total == 0
                                 pos_total = 700
                              end 
                           end
                       end
                       def estadistica_estatico(conexion)
                              @mensaje_estatico.clear do

                                  flow do
                                     background "#464646".."#000000"
                                     para "Estadisticas",:stroke => lightblue, :size => 10 
                                     para " "
                                     boton_ancho = button "Ancho de Banda"
                                     boton_ancho.click do
                                        @accion = "ancho"
                                        @refresco = true
                                     end
                                     para " "
                                     boton_cliente = button "Clientes"
                                     boton_cliente.click do
                                        @accion = "cliente"
                                        @refresco = true
                                     end 
                                     para " "
                                     boton_cargas = button "Cargas"
                                     boton_cargas.click do
                                        @accion = "carga"
                                        @refresco = true
                                     end
                                  end
                              end
                       end

                       def estadistica_dinamico_ancho(conexion)
                           @mensaje_estado.clear do
                                background "#464646".."#000000"
                                stack do 

                                         copia_tiempo_est_d = Array.new
                                         copia_tiempo_est_d = @tiempo_est
                                         copia_descarga_est = Array.new
                                         copia_descarga_est = @descarga_est
                                         copia_carga_est = Array.new
                                         copia_carga_est = @carga_est


#dibujamos el marco de la grafica
                                            fill gray
                                            stroke white
                                            rect 101, 35, 701, 210
                                            max_down = maximo(copia_descarga_est)
                                            muestra_grafica('descarga',max_down,copia_descarga_est)
                                            max_up = maximo(copia_carga_est)
                                            muestra_grafica('carga',max_up,copia_carga_est)
                                            @mostrar_cero = para "0", :stroke => white, :size => 8
                                            @mostrar_max_down = para max_down.to_s, :stroke => white, :size => 8 
                                            mitad_max_down = max_down / 2 
                                            @mostrar_mitad_max_down = para mitad_max_down.to_s,  :stroke => lightblue, :size => 8 
                                            @mostrar_max_up = para max_up.to_s, :stroke => white, :size => 8
                                            mitad_max_up = max_up / 2 
                                            @mostrar_mitad_max_up = para mitad_max_up.to_s,  :stroke => lightblue, :size => 8 
                                            @mostrar_max_down.move(810,205)
                                            @mostrar_mitad_max_down.move(810,255)
                                            @mostrar_cero.move(810,303)
                                            @mostrar_mitad_max_up.move(810,355)
                                            @mostrar_max_up.move(810,405)
##mostramos las horas.
                                            tiempo0 = copia_tiempo_est_d[copia_tiempo_est_d.length - 1]
                                            hh0 = tiempo0[8..9]
                                            mm0 = tiempo0[10..11]
                                            ss0 = tiempo0[12..13]
                                            @mostrar_hora0 = para hh0 + ':'+ mm0 + ':' + ss0, :stroke => white, :size => 8
                                            @mostrar_hora0.move(775,420)

                                            if copia_tiempo_est_d.length > 233
                                               tiempo1 = copia_tiempo_est_d[copia_tiempo_est_d.length - 233]
                                               hh1 = tiempo1[8..9]
                                               mm1 = tiempo1[10..11]
                                               ss1 = tiempo1[12..13]
                                               @mostrar_hora1 = para hh1 + ':'+ mm1 + ':' + ss1, :stroke => lightblue, :size => 8
                                               @mostrar_hora1.move(658,420)
                                            end
                                            if copia_tiempo_est_d.length > 466                                            
                                               tiempo2 = copia_tiempo_est_d[copia_tiempo_est_d.length - 466]
                                               hh2 = tiempo2[8..9]
                                               mm2 = tiempo2[10..11]
                                               ss2 = tiempo2[12..13]
                                               @mostrar_hora2 = para hh2 + ':'+ mm2 + ':' + ss2, :stroke => white, :size => 8
                                               @mostrar_hora2.move(542,420)
                                            end
                                            if copia_tiempo_est_d.length > 699
                                               tiempo3 = copia_tiempo_est_d[copia_tiempo_est_d.length - 699]
                                               hh3 = tiempo3[8..9]
                                               mm3 = tiempo3[10..11]
                                               ss3 = tiempo3[12..13]
                                               @mostrar_hora3 = para hh3 + ':'+ mm3 + ':' + ss3, :stroke => lightblue, :size => 8
                                               @mostrar_hora3.move(425,420)
                                            end
                                            if copia_tiempo_est_d.length > 932
                                               tiempo4 = copia_tiempo_est_d[copia_tiempo_est_d.length - 932]
                                               hh4 = tiempo4[8..9]
                                               mm4 = tiempo4[10..11]
                                               ss4 = tiempo4[12..13]
                                               @mostrar_hora4 = para hh4 + ':'+ mm4 + ':' + ss4, :stroke => white, :size => 8
                                               @mostrar_hora4.move(308,420)
                                            end
                                            if copia_tiempo_est_d.length > 1165
                                               tiempo5 = copia_tiempo_est_d[copia_tiempo_est_d.length - 1165]
                                               hh5 = tiempo5[8..9]
                                               mm5 = tiempo5[10..11]
                                               ss5 = tiempo5[12..13]
                                               @mostrar_hora5 = para hh5 + ':'+ mm5 + ':' + ss5, :stroke => lightblue, :size => 8
                                               @mostrar_hora5.move(192,420)
                                            end
                                            if copia_tiempo_est_d.length > 1398
                                               tiempo6 = copia_tiempo_est_d[copia_tiempo_est_d.length - 1398]
                                               hh6 = tiempo6[8..9]
                                               mm6 = tiempo6[10..11]
                                               ss6 = tiempo6[12..13]
                                               @mostrar_hora6 = para hh6 + ':'+ mm6 + ':' + ss6, :stroke => white, :size => 8
                                               @mostrar_hora6.move(75,420)
                                            end
#ponemos las lineas guias para facilitar la interpretacion de la grafica.                                            
                                            stroke white
                                            line(101,140,801,140)
                                            line(568,35,568,245)
                                            line(339,35,339,245)
                                            line(100,35,100,245)
                                            line(101,35,101,245)
                                            line(801,35,801,245)
                                            stroke lightblue
                                            line(101,91,801,91)
                                            line(101,192,801,192)
                                            line(684,35,684,245)
                                            line(451,35,451,245)
                                            line(218,35,218,245)
                                end
                           end
                       end
                       def estadistica_dinamico_cliente(conexion)
                           @mensaje_estado.clear do
                                          if conexion.ctstats()
                                             @tabla_valores_estadistica = conexion.cver_valores_estadistiva_msg
                                             @tabla_valores_estadistica.each do |mensaje|
                                                  if mensaje =~ /Session/
                                                     stack do
                                                           background "#464646".."#000000"
                                                           flow do
                                                                j = 0
                                                                mensaje.split('|').each do |trozo|
                                                                     j += 1
                                                                     if j == 1
                                                                        para " "
                                                                        enlace_cliente = link trozo.chomp.to_s, :size=>10
                                                                        para enlace_cliente
                                                                        enlace_cliente.click do
                                                                            @accion = "detalle cliente"
                                                                            @trozo = trozo
                                                                            @refresco = true
                                                                        end
                                                                     end
                                                                end
                                                           end
                                                     end
                                                  end
                                             end
                                          else
                                             ventana_error(conexion)
                                             close()
                                          end
                           end
                       end


                       def estadistica_dinamico_detalle_cliente(conexion)
                           @mensaje_estado.clear do
                                   background "#464646".."#000000"
                                   @mostrar_linea = false                           
                               if conexion.ctstats()
                                   @tabla_valores_estadistica = conexion.cver_valores_estadistiva_msg
                                   @tabla_valores_estadistica.each do |linea|
                                        if linea =~ /Session/ 
                                           if linea =~ /#{@trozo.to_s}/
                                              @mostrar_linea=true 
                                              @num_linea = 1
                                           else
                                              @mostrar_linea=false
                                           end
                                        end
                                          if @mostrar_linea && !(linea =~ /-/)
                                             if linea =~ /Uptime/
                                                @num_linea = 1
                                             end
                                             if linea =~ /Total/ && !(linea =~ /Uptime/)
                                                @num_linea = 2
                                             end
                                             case @num_linea
                                                when 1
                                                 para " "
                                                 flow do
                                                    background "#999999".."#000000"
                                                    linea = linea.gsub("\|"," ")
                                                    para linea, :size=>10 , :stroke => lightblue, :left=> 20
                                                    @num_linea += 1
                                                 end
                                                when 2
                                                 flow do
                                                    background "#999999".."#000000"
                                                    posicion = 20
                                                    linea.split('|').each do |trozo|
                                                       para trozo , :size=>10 , :stroke=> lightblue, :left=> posicion
                                                       posicion += 132
                                                    end
                                                    @num_linea += 1
                                                 end
                                                else
                                                 flow do 
                                                    background "#464646".."#000000"
                                                    posicion = 20
                                                    columna=1
                                                    linea.split('|').each do |trozo|
                                                       case columna
                                                         when 1 
                                                           para trozo , :size=>10 , :stroke=> white, :left=> posicion
                                                           columna += 1
                                                           posicion += 132
                                                         when 2,5,6
                                                           trozo.split(' ').each do |palabra|
                                                              para palabra, :size=>10, :stroke=> white, :left=>posicion
                                                              posicion += 66
                                                           end
                                                           columna += 1
                                                         else
                                                           trozo.split(' ').each do |palabra|
                                                              para palabra, :size=>10, :stroke=> white, :left=>posicion
                                                              posicion += 44
                                                           end
                                                           columna += 1
                                                       end
                                                    end
                                                    @num_linea += 1
                                                 end
                                             end
                                        end
                                   end
                               else
                                   ventana_error(conexion)
                                   close()
                               end
                           end
                       end

                       def estadistica_dinamico_carga(conexion)
                           @mensaje_estado.clear do
                                          if conexion.cupstats()
                                             @tabla_valores_estadistica = conexion.cver_valores_estadistica_carga_msg
                                             i = 0
                                             @tabla_valores_estadistica.each do |mensaje|
                                               stack do
                                                background "#464646".."#000000"

                                                case i
                                                when 0
                                                    para " "
                                                  flow do
                                                    background "#999999".."#000000"
                                                    if i == 0
                                                       mensaje = mensaje.gsub("\|"," ")
                                                    end
                                                    para mensaje, :size=>10, :stroke=> lightblue
                                                  end
                                                when 1
                                                  flow do
                                                    background "#999999".."#000000"
                                                    posicion = 20
                                                    mensaje.split('|').each do |trozo|
                                                         para trozo, :size=>10, :stroke=> lightblue,:left=>posicion
                                                         posicion += 70
                                                    end
                                                  end
                                                else
                                                  flow do
                                                    background "#464646".."#000000"
                                                    posicion = 20
                                                    mensaje.split('|').each do |trozo|
                                                         para trozo, :size=>10, :stroke=> white,:left=>posicion
                                                         posicion += 70
                                                    end
                                                  end
                                                end
                                                i += 1
                                               end
                                             end
                                          end
                           end
                       end
                       def ventana_nuevo_compartido(conexion)
                                 window(:title => "Nuevo Directorio Compartido", :width => 550, :height => 300) do
                                       background "#464646".."#000000"                       
                                           flow :margin => 25 do 
                                              para "Prioridad  *",:left=> 100, :stroke => white, :size => 10
                                              @nueva_prio = edit_line :left => 250
                                           end   
                                           flow :margin => 25 do
                                              para "Directorio  *",:left=> 100, :stroke => white, :size => 10
                                              @nueva_dir = edit_line :left => 250
                                           end
                                           flow :margin => 25 do
                                              para "Estrategia  *",:left=> 100, :stroke => white, :size => 10
                                              @nueva_estrategia = edit_line :left => 250
                                           end   

                                      
                                       botonera = flow :margin_left => 100  do                                           

                                                 button " ACEPTAR  " do
                                                                  retorno =conexion.ctshare(@nueva_prio.text,@nueva_dir.text,@nueva_estrategia.text)
                                                                  if retorno
                                                                     close()
                                                                  else


        window(:title => "Fallo la conexión", :width => 750, :height => 150) do
           background "#464646".."#000000"                       
           stack :margin_left => 20 do 
               flow :margin => 15 do
                 image 'warning.png', :height => 80 
                 para "Error: " + conexion.conectatelnet_error_msg.to_s, :stroke => white,:margin => 15
                end
            end
                          
            stack :margin_left => 300 do
                 button " ACEPTAR  " do
                    close()
                 end
            end  
        end

                                                                  end
                                                 end 
                                                 para "   "      
                                                 button " CANCELAR " do
                                                         close()
                                                 end      
                                       end                 

                                 end      
                       end                	
                       
                       def ventana_nuevo_usr(conexion)
                                 window(:title => "Nuevo Usuario / Grupo", :width => 550, :height => 450) do
                                       background "#464646".."#000000"                       
                                       flow :margin => 50 do
                                           para "Seleccione Tipo:   ",:left=> 100, :stroke => white, :size => 10
                                           @tipo = "Usuario"
                                           list_box :items => ["Usuario","Grupo"],
                                                      :choose => @tipo do |list|
                                                           if list.text == "Usuario"
                                                              @user_mostrar.clear do
                                                                  flow do 
                                                                       para "Usuario  *",:left=> 100, :stroke => white, :size => 10
                                                                       @nuevo_usuario = edit_line :left => 250
                                                                  end
                                                                  flow do 
                                                                       para "Contraseña  *",:left=> 100, :stroke => white, :size => 10
                                                                       @nueva_pass = edit_line :secret => true, :left => 250
                                                                  end
                                                                  flow do 
                                                                       para "Conf. Contraseña  *",:left=> 100, :stroke => white, :size => 10
                                                                       @conf_pass = edit_line :secret => true, :left => 250
                                                                  end
                                                                  flow do 
                                                                       para "Grupo",:left=> 100, :stroke => white, :size => 10
                                                                       @nuevo_grupo = edit_line :left => 250
                                                                  end
                                                                  flow do 
                                                                       para "Commit Dir",:left=> 100, :stroke => white, :size => 10
                                                                       @nuevo_commit = edit_line :left => 250
                                                                 end
                                                                  flow do 
                                                                       para "Mail",:left=> 100, :stroke => white, :size => 10
                                                                       @nuevo_correo = edit_line :left => 250
                                                                  end
                                                                  flow do 
                                                                      para "Max Dls",:left=> 100, :stroke => white, :size => 10
                                                                       @nuevo_max = edit_line :left => 250
                                                                  end
                                                              end   
                                                           else
                                                              @user_mostrar.clear do
                                                                  @tipo = "Grupo"
                                                                  flow do 
                                                                       para "Grupo  *",:left=> 100, :stroke => white, :size => 10
                                                                       @nuevo_grupo = edit_line :left => 250
                                                                       para " *", :stroke => white, :size => 10
                                                                  end
                                                                  flow do 
                                                                       para "Administrador  *",:left=> 100, :stroke => white, :size => 10
                                                                       valor_adm_ext = "Falso"
                                                                       @valor_adm = "false"
                                                                       list_box :items => ["Verdadero","Falso"],:left => 250,
                                                                       :choose => valor_adm_ext do |valor|
                                                                           if valor.text == "Falso" 
                                                                               @valor_adm = "false"
                                                                           else
                                                                               @valor_adm = "true"
                                                                           end
                                                                         end    
                                                                  end
                                                              end    
                                                           end
                                          end
                                       end
                                       @user_mostrar = stack
  
                                       botonera = flow :margin_botton => 50  do                                           

                                                 button " ACEPTAR  " do
                                                          if @tipo.to_s =~ /Usuario/
                                                                  retorno =conexion.ctuseradd(@nuevo_usuario.text,@nueva_pass.text,@conf_pass.text ,@nuevo_grupo.text ,@nuevo_commit.text ,@nuevo_correo.text ,@nuevo_max.text)
                                                                  if retorno
                                                                     close()
                                                                  else


        window(:title => "Fallo la conexión", :width => 750, :height => 150) do
           background "#464646".."#000000"                       
           stack :margin_left => 20 do 
               flow :margin => 15 do
                 image 'warning.png', :height => 80 
                 para "Error: " + conexion.conectatelnet_error_msg.to_s, :stroke => white,:margin => 15
                end
            end
                          
            stack :margin_left => 300 do
                 button " ACEPTAR  " do
                    close()
                 end
            end  
        end

                                                                  end
                                                        end
                                                        if  @tipo.to_s =~ /Grupo/       

                                                             retorno = conexion.ctgroupadd(@nuevo_grupo.text,@valor_adm)    
                                                             if retorno
                                                                close()
                                                             else  

        window(:title => "Fallo la conexión", :width => 750, :height => 150) do
           background "#464646".."#000000"                       
           stack :margin_left => 20 do 
               flow :margin => 15 do
                 image 'warning.png', :height => 80 
                 para "Error: " + conexion.conectatelnet_error_msg.to_s, :stroke => white,:margin => 15
                end
            end
                          
            stack :margin_left => 300 do
                 button " ACEPTAR  " do
                    close()
                 end
            end  
        end

                                                             end  
                                                          end
                                                 end
                                                 para "   "      
                                                 button " CANCELAR " do
                                                         close()
                                                 end
                                       end
                                       botonera.move(150,400)                                               
                                     end
                                     return true
                       end

                       def ventana_modif_usr(conexion,user)
                                 titulo = "Modificar Usuario" + user
                                 window(:title => titulo[0..16], :width => 750, :height => 350) do
                                       background "#464646".."#000000"                       
                              	       user = titulo[18..80]
                               	       user = user.gsub("  ","")

                                       flow :margin_top => 50 do
                                              flow :margin => 10 do 
                                                 para "Grupo ",:left=> 50, :stroke => white, :size => 10
                                                 mod_grupo = edit_line :left=>150
                                                 para "   "
                                                 button "     Nuevo    ", :left=> 400 do
                                                 	       retorno = conexion.ctusergroupadd(user,mod_grupo.text.to_s)
                                                 	       if retorno
                                                              close()
                                                 	       else
                                                 	       
        window(:title => "Fallo la conexión", :width => 750, :height => 150) do
           background "#464646".."#000000"                       
           stack :margin_left => 20 do 
               flow :margin => 15 do
                 image 'warning.png', :height => 80 
                 para "Error: " + conexion.conectatelnet_error_msg.to_s, :stroke => white,:margin => 15
                end
            end
                          
            stack :margin_left => 300 do
                 button " ACEPTAR  " do
                    close()
                 end
            end  
        end
                                                         end
                                                 end
                                                 para "   "      
                                                 button " Eliminar ", :left=> 600 do
                                                 	       retorno = conexion.ctusergroupdel(user.to_s,mod_grupo.text.to_s)
                                                 	       if retorno
                                                            close()
                                                         else
                                                         
        window(:title => "Fallo la conexión", :width => 750, :height => 150) do
           background "#464646".."#000000"                       
           stack :margin_left => 20 do 
               flow :margin => 15 do
                 image 'warning.png', :height => 80 
                 para "Error: " + conexion.conectatelnet_error_msg.to_s, :stroke => white,:margin => 15
                end
            end
                          
            stack :margin_left => 300 do
                 button " ACEPTAR  " do
                    close()
                 end
            end  
        end

                                                         
                                                         end
                                                 end
                                              end
                                              flow :margin => 10 do 
                                                 para "Dgroup ",:left=> 50, :stroke => white, :size => 10 
                                                 mod_dgrupo = edit_line :left=>150
                                                 para "   "      
                                                 button " Cambiar a... ", :left=> 400 do
                                                 	     retorno = conexion.ctuserdgroup(user.to_s,mod_dgrupo.text.to_s)
                                                 	     if retorno
                                                         close()
                                                       else  
                                                       
                                                                                                                
        window(:title => "Fallo la conexión", :width => 750, :height => 150) do
           background "#464646".."#000000"                       
           stack :margin_left => 20 do 
               flow :margin => 15 do
                 image 'warning.png', :height => 80 
                 para "Error: " + conexion.conectatelnet_error_msg.to_s, :stroke => white,:margin => 15
                end
            end
                          
            stack :margin_left => 300 do
                 button " ACEPTAR  " do
                    close()
                 end
            end  
        end

                                                       
                                                       end  
                                                 end
                                               end
                                               flow :margin => 10 do 
                                                 para "Email ",:left=> 50, :stroke => white, :size => 10 
                                                 mod_email = edit_line :left=>150
                                                 para "   "      
                                                 button " Cambiar a... ", :left=> 400 do
                                                 	     retorno = conexion.ctusermail(user.to_s,mod_email.text.to_s)
                                                	     
                                                 	     if retorno
                                                         close()
                                                       else  
                                                       
        window(:title => "Fallo la conexión", :width => 750, :height => 150) do
           background "#464646".."#000000"                       
           stack :margin_left => 20 do 
               flow :margin => 15 do
                 image 'warning.png', :height => 80 
                 para "Error: " + conexion.conectatelnet_error_msg.to_s, :stroke => white,:margin => 15
                end
            end
                          
            stack :margin_left => 300 do
                 button " ACEPTAR  " do
                    close()
                 end
            end  
        end
                                                       
                                                       
                                                       end
                                                 end
                                              end
                                               flow :margin => 10 do 
                                                 para "Commit Dir ",:left=> 50, :stroke => white, :size => 10 
                                                 mod_commit = edit_line :left=>150
                                                 para "   "      
                                                 button " Cambiar a... ", :left=> 400 do
                                                 	     retorno = conexion.ctusercommit(user.to_s,mod_commit.text.to_s)
                                                	     
                                                 	     if retorno
                                                         close()
                                                       else  
                                                       
        window(:title => "Fallo la conexión", :width => 750, :height => 150) do
           background "#464646".."#000000"                       
           stack :margin_left => 20 do 
               flow :margin => 15 do
                 image 'warning.png', :height => 80 
                 para "Error: " + conexion.conectatelnet_error_msg.to_s, :stroke => white,:margin => 15
                end
            end
                          
            stack :margin_left => 300 do
                 button " ACEPTAR  " do
                    close()
                 end
            end  
        end
                                                       
                                                       
                                                       end
                                                 end
                                               end
                                               flow :margin => 10 do 
                                                 para "Max dls ",:left=> 50, :stroke => white, :size => 10 
                                                 mod_maxdls = edit_line :left=>150
                                                 para "   "      
                                                 button " Cambiar a... ", :left=> 400 do
                                                 	     retorno = conexion.ctuserdls(user.to_s,mod_maxdls.text.to_s)
                                                	     
                                                 	     if retorno
                                                         close()
                                                       else  
                                                       
        window(:title => "Fallo la conexión", :width => 750, :height => 150) do
           background "#464646".."#000000"                       
           stack :margin_left => 20 do 
               flow :margin => 15 do
                 image 'warning.png', :height => 80 
                 para "Error: " + conexion.conectatelnet_error_msg.to_s, :stroke => white,:margin => 15
                end
            end
                          
            stack :margin_left => 300 do
                 button " ACEPTAR  " do
                    close()
                 end
            end  
        end
                                                       
                                                       
                                                       end
                                                 end
                                              end


                                       end
                                 end        
                       end

                       def ventana_modif_grupo(conexion,grupo)
                                 titulo = "Modificar Grupo  " + grupo                      
                                 window(:title => titulo[0..16], :width => 650, :height => 150) do
                                       background "#464646".."#000000"                       
                                       grupo = titulo[18..80] 
                                       flow :margin => 50 do
                                                para "Administrador   ",:left=> 100, :stroke => white, :size => 10
                                                valor_adm_ext = "Falso"
                                                list_box :items => ["Verdadero","Falso"],
                                                            :choose => valor_adm_ext do |valor|
                                                                    if valor.text == "Falso"
                                                                               valor_adm_ext = "false"
                                                                    else
                                                                               valor_adm_ext = "true"
                                                                    end
                                                 end    
                                                 para "     "                 
                                                 button " Modificar " do
                                                 	     retorno = conexion.ctgroupadmin(grupo.to_s,valor_adm_ext.to_s)
                                                	     
                                                 	     if retorno
                                                         close()
                                                       else  
                                                       
        window(:title => "Fallo la conexión", :width => 750, :height => 150) do
           background "#464646".."#000000"                       
           stack :margin_left => 20 do 
               flow :margin => 15 do
                 image 'warning.png', :height => 80 
                 para "Error: " + conexion.conectatelnet_error_msg.to_s, :stroke => white,:margin => 15
                end
            end
                          
            stack :margin_left => 300 do
                 button " ACEPTAR  " do
                    close()
                 end
            end  
        end
                                                       
                                                       
                                                       end                                                 	       
                                                end         
                                       end
                                 end        
                       end

                       def ventana_del_usr(conexion,user)
                                         window(:title => "Confirmación...", :width => 500, :height => 150) do
                                             background "#000000".."#999999"
                                             stack :margin_left => 20 do 
                                                flow :margin => 15 do
                                                      image 'warning.png', :height => 80 
                                                      para "¿Eliminamos ese usuario?", :size=> 10,
                                                      :stroke => white,:margin_top => 20,:margin_left => 35
                                                end
                                             end
                                             flow :margin_left => 125 do
                                                  button "     SI      " do
                                                       if conexion.ctuserdel(user)
                                                          close()
                                                       else  
        window(:title => "Fallo la conexión", :width => 750, :height => 150) do
           background "#464646".."#000000"                       
           stack :margin_left => 20 do 
               flow :margin => 15 do
                 image 'warning.png', :height => 80 
                 para "Error: " + conexion.conectatelnet_error_msg.to_s, :stroke => white,:margin => 15
                end
            end
                          
            stack :margin_left => 300 do
                 button " ACEPTAR  " do
                    close()
                 end
            end  
        end
                                                       end  
                                                         
			                                                 close()
			                                            end
						                                      button "     NO      " do
                                                       close() 
                                                  end	 	  
                                              end	
                                          end

                       end  


                       def ventana_del_grupo(conexion,grupo)
                                         window(:title => "Confirmación...", :width => 500, :height => 150) do
                                             background "#000000".."#999999"
                                             stack :margin_left => 20 do 
                                                flow :margin => 15 do
                                                      image 'warning.png', :height => 80 
                                                      para "¿Eliminamos ese grupo?", :size=> 10,
                                                      :stroke => white,:margin_top => 20,:margin_left => 35
                                                end
                                             end
                                             flow :margin_left => 125 do
                                                  button "     SI      " do
                                                       if conexion.ctgroupdel(grupo)
                                                          close()
                                                       else  
        window(:title => "Fallo la conexión", :width => 750, :height => 150) do
           background "#464646".."#000000"                       
           stack :margin_left => 20 do 
               flow :margin => 15 do
                 image 'warning.png', :height => 80 
                 para "Error: " + conexion.conectatelnet_error_msg.to_s, :stroke => white,:margin => 15
                end
            end
                          
            stack :margin_left => 300 do
                 button " ACEPTAR  " do
                    close()
                 end
            end  
        end
                                                       end  
			                                                 close()
			                                            end
						                                      button "     NO      " do
                                                       close() 
                                                  end	 	  
                                              end	
                                          end
                       end  


                       def ventana_consola(conexion)
                           window(:title => "Consola", :width => 800, :height => 600) do
                            background "#464646".."#000000"
                            stack do
                             para " "
                             flow do
                               para "             Comando:  ", :stroke => lightblue, :size => 10
                               comando = edit_line
                               para "  "
                               button "Ejecutar" do
                                   if conexion.ctany(comando.text)
                                      @resultado.clear do 
                                              conexion.cver_valores_any_msg.each do |salida|
                                                      para salida, :stroke => white, :size=> 10,:font => 'Monospace 13px'
                                              end
                                      end
                                   else
        window(:title => "Fallo la conexión", :width => 750, :height => 150) do
           background "#464646".."#000000"                       
           stack :margin_left => 20 do 
               flow :margin => 15 do
                 image 'warning.png', :height => 80 
                 para "Error: " + conexion.conectatelnet_error_msg.to_s, :stroke => white,:margin => 15
                end
            end
                          
            stack :margin_left => 300 do
                 button " ACEPTAR  " do
                    close()
                 end
            end  
        end
                                   end
                               end
                               para "  "
                               button "Salir" do 
                                   close
                               end    
                              end # final flow
                               stack do
                                  background "#464646".."#000000"
                                  para ""
                               end
                               @resultado = stack 
                               animate(2) do
                                 @resultado
                               end
                             end #final stack
                           end
                       end
                                        
                       def opciones_estatico(conexion)
                              @mensaje_estatico.clear do
                                stack do
                                  flow do
                                     background "#464646".."#000000"
                                     para @mensaje_opt, :size=>10, :stroke=>lightblue
                                            para "     "
                                            button " Opciones  " do
                                               @mensaje_opt = "Opciones"
                                               @accion = "opciones"
                                               @refresco = true

                                            end
                                            para " "
                                            button " Usuarios  " do
                                                @mensaje_opt = "Usuarios"
                                                @accion = "usuarios"
                                                @refresco = true
                                            end
                                            para " "
                                            button " Compartidos  " do
                                               @mensaje_opt = "Compartidos"
                                               @accion = "compartido"
                                               @refresco = true

                                            end  
                                            if @accion == "usuarios"
                                               para "                            "
                                               button " Nuevo Usuario/Grupo" do 
                                                    if ventana_nuevo_usr(conexion)
                                                         @refresco = true
                                                         @accion = "usuarios"
                                                    end
                                               end
                                            end
                                            if @accion == "compartido"
                                               para "                            "
                                               button " Nuevo Compartido" do 
                                                    if ventana_nuevo_compartido(conexion)
                                                       @refresco = true               
                                                       @accion = "compartido"
                                                    end
                                               end
                                            end
                                            if @accion == "opciones"
                                               para "                            "
                                               button "    Consola    " do
                                                   ventana_consola(conexion)
                                               end
                                            end
                                  end
                                 end         
                               
                              end
                       end
                      
                       def mostrar_opciones(conexion,inicial,final,array)
                          @mensaje_estado.clear do
                           stack do
                              background "#464646".."#000000"
                              pos = 0
                              i = inicial
                              if final == 9999
                                 final = array.length - 1
                              end
                              while i <= final
                                trozox = 0
                                partex = 0
                                cadena = array[i].chomp.to_s
                                cadena.split('[').each do |trozo|
                                   if trozox == 1
                                      trozo.split(']').each do |parte|
                                         if partex == 0
                                            @nom_opcion = parte.to_s
                                         end
                                         if partex == 1
                                            @valor_opcion = parte.gsub("= ","")
                                         end
                                         partex += 1
                                      end
                                   end
                                   trozox += 1
                                end

                                flow do
                                   background "#464646".."#000000"
                                   para "     "
                                   local_nombre = @nom_opcion
                                   local_valor = @valor_opcion
                                   para local_nombre, :size =>10, :stroke =>white
                                   caja_texto = edit_line(local_valor)
                                   caja_texto.move(300,5)
                                   boton_aplica_cambios = button "Aplicar Cambios"
                                   boton_aplica_cambios.move(700,5)
                                   boton_aplica_cambios.click do
                                       titulocambio = Array.new
                                       titulocambio[0] = "Aviso " 
                                       titulocambio[1] = local_nombre 
                                       titulocambio[2] = caja_texto.text 
                                       titulocambio[3] = conexion.ctversion_retorno_msg[0].to_s
                  		                 window(:title => titulocambio[0], :width => 500, :height => 190) do
                                                    if conexion.ctestblece_opcion(titulocambio[1],titulocambio[2])
                                                          msg = "Se ha aplicado adecuadamente el cambio.\n" 
                                                    else
                                                          msg = "No se ha podido aplicar el cambio.\n Posiblemente el valor no es correcto.\n"
                                                    end
                                                    background "#000000".."#999999"
                                                    stack :margin_left => 20 do 
                                                     flow :margin => 15 do
                                                        image 'warning.png', :height => 80 
                                                        para msg, :stroke => white, :margin => 15
                                                     end
                                                    end
                          
                                                    stack :margin_left => 200 do
                                                          button " ACEPTAR  " do
                                                               close()
                                                          end
                                                    end  
						                           end	
                                    end  
                                end

                                i += 1
                                pos += 1
                              end
                           end
                          end
                       end

                       def opciones_dinamico(conexion)
                         if @refresco
                           @refresco = false
                            @mensaje_estado.clear do
                                 if conexion.ctsecciones_lista
                                     @lista_secciones = Array.new
                                     @lista_secciones = conexion.cver_valores_secciones_msg
                                     @lista_secciones.each do |valor2|
                                         stack do
                                              background "#464646".."#000000"
                                              enlace = link valor2.to_s
                                              para enlace, :size => 10 
                                              enlace.click do 
                                                if conexion.ctsecciones_grupos(valor2,@lista_secciones)
                                                    cadena_enlace = conexion.cver_valores_secciones_num_msg
                                                    i = 0
                                                    cadena_enlace.split('iii').each do |valor|
                                                        if i == 1 
                                                           @pos_inicial = valor.to_i
                                                        end
                                                        if i == 2
                                                           @pos_final = valor.to_i
                                                        end
                                                        i += 1
                                                    end
                                                      if conexion.ctopciones()
                                                         @opciones = Array.new
                                                         @opciones = conexion.cver_valores_opciones_msg
                                                      else   
                                                         ventana_error(conexion)
                                                        close()
                                                      end   
                                                      @refresco = true
                                                      @accion = "detalle seccion"
                                                else  
                                                  ventana_error(conexion)
                                                  close()
                                                end
                                              end
                                         end
                                     end
                                 else    
                                   ventana_error(conexion)
                                   close()
                                 end
                            end
                         end
                         
                       end
                       
                       def mostrar_usuarios(conexion)
                            @mensaje_estado.clear do
                                if conexion.ctusers
                                     @lista_usuarios = Array.new
                                     @lista_usuarios = conexion.cver_valores_users_msg
                                     ind_grupo = 0
                                     @lista_usuarios.each do |valor|
                                         stack do
                                           background "#464646".."#000000"
                                           if (valor =~ /User/ && valor =~ /Admin/ && valor =~ /Groups/ && valor =~ /Dgroup/) ||
                                              (valor =~ /Group/ && valor =~ /Admin/ && valor =~ /Members/ && valor =~ /Downloads/)
                                              para valor.chomp.to_s, :stroke => lightblue, :size => 10, :font => 'Monospace 13px'
                                           else 
                                              flow do                                              
                                                  para valor.chomp.to_s, :stroke => white, :size => 10, :font => 'Monospace 13px'
                                                  grupo = ""
                                                  user = ""
                                                  if valor.length > 1 
                                                      para "        "
                                                      i = 0
                                                      identificador = ''
                                                      valor.chomp.to_s.split(' ').each do |palabra|
                                                          if i == 0
                                                             identificador = palabra
                                                          end  
                                                          i += 1
                                                      end  
                                                      titulo_enlace_mod = " Modificar " + ind_grupo.to_s + identificador
                                                      enlace_modificar = link titulo_enlace_mod[0,10]
                                                      para enlace_modificar, :size => 10 
                                                      enlace_modificar.click do 
                                                          if titulo_enlace_mod[11,1] != '0'
                                                            ventana_modif_grupo(conexion,titulo_enlace_mod[11,80])
                                                          else
                                                            ventana_modif_usr(conexion,titulo_enlace_mod[11,80])
                                                          end  
                                                      end
                                                      para "        "
                                                      titulo_enlace_del = " Eliminar " + ind_grupo.to_s + identificador
                                                      enlace_del = link titulo_enlace_del[0,9]
                                                      para enlace_del, :size => 10
                                                      enlace_del.click do
                                       
                                                          if titulo_enlace_del[10,1] != '0'
                                                            ventana_del_grupo(conexion,titulo_enlace_del[11,80])
                                                          else
                                                            ventana_del_usr(conexion,titulo_enlace_del[11,80])
                                                          end  
                                                      end
                                                  else
                                                    ind_grupo += 1                                                       
                                                  end    
                                              end
                                           end   
                                         end
                                     end 
                                else
                                   ventana_error(conexion)
                                   close()
                            end
                         end     
                       end
                       
                       def ventana_del_compartido(conexion,dir)
                                         window(:title => "Confirmación...", :width => 500, :height => 150) do
                                             background "#000000".."#999999"
                                             stack :margin_left => 20 do 
                                                flow :margin => 15 do
                                                      image 'warning.png', :height => 80 
                                                      para "¿Eliminamos ese Compartido?", :size=> 10,
                                                      :stroke => white,:margin_top => 20,:margin_left => 35
                                                end
                                             end
                                             flow :margin_left => 125 do
                                                  button "     SI      " do
                                                       if conexion.ctunshare(dir)
                                                          close()
                                                       else  
        window(:title => "Fallo la conexión", :width => 750, :height => 150) do
           background "#464646".."#000000"                       
           stack :margin_left => 20 do 
               flow :margin => 15 do
                 image 'warning.png', :height => 80 
                 para "Error: " + conexion.conectatelnet_error_msg.to_s, :stroke => white,:margin => 15
                end
            end
                          
            stack :margin_left => 300 do
                 button " ACEPTAR  " do
                    close()
                 end
            end  
        end
                                                       end  
			                                                 close()
			                                            end
						                                      button "     NO      " do
                                                       close() 
                                                  end	 	  
                                              end	
                                          end
                       end  

                       def mostrar_compartido(conexion)
                            @mensaje_estado.clear do
                               if conexion.ctshares()
                                  conexion.cver_valores_shares_msg.each do |mostrar|
                                      flow do
                                        background "#464646".."#000000"
                                        if mostrar =~ /header/
                                           para "Priority", :stroke => lightblue, :size=>10, :left => 100
                                           para "Dir",:stroke => lightblue, :size=>10, :left => 150
                                           para "Strategy",:stroke => lightblue, :size=>10, :left => 600
                                        else
                                          i = 0
                                          mostrar.split(' ').each do |palabra|
                                            if i==0
                                               prio = palabra
                                               para prio.to_s, :stroke => white , :size=> 10, :left => 100
                                            end
                                            if i==1
                                               @dir = palabra
                                               para @dir.to_s, :stroke => white , :size=> 10, :left => 150
                                            end
                                            if i==2
                                               estra = palabra
                                               para estra.to_s, :stroke => white , :size=> 10, :left => 600
                                            end
                                            i += 1
                                          end
                                          titulo_enlace_share = "Dejar de compartir... " + @dir.to_s
                                          enlace_share = link titulo_enlace_share[0,22]
                                          para enlace_share, :size => 10, :left => 750
                                          enlace_share.click do
                                                 ventana_del_compartido(conexion,titulo_enlace_share[22,80].to_s)
                                          end
                                        end
                                      end
                                  end
                               else
                                   ventana_error(conexion)
                                   close()
                               end
                            end
                       end

                       def mostrar_creditos()
                          @mensaje_estatico.clear do
                          	 para ""
                          end
                          @mensaje_estado.clear do
                         	   para "RMLDONKEY 0.1", :stroke => darkred, :size => 25, :left => 285
                         	   para "Ruby Shoes GUI for mldonkey", :stroke => lightblue, :size => 15, :left => 285
                         	   para "http://the-shoebox.org/", :stroke => lightblue, :size => 15, :left => 305
                         	   para "This software is publish", :stroke => white, :size => 10, :left=> 330
                         	   para "under the terms of ", :stroke => white, :size => 10, :left => 345                         	   
                         	   para "GNU Public Licence.", :stroke => white, :size => 10, :left => 340
                         	   para "Copyright 2009 Manuel Ramos Caro", :stroke => white, :size => 10, :left => 295
                         	   para "Contact: manuelramoscaro@yahoo.es", :stroke => white, :size => 10, :left => 295
                          end
                       end


                          @mensaje_estatico = flow
                          @mensaje_estado = stack
                          mensaje(conexion)
                          animate(1) do 
                             case @accion 
                               when "inicial" 
                                 mensaje(conexion)
                               when "descarga"
                                 @mensaje_estatico.clear
                                 if @tasa_refresco == 2
                                    mensaje_descargas(conexion)
                                    @tasa_refresco = 0
                                 else
                                    @tasa_refresco += 1
                                 end
                               when "detalle"
                                 @mensaje_estatico.clear
                                 if @refresco
                                    @refresco = false
                                    detalle_descarga(conexion)
                                 end
                               when "busca"
                                 @mensaje_estatico.clear
                                 if @refresco
                                    @refresco = false
                                    busqueda(conexion)
                                 end
                               when "lista_resultados"
                                 @mensaje_estatico.clear
                                 if @refresco
                                    @refresco = false
                                    lista_busqueda(conexion)
                                 end
                               when "server"  
                                     server(conexion)
                               when "estadistica", "ancho"
                                 if @refresco
                                    estadistica_estatico(conexion)
                                    @refresco = false
                                 end
                                    estadistica_dinamico_ancho(conexion)
                               when "cliente"
                                 if @refresco
                                    estadistica_estatico(conexion)
                                    @refresco = false
                                 end
                                    estadistica_dinamico_cliente(conexion)
                               when "carga"
                                 if @refresco
                                    estadistica_estatico(conexion)
                                    @refresco = false
                                 end
                                    estadistica_dinamico_carga(conexion)
                               when "detalle cliente"
                                 if @refresco
                                    estadistica_estatico(conexion)
                                    @refresco = false
                                 end
                                    estadistica_dinamico_detalle_cliente(conexion)
                               when "opciones"
                                 if @refresco
                                    opciones_estatico(conexion)
                                 end
                                 opciones_dinamico(conexion)
                               when "detalle seccion"                                        
                                 if @refresco
                                    opciones_estatico(conexion)
                                    mostrar_opciones(conexion,@pos_inicial,@pos_final,@opciones)
                                    @refresco = false
                                 end
                               when "usuarios"
                                 if @refresco
                                    opciones_estatico(conexion)
                                    @refresco = false
                                 end                                   
                                 mostrar_usuarios(conexion) 
                               when "compartido"
                                 if @refresco
                                    opciones_estatico(conexion)
                                    @refresco = false
                                 end                                   
                                 mostrar_compartido(conexion)
                               when "ayuda"
                                 if @refresco
                                    mostrar_creditos()
                                    @refresco = false
                                 end
                             end
                          end
                          

############################## MENSAJE DE ESTADO INICIAL FIN##############################################
                   end
####################################### VENTANA CONEXION FIN    ########################################
                end 
            end

            button "   Cancelar   " do  
               @ip.text=''
               @puerto.text=''
               @usuario.text = ''
               @contrasena.text = ''
            end
        end
end
############################### VENTANA DE LOGIN FIN #######################################################

