#    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'
############################### VENTANA DE LOGIN INICIO ####################################################
     def ventana_error(conexion)
        window(:title => "Connection Failure", :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 "   OK   " do
                    close()
                 end
            end  
        end
     end
Shoes.app(:title => "Rmldonkey - Connection", :width => 340, :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 "Server        ", :stroke => white, :size => 10   
             @ip = edit_line :left=> 80     
         end

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

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

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

        flow :margin => 10 do
             button "      Enter       " 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 => "Connection Failure", :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 "    OK    " do
                    close()
                 end
            end  
        end

 ###################################### VENTANA FALLO CONEXION FIN #####################################
                else
####################################### VENTANA CONEXION INICIO ########################################
                   control_login = conexion.ctversion
                   @cambio_op_realizado = "n"
                   @titulo = "Connected to " + @ip.text + " - Client Version     " + conexion.ctversion_retorno_msg[0].to_s
                   window(:title => @titulo.to_s, :width => 900, :heigth => 900)  do
                       background "#000000".."#464646"
                       @principal_stack = stack 
                       @principal_stack.clear do
                       @accion = "inicial"
                       flow do
                          background "#000000".."#464646"
                          boton_descargas = image "descargas.gif",:width => 80, :height => 80, :left => (self.width/2 - 300) +  65 * 1, :align => "center"
                          boton_descargas.click do 
                                                     @accion = "descarga" 
                                                     @tasa_refresco = 2
                          end   
		          boton_buscar = image "buscar.gif",:width => 80, :height => 80, :left => (self.width/2 - 300) + 65 * 2,:align => "center"
                          boton_buscar.click do 
                                                     @accion = "busca" 
                                                     @refresco = true
                          end  
		          boton_buscar = image "servers.gif",:width => 80, :height => 80, :left => (self.width/2 - 300) + 65 * 3,:align => "center"
                          boton_buscar.click do 
                                                     @muestra = "conectado"
                                                     @accion = "server" 
                                                     @refresco = true                                
                          end  
		          boton_buscar = image "salir.gif",:width => 80, :height => 80,:left => (self.width/2 - 300) + 65 * 7, :align => "center"
                          boton_buscar.click do 
				                  window(:title => "Confirmation...", :width => 500, :height => 150) do
                                                  background "#000000".."#999999"
                                                  stack :margin_left => 20 do 
                                                    flow :margin => 15 do
                                                        image 'warning.png', :height => 80 
                                                        para "Has been pressed out. Are you sure?", :stroke => white,:margin_top => 20,
                                                        :size=> 10
                                                    end
                                                  end
                                                  flow :margin_left => 125 do
			                              button "     YES     " do
			                                exit()
			                              end
						      button "     NO      " do
                                                        close() 
                                                      end	 	    
 
						  end	
                                                  end
                           end  
		          boton_buscar = image "ayuda.gif",:width => 80, :height => 80,:left => (self.width/2 - 300) + 65 * 6, :align => "center"
                          boton_buscar.click do 
                          	
						                         @accion = "ayuda"
						                         @refresco = true
                           end  
		          boton_buscar = image "configuracion.gif",:width => 80, :height => 80,:left => (self.width/2 - 300) + 65 * 5, :align => "center"
                          boton_buscar.click do 
                                                     @accion = "opciones"
                                                     @refresco = true
                                                     @mensaje_opt = "Opciones"
                          end  
                          boton_buscar = image "estadisticas.gif",:width => 80, :height => 80,:left => (self.width/2 - 300) + 65 * 4, :align => "center"
                          boton_buscar.click do 
                                                     @accion = "estadistica"
                                                     @refresco = true
                          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:","Downloading:")
                                   mensaje = mensaje.gsub("Up:","Uploading:")
                                  # 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 < 700
                                       @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 >= 700
                                       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 => "Connection Failure", :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 "    OK    " 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 "Low "
    when "-20"
       return "Very low"
    when "10"
       return "High"
    when "20"
       return "Very High"
    else
       return prio  
    end
end
def prioridad_a_numerica(prio)
    case prio
    when "Normal"
        return 0
    when "Low "
        return -10
    when "Very Low"
        return -20
    when "High"
        return 10
    when "Very High"
        return 20
    else
        return prio.to_i
    end
end



############################## MENSAJE DE ESTADO INICIAL INICIO##############################################
                       def mensaje(conexion)
		         @mensaje_estatico.clear do 
                             background "#000000".."#464646"
                             banner "Connected to Mldonkey", :stroke => black, :left => 120, :top => 245
                             banner "Connected to Mldonkey", :stroke => darkred, :left => 115, :top => 240
                         end
                       end
############################# LISTA DE DESCARGAS ############################################################
                       def mensaje_descargas(conexion)
                         @mensaje_estado.clear do 
                           if conexion.ctdescargas("")
                             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 "Net", :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 "File Name", :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 "Downloading", :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 "Priority", :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 "Status", :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 "Comment/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 "Probable name", :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_estatico.clear do
                                  if conexion.ctdescargas(@numero[3..5])
                                    flow do
                                       background "#464646".."#000000"
                                       para "Actions :   ",:left=> 95,  :stroke => lightblue, :size => 10
                                       if @pausa
                                          boton_reanudar = button("Resume") 
                                          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(" Pause ") 
                                          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("Cancel")
                                       boton_cancelar.click do
                                        if conexion.ctdescarga_cancel(@numero[3..5].to_s)
                                          window(:title => "Confirmation...", :width => 500, :height => 150) do
                                             background "#000000".."#999999"
                                             stack :margin_left => 20 do 
                                                flow :margin => 15 do
                                                      image 'warning.png', :height => 80 
                                                      para "Delete the download?", :size=> 10,
                                                      :stroke => white,:margin_top => 20,:margin_left => 35
                                                end
                                             end
                                             flow :margin_left => 125 do
                                                  button "     YES     " 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("Resume All") 
                                       boton_reanudar_todo.click do
                                           if conexion.ctdescarga_resume("all")
                                              @accion = "descarga"
                                           else
                                              ventana_error(conexion)
                                              close()
                                           end
                                       end
                                       boton_pausar_todo = button("Pause All") 
                                       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","Very High","High","Very Low","Low "],
                                                :choose => @prio do |list| 
                                           case list.text
                                             when "Normal"
                                                   valor_deseado = 0
                                             when "Very High"
                                                   valor_deseado = 20
                                             when "High"
                                                   valor_deseado = 10
                                             when "Very Low"
                                                   valor_deseado = -20
                                             when "Low "
                                                   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
                                else
         window(:title => "Connection Failure", :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 "    OK    " do
                    close()
                 end
            end  
        end
                                    close()
                                end
                           end
                              @mensaje_estado.clear do
                                    detalles = Array.new
                                    detalles = tratar_retorno_detalle(conexion.ctdescargas_retorno_msg)
                                    para " "
                                    detalles.each do |mostrar|
                                                      mostrar
                                    end  
                              end
                       end
########################################## BUSQUEDA #############################################################
                       def busqueda(conexion)
                              @mensaje_estatico.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("Search") 
                                      para "Min. ", :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 "Max. ", :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 = "        Add new Ed2k link        " + 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 "        OK        " 
                                                 boton_cancelar = button "      Cancel      " 
	                                         boton_aceptar.click do
                                                     if conexion.ctdownurl(@enlace.text)
				                                                window(:title => "Warning", :width => 400, :height => 210) do
                                                                 background "#000000".."#999999"
                                                                 flow do
                                                                    image "emule.gif",:width => 110, :height => 160, :margin_left => 10
                                                                    para "Download has been added...", :stroke => white,:size =>10,
                                                                    :margin_top => 60
                                                                    stack :margin => 10 do
                                                                       boton_aceptar2 = button "       OK       ",:margin_left => 120
                                                                       boton_aceptar2.click do
                                                                          close()
                                                                       end  
                                                                    end
                                                                 end
                                                        end
                                                     else
                                                        window(:title => "Warning", :width => 400, :height => 210) do
                                                                 background "#000000".."#999999"
                                                                 flow do
                                                                       image "emule.gif",:width => 110, :height => 160,:margin_top => 10
                                                                       para "Download hasn't been added...", :stroke=>white,:size =>10,
                                                                       :margin_top => 90
                                                                    stack :magin => 30 do
                                                                       boton_aceptar2 = button "      OK       ", :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 = "      Add new Bittorrent link       " + 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 "       OK         " 
                                                 boton_cancelar = button "    Cancel        " 
	                                         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 "Download has been added...", :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 "Download hasn't been added...", :stroke=>white,:size =>10,
                                                                       :margin_top => 90
                                                                    stack :magin => 30 do
                                                                       boton_aceptar2 = button "       OK      ", :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
                                 else
                                    ventana_error(conexion)
                                    close()
                                 end
                              end
                              @mensaje_estado.clear do
                                    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 "Delete", :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
                              end
                       end
                       def lista_busqueda(conexion)
                              @mensaje_estatico.clear do
                                      flow do
                                          background "#464646".."#000000"
                                          para "Id",:left=> 20,  :stroke => lightblue, :size => 10
                                          para "Size  ", :left => 140, :stroke => lightblue, :size => 10
                                          para "Availability", :left=> 240, :stroke => lightblue, :size => 10
                                          para "Name          ", :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 
                              end
                              @mensaje_estado.clear do
                                 if conexion.ctver_resultado_busqueda(@numero[1..5])
 
                                       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 = "Confirmation... " + 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 = "Do we proceed to the download ...?"  
                                                                 pregunta += "\n" + titulo1.gsub("Confirmation... ","")
                                                                 para pregunta, :stroke => white, :size => 10
                                                                end
                                                               end
                                                               flow :margin_left => 170 do
			                                         boton_si = button "     YES     " 
                                                                 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
        window(:title => "Connection Failure", :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 "    OK    " do
                    close()
                 end
            end  
        end
               #                        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+40)]  
                           @siguiente_pos_tratamiento_servidores = iz + 41
                           #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 "Disconnect", :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 "Connect", :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 "Delete", :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 "Servers     ",:stroke => lightblue, :size => 10 
                                   boton_conectado = button "Connected"
                                   boton_conectado.click do
                                      @muestra = "conectado"
                                   end
                                   para "  "
                                   boton_todo = button "All"
                                   boton_todo.click do
                                      @muestra = "todo"
                                   end
                                   para " "
                                   boton_mas = button "Connect to more servers"
                                   boton_mas.click do
                                      if conexion.ctconecta_server(" ")
                                      else
                                         ventana_error(conexion)
                                         close()
                                      end
                                   end
                                end
                                flow do
                                   background "#464646".."#000000"
                                   para "Net",:stroke => lightblue, :size => 10, :left=>15
                                   para "ID",:stroke => lightblue, :size => 10, :left=>80
                                   para "IP",:stroke => lightblue, :size => 10, :left=>115
                                   para "Name  ",:stroke => lightblue, :size => 10, :left=> 285
                                   para "Users   ",:stroke => lightblue, :size => 10, :left=>465
                                   para "Files   ",:stroke => lightblue, :size => 10, :left=>535
                                   para "Status",:stroke => lightblue, :size => 10, :left=>605
                                   para "Actions allowed",: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
                              pos_total -= 1
                              if pos_total == 0
                                 pos_total = 700
                              end 
                           end
                       end
                       def estadistica_estatico(conexion)
                              @mensaje_estado.clear 
                              if @refresco 
                                 @mensaje_estatico.clear do
                                  flow do
                                     background "#464646".."#000000"
                                     para "Statistics",:stroke => lightblue, :size => 10 
                                     para " "
                                     boton_ancho = button "Bandwidth"
                                     boton_ancho.click do
                                        @accion = "ancho"
                                        @refresco = true
                                     end
                                     para " "
                                     boton_cliente = button "Clients"
                                     boton_cliente.click do
                                        @accion = "cliente"
                                        @refresco = true
                                     end 
                                     para " "
                                     boton_cargas = button "Uploads"
                                     boton_cargas.click do
                                        @accion = "carga"
                                        @refresco = true
                                     end
                                  end
                                 end
                                 @refresco = false
                              end
                                @mensaje_esp.clear 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,180)
                                            @mostrar_mitad_max_down.move(810,230)
                                            @mostrar_cero.move(810,278)
                                            @mostrar_mitad_max_up.move(810,330)
                                            @mostrar_max_up.move(810,380)
##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,410)

                                            if copia_tiempo_est_d.length > 116
                                               tiempo1 = copia_tiempo_est_d[copia_tiempo_est_d.length - 116]
                                               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,410)
                                            end
                                            if copia_tiempo_est_d.length > 233                                            
                                               tiempo2 = copia_tiempo_est_d[copia_tiempo_est_d.length - 233]
                                               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,410)
                                            end
                                            if copia_tiempo_est_d.length > 349
                                               tiempo3 = copia_tiempo_est_d[copia_tiempo_est_d.length - 349]
                                               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,410)
                                            end
                                            if copia_tiempo_est_d.length > 466
                                               tiempo4 = copia_tiempo_est_d[copia_tiempo_est_d.length - 466]
                                               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,410)
                                            end
                                            if copia_tiempo_est_d.length > 582
                                               tiempo5 = copia_tiempo_est_d[copia_tiempo_est_d.length - 582]
                                               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,410)
                                            end
                                            if copia_tiempo_est_d.length > 699
                                               tiempo6 = copia_tiempo_est_d[copia_tiempo_est_d.length - 699]
                                               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,410)
                                            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
                       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 => "New Share", :width => 550, :height => 300) do
                                       background "#464646".."#000000"                       
                                           flow :margin => 25 do 
                                              para "Priority   *",:left=> 100, :stroke => white, :size => 10
                                              @nueva_prio = edit_line :left => 250
                                           end   
                                           flow :margin => 25 do
                                              para "Directory   *",:left=> 100, :stroke => white, :size => 10
                                              @nueva_dir = edit_line :left => 250
                                           end
                                           flow :margin => 25 do
                                              para "Strategy  *",:left=> 100, :stroke => white, :size => 10
                                              @nueva_estrategia = edit_line :left => 250
                                           end   

                                      
                                       botonera = flow :margin_left => 100  do                                           

                                                 button "    OK    " 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 "    OK    " do
                    close()
                 end
            end  
        end

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

                                 end      
                       end                	
                       
                       def ventana_nuevo_usr(conexion)
                                 window(:title => "New  User / Group", :width => 550, :height => 450) do
                                       background "#464646".."#000000"                       
                                       flow :margin => 50 do
                                           para "Select:   ",:left=> 100, :stroke => white, :size => 10
                                           @tipo = "User"
                                           list_box :items => ["User","Group"],
                                                      :choose => @tipo do |list|
                                                           if list.text == "User"
                                                              @user_mostrar.clear do
                                                                  flow do 
                                                                       para "User     *",:left=> 100, :stroke => white, :size => 10
                                                                       @nuevo_usuario = edit_line :left => 250
                                                                  end
                                                                  flow do 
                                                                       para "Password    *",:left=> 100, :stroke => white, :size => 10
                                                                       @nueva_pass = edit_line :secret => true, :left => 250
                                                                  end
                                                                  flow do 
                                                                       para "Conf. Password    *",:left=> 100, :stroke => white, :size => 10
                                                                       @conf_pass = edit_line :secret => true, :left => 250
                                                                  end
                                                                  flow do 
                                                                       para "Group",: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 = "Group"
                                                                  flow do 
                                                                       para "Group  *",:left=> 100, :stroke => white, :size => 10
                                                                       @nuevo_grupo = edit_line :left => 250
                                                                       para " *", :stroke => white, :size => 10
                                                                  end
                                                                  flow do 
                                                                       para "Administrator  *",:left=> 100, :stroke => white, :size => 10
                                                                       valor_adm_ext = "False"
                                                                       @valor_adm = "false"
                                                                       list_box :items => ["True","False"],:left => 250,
                                                                       :choose => valor_adm_ext do |valor|
                                                                           if valor.text == "False" 
                                                                               @valor_adm = "false"
                                                                           else
                                                                               @valor_adm = "true"
                                                                           end
                                                                         end    
                                                                  end
                                                              end    
                                                           end
                                          end
                                       end
                                       @user_mostrar = stack
  
                                       botonera = flow :margin_botton => 50  do                                           

                                                 button "    OK    " 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 => "Connection Failure", :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 "    OK    " 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 => "Connection Failure", :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 "    OK    " do
                    close()
                 end
            end  
        end

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

                       def ventana_modif_usr(conexion,user)
                                 titulo = "User Modification" + 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 "Group ",:left=> 50, :stroke => white, :size => 10
                                                 mod_grupo = edit_line :left=>150
                                                 para "   "
                                                 button "     New      ", :left=> 400 do
                                                 	       retorno = conexion.ctusergroupadd(user,mod_grupo.text.to_s)
                                                 	       if retorno
                                                              close()
                                                 	       else
                                                 	       
        window(:title => "Connection Failure", :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 "    OK    " do
                    close()
                 end
            end  
        end
                                                         end
                                                 end
                                                 para "   "      
                                                 button " Delete   ", :left=> 600 do
                                                 	       retorno = conexion.ctusergroupdel(user.to_s,mod_grupo.text.to_s)
                                                 	       if retorno
                                                            close()
                                                         else
                                                         
        window(:title => "Connection Failure", :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 "    OK    " 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 " Change to... ", :left=> 400 do
                                                 	     retorno = conexion.ctuserdgroup(user.to_s,mod_dgrupo.text.to_s)
                                                 	     if retorno
                                                         close()
                                                       else  
                                                       
                                                                                                                
        window(:title => "Connection Failure", :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 "    OK    " 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 " Change to... ", :left=> 400 do
                                                 	     retorno = conexion.ctusermail(user.to_s,mod_email.text.to_s)
                                                	     
                                                 	     if retorno
                                                         close()
                                                       else  
                                                       
        window(:title => "Connection Failure", :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 "    OK    " 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 " Change to... ", :left=> 400 do
                                                 	     retorno = conexion.ctusercommit(user.to_s,mod_commit.text.to_s)
                                                	     
                                                 	     if retorno
                                                         close()
                                                       else  
                                                       
        window(:title => "Connection Failure", :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 "    OK    " 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 " Change to... ", :left=> 400 do
                                                 	     retorno = conexion.ctuserdls(user.to_s,mod_maxdls.text.to_s)
                                                	     
                                                 	     if retorno
                                                         close()
                                                       else  
                                                       
        window(:title => "Connection Failure", :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 "    OK    " do
                    close()
                 end
            end  
        end
                                                       
                                                       
                                                       end
                                                 end
                                              end


                                       end
                                 end        
                       end

                       def ventana_modif_grupo(conexion,grupo)
                                 titulo = "Group Modification" + grupo                      
                                 window(:title => titulo[0..16], :width => 650, :height => 150) do
                                       background "#464646".."#000000"                       
                                       grupo = titulo[18..80] 
                                       flow :margin => 50 do
                                                para "Administrator   ",:left=> 100, :stroke => white, :size => 10
                                                valor_adm_ext = "False"
                                                list_box :items => ["True","False"],
                                                            :choose => valor_adm_ext do |valor|
                                                                    if valor.text == "False"
                                                                               valor_adm_ext = "false"
                                                                    else
                                                                               valor_adm_ext = "true"
                                                                    end
                                                 end    
                                                 para "     "                 
                                                 button " Change " do
                                                 	     retorno = conexion.ctgroupadmin(grupo.to_s,valor_adm_ext.to_s)
                                                	     
                                                 	     if retorno
                                                         close()
                                                       else  
                                                       
        window(:title => "Connection Failure", :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 "     OK    " do
                    close()
                 end
            end  
        end
                                                       
                                                       
                                                       end                                                 	       
                                                end         
                                       end
                                 end        
                       end

                       def ventana_del_usr(conexion,user)
                                         window(:title => "Confirmation...", :width => 500, :height => 150) do
                                             background "#000000".."#999999"
                                             stack :margin_left => 20 do 
                                                flow :margin => 15 do
                                                      image 'warning.png', :height => 80 
                                                      para "Delete this user?", :size=> 10,
                                                      :stroke => white,:margin_top => 20,:margin_left => 35
                                                end
                                             end
                                             flow :margin_left => 125 do
                                                  button "     YES     " do
                                                       if conexion.ctuserdel(user)
                                                          close()
                                                       else  
        window(:title => "Connection Failure", :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 "    OK    " do
                    close()
                 end
            end  
        end
                                                       end  
                                                         
			                                                 close()
			                                            end
						                                      button "     NO      " do
                                                       close() 
                                                  end	 	  
                                              end	
                                          end

                       end  


                       def ventana_del_grupo(conexion,grupo)
                                         window(:title => "Confirmation...", :width => 500, :height => 150) do
                                             background "#000000".."#999999"
                                             stack :margin_left => 20 do 
                                                flow :margin => 15 do
                                                      image 'warning.png', :height => 80 
                                                      para "Delete this group?", :size=> 10,
                                                      :stroke => white,:margin_top => 20,:margin_left => 35
                                                end
                                             end
                                             flow :margin_left => 125 do
                                                  button "     YES     " do
                                                       if conexion.ctgroupdel(grupo)
                                                          close()
                                                       else  
        window(:title => "Connection Failure", :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 "    OK    " do
                    close()
                 end
            end  
        end
                                                       end  
			                                                 close()
			                                            end
						                                      button "     NO      " do
                                                       close() 
                                                  end	 	  
                                              end	
                                          end
                       end  


                       def ventana_consola(conexion)
                           window(:title => "Console", :width => 800, :height => 600) do
                            background "#464646".."#000000"
                            stack do
                             para " "
                             flow do
                               para "             Command:  ", :stroke => lightblue, :size => 10
                               comando = edit_line
                               para "  "
                               button "Run" 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 => "Connection Failure", :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 "    OK    " do
                    close()
                 end
            end  
        end
                                   end
                               end
                               para "  "
                               button "Exit " do 
                                   close
                               end    
                              end # final flow
                               stack do
                                  background "#464646".."#000000"
                                  para ""
                               end
                               @resultado = stack :width => self.width.to_i - 30 , :height => self.height.to_i - 120 , :scroll => true
                               animate(2) do
                                 @resultado.width = self.width.to_i - 30
                                 @resultado.height = self.height.to_i - 120
                                 @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 " Options   " do
                                               @mensaje_opt = "Opciones"
                                               @accion = "opciones"
                                               @refresco = true

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

                                            end  
                                            if @accion == "usuarios"
                                               para " "
                                               button " New Users/Groups" do 
                                                    if ventana_nuevo_usr(conexion)
                                                         @refresco = true
                                                         @accion = "usuarios"
                                                    end
                                               end
                                            end
                                            if @accion == "compartido"
                                               para " "
                                               button " New Shares" do 
                                                    if ventana_nuevo_compartido(conexion)
                                                       @refresco = true               
                                                       @accion = "compartido"
                                                    end
                                               end
                                            end
#                                            if @accion == "opciones"
                                               para " "
                                               button "    Console    " 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
                            #inicio-change
                                   para local_nombre, :size =>10, :stroke =>white
                                   para '   '
                                   para local_valor, :size=>10, :stroke=> lightblue
                            #       caja_texto = edit_line(local_valor)
                            #       caja_texto.move(300,5)
                            #      boton_aplica_cambios = button "Aplicar Cambios"
                                   boton_aplica_cambios = button "   Change    "
                            #fin-change

                                   boton_aplica_cambios.move(700,5)
                                   boton_aplica_cambios.click do
                                       titulocambio = Array.new
                            #inicio-change
                            #          titulocambio[0] = "Aviso " 
                                       titulocambio[0] = "Modify the value... " 
                            #fin-change
                                       titulocambio[1] = local_nombre 
                            #inicio-change
                            #          titulocambio[2] = caja_texto.text 
                                       titulocambio[2] = local_valor
                            #fin-change
                                       titulocambio[3] = conexion.ctversion_retorno_msg[0].to_s

                            #inicio-change     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	
                                                window(:title => titulocambio[0], :width => 500, :height => 190) do
                                                       background "#000000".."#464646"
                                                       flow :margin_left => 75, :margin_top => 50 do
                                                            para titulocambio[1] + "   ", :stroke => white
                                                            @caja_texto = edit_line(titulocambio[2])
                                                       end
                                                       flow :margin_left => 75, :margin_top => 50 do
                                                            boton_aceptar = button "        OK        " 
                                                            boton_cancelar = button "     Cancel       " 
                                                            boton_aceptar.click do
                                                              titulocambio[2] = @caja_texto.text
                                                              window(:title => titulocambio[0], :width => 500, :height => 190) do
                                                                if conexion.ctestblece_opcion(titulocambio[1],titulocambio[2])
                                                                  msg = "The change has been properly implemented.\n" 
                                                                  titulocambio[4] = "s"
                                                                else
                                                                  msg = "The change hasn't been properly implemented.\n Maybe you use a wrong value.\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 "    OK    " do
                                                                         titulocambio[4] = 's'
                                                                      close()
                                                                       end
                                                                end  
                                                              end	
                                                              close()
                                                            end
                                                            boton_cancelar.click do
                                                                close()
                                                            end
                                                       end
                                                end
                                                @cambio_op_realizado=titulocambio[4].to_s 
                           #fin-change
                                    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 = "  Change  " + 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 = "  Delete  " + 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 => "Confirmation...", :width => 500, :height => 150) do
                                             background "#000000".."#999999"
                                             stack :margin_left => 20 do 
                                                flow :margin => 15 do
                                                      image 'warning.png', :height => 80 
                                                      para "Delete this sharing?", :size=> 10,
                                                      :stroke => white,:margin_top => 20,:margin_left => 35
                                                end
                                             end
                                             flow :margin_left => 125 do
                                                  button "      YES    " do
                                                       if conexion.ctunshare(dir)
                                                          close()
                                                       else  
        window(:title => "Connection Failure", :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 "    OK    " 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 = "Stop sharing...        " + @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
                                   banner "RMLDONKEY 0.1",:stroke => black, :size => 25, :top => 50, :left => 323 
                                   banner "RMLDONKEY 0.1",:stroke => darkred, :size => 25, :top => 53, :left => 320 
                         	   para "Ruby Shoes GUI for mldonkey", :stroke => black, :size => 10,:top => 90, :left => 365
                         	   para "Ruby Shoes GUI for mldonkey", :stroke => lightblue, :size => 10,:top => 93, :left => 362
                         	   para "http://the-shoebox.org/", :stroke => black, :size => 10,:top => 110, :left => 385
                         	   para "http://the-shoebox.org/", :stroke => lightblue, :size => 10,:top => 113, :left => 382

                         	   para "This software is publish", :stroke => white, :size => 9, :left=> 385, :top => 135
                         	   para "under the terms of ", :stroke => white, :size => 9, :left => 400, :top => 150
                         	   para "GNU Public Licence.", :stroke => white, :size => 9, :left => 395, :top => 165
                         	   para "Copyright 2009 Manuel Ramos Caro", :stroke => white, :size => 9, :left => 350, :top => 180
                         	   para "Contact: manuelramoscaro@yahoo.es", :stroke => white, :size => 9, :left => 348, :top => 195
                          end
                       end


                          @mensaje_estatico = flow 
                          @mensaje_esp = stack :scroll => false
                          @mensaje_estado = stack :width => self.width.to_i - 30 , :height => self.height.to_i - 190 , :scroll => true
                          mensaje(conexion)
                          animate(1) do 
                             @mensaje_estado.width = self.width.to_i - 30
                             @mensaje_estado.height = self.height.to_i - 190
                             @mensaje_esp.clear
                             case @accion 
                               when "inicial" 
                                 mensaje(conexion)
                               when "descarga"
                                 @mensaje_estatico.clear do
                                    flow do
                                         background "#464646".."#000000"
                                         para "File   ", :stroke => lightblue, :size => 10
                                         para "%", :left => 370, :stroke => lightblue, :size => 10
                                         para "Dled", :left => 420, :stroke => lightblue, :size => 10
                                         para "Size", :left => 490, :stroke => lightblue, :size => 10
                                         para "Last", :left => 570, :stroke => lightblue, :size => 10
                                         para "Compl.", :left => 660, :stroke => lightblue, :size => 10
                                         para "Rate", :left => 750, :stroke => lightblue, :size => 10
                                         para "Priority", :left => 820, :stroke => lightblue, :size => 10
                                    end
                                 end
                                 if @tasa_refresco == 2
                                    mensaje_descargas(conexion)
                                    @tasa_refresco = 0
                                 else
                                    @tasa_refresco += 1
                                 end
                               when "detalle"
                                 if @refresco
                                    @refresco = false
                                    detalle_descarga(conexion)
                                 end
                               when "busca"
                                 if @refresco
                                    @refresco = false
                                    busqueda(conexion)
                                 end
                               when "lista_resultados"
                                if @refresco
                                    @refresco = false
                                    lista_busqueda(conexion)
                                 end
                               when "server"  
                                     server(conexion)
                               when "estadistica", "ancho"
                                    estadistica_estatico(conexion)
                               when "cliente"
                               #     estadistica_estatico(conexion)
                                    estadistica_dinamico_cliente(conexion)
                               when "carga"
                               #     estadistica_estatico(conexion)
                                    estadistica_dinamico_carga(conexion)
                               when "detalle cliente"
                               #     estadistica_estatico(conexion)
                                    estadistica_dinamico_detalle_cliente(conexion)
                               when "opciones"
                                 if @refresco
                                    opciones_estatico(conexion)
                                 end
                                 opciones_dinamico(conexion)
                               when "detalle seccion"                                        
                                 if @refresco
                                    opciones_estatico(conexion)
                                    @cambio_op_realizado = "n"
                                    mostrar_opciones(conexion,@pos_inicial,@pos_final,@opciones)
                                    @refresco = false
                                 end
                                 if @cambio_op_realizado != "n"
                                       @accion = "opciones"
                                       @refresco = true
                                       @mensaje_opt = "Opciones"
                                 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
                   end
####################################### VENTANA CONEXION FIN    ########################################
                end 
            end

            button "   CANCEL     " do  
               @ip.text=''
               @puerto.text=''
               @usuario.text = ''
               @contrasena.text = ''

            end
        end
end
############################### VENTANA DE LOGIN FIN #######################################################

