#include "ui/menudef.h"

{

  \\ Server Join \\

#define W           640
#define H           480
#define BORDER      10

#define PREVIEW_W   112
#define PREVIEW_H   84
#define TOP_W       (W-((2*BORDER)+PREVIEW_W))
#define TOP_H       PREVIEW_H
#define TOP_X       BORDER
#define TOP_Y       BORDER
#define TOPBUTT_W   (TOP_W/3)
#define TOPBUTT_H   (TOP_H/2)
#define TOP_TOFF_X  20
#define TOP_TOFF_Y  0

#define BCJ_W       (W-(2*BORDER))
#define BCJ_H       50
#define BCJ_X       BORDER
#define BCJ_Y       (H-(BCJ_H+BORDER))
#define ARROW_W     50
#define ARROW_H     BCJ_H

#define BOT_W       (W-(2*BORDER))
#define BOT_H       45
#define BOT_X       BORDER
#define BOT_Y       (BCJ_Y-BOT_H)
#define BOTBUTT_W   (BOT_W/5)
#define BOTBUTT_H   BOT_H

#define SERVER_C    0.6
#define MAP_C       0.2
#define PLAYERS_C   0.1
#define PING_C      0.1
#define LIST_W      (W-(2*BORDER))
#define LIST_H      (H-((3*BORDER)+TOP_H+BOT_H+BCJ_H))
#define LIST_X      BORDER
#define LIST_Y      ((2*BORDER)+TOP_H)
#define LIST_TOFF   5
#define HEADFOOT_H  25

  menuDef
  {
    name "joinserver"
    visible MENU_FALSE
    fullscreen MENU_TRUE
    rect 0 0 W H
    focusColor 1 .75 0 1
    outOfBoundsClick
    style WINDOW_STYLE_EMPTY
    aspectBias ASPECT_NONE
    onOpen
    {
      uiScript InitServerList 3;
      hide accept_alt;
      show accept;
      hide back_alt;
      show back;
      uiScript UpdateFilter
    }

    onEsc { uiScript closeJoin }

    itemDef
    {
      name background
      rect 0 0 W H
      style WINDOW_STYLE_FILLED
      backcolor 0 0 0 1
      visible MENU_TRUE
      decoration
    }


    //  VIEW OPTIONS  //

    itemDef
    {
      name gametypefield
      text "Source:"
      style WINDOW_STYLE_EMPTY
      ownerdraw UI_NETSOURCE
      rect TOP_X TOP_Y TOPBUTT_W TOPBUTT_H
      textalign ALIGN_LEFT
      textvalign VALIGN_CENTER
      textalignx TOP_TOFF_X
      textaligny TOP_TOFF_Y
      textscale .4
      forecolor 1 1 1 1
      backcolor .5 .5 .5 .5
      visible MENU_TRUE
      action
      {
        play "sound/misc/menu1.wav"
      }
    }

    //  BUTTONS   //

    itemDef
    {
      name refreshSource
      text "Get New List"
      type ITEM_TYPE_BUTTON
      textscale .4
      style WINDOW_STYLE_EMPTY
      rect (TOP_X+TOPBUTT_W) TOP_Y TOPBUTT_W TOPBUTT_H
      textalign ALIGN_LEFT
      textvalign VALIGN_CENTER
      textalignx TOP_TOFF_X
      textaligny TOP_TOFF_Y
      backcolor .5 .5 .5 .5
      forecolor 1 1 1 1
      visible MENU_TRUE
      action
      {
        play "sound/misc/menu1.wav";
        uiScript RefreshServers
      }
    }

    itemDef
    {
      name refreshFilter
      text "Refresh List"
      textscale .4
      style WINDOW_STYLE_EMPTY
      type ITEM_TYPE_BUTTON
      rect (TOP_X+(2*TOPBUTT_W)) TOP_Y TOPBUTT_W TOPBUTT_H
      textalign ALIGN_LEFT
      textvalign VALIGN_CENTER
      textalignx TOP_TOFF_X
      textaligny TOP_TOFF_Y
      backcolor .5 .5 .5 .5
      forecolor 1 1 1 1
      visible MENU_TRUE
      action
      {
        play "sound/misc/menu1.wav";
        uiScript RefreshFilter
      }
    }

    itemDef
    {
      name viewEmpty
      style WINDOW_STYLE_EMPTY
      type ITEM_TYPE_YESNO
      text "View Empty:"
      cvar "ui_browserShowEmpty"
      textscale .4
      rect TOP_X (TOP_Y+TOPBUTT_H) TOPBUTT_W TOPBUTT_H
      textalign ALIGN_LEFT
      textvalign VALIGN_CENTER
      textalignx TOP_TOFF_X
      textaligny TOP_TOFF_Y
      forecolor 1 1 1 1
      backcolor .5 .5 .5 .5
      visible MENU_TRUE
      action
      {
        play "sound/misc/menu1.wav";
        uiScript RefreshFilter
      }
    }

    itemDef
    {
      name viewFull
      style WINDOW_STYLE_EMPTY
      type ITEM_TYPE_YESNO
      text "View Full:"
      cvar "ui_browserShowFull"
      textscale .4
      rect (TOP_X+TOPBUTT_W) (TOP_Y+TOPBUTT_H) TOPBUTT_W TOPBUTT_H
      textalign ALIGN_LEFT
      textvalign VALIGN_CENTER
      textalignx TOP_TOFF_X
      textaligny TOP_TOFF_Y
      forecolor 1 1 1 1
      backcolor .5 .5 .5 .5
      visible MENU_TRUE
      action
      {
        play "sound/misc/menu1.wav";
        uiScript RefreshFilter
      }
    }


    // MAP PREVIEW //

    itemDef
    {
      name mappreview
      style WINDOW_STYLE_EMPTY
      ownerdraw UI_NETMAPPREVIEW
      rect (W-(PREVIEW_W+BORDER)) BORDER PREVIEW_W PREVIEW_H
      border WINDOW_BORDER_FULL
      bordercolor .5 .5 .5 1
      visible MENU_TRUE
    }


    // COLUMNS //

    itemDef
    {
      name server
      group grpTabs
      text "Server Name"
      type ITEM_TYPE_BUTTON
      textscale .33
      style WINDOW_STYLE_EMPTY
      rect LIST_X LIST_Y (SERVER_C*LIST_W) HEADFOOT_H
      textalign ALIGN_LEFT
      textvalign VALIGN_CENTER
      textalignx LIST_TOFF
      border WINDOW_BORDER_FULL
      bordercolor   0.5 0.5 0.5 1
      forecolor     1   1   1   1
      backcolor     0.2 0.2 0.2 1
      outlinecolor  0.1 0.1 0.1 0.5
      visible MENU_TRUE
      action
      {
        play "sound/misc/menu1.wav";
        uiScript ServerSort 0;

        setitemcolor grpColumn backcolor 0 0 0 0;
        setitemcolor serverColumn backcolor 0.3 1 1 0.5
      }
    }

    itemDef
    {
      name serverColumn
      group grpColumn
      rect LIST_X (LIST_Y+HEADFOOT_H) (SERVER_C*LIST_W) (LIST_H-(2*HEADFOOT_H))
      style WINDOW_STYLE_FILLED
      border WINDOW_BORDER_FULL
      backcolor 0 0 0 0
      bordersize 1
      bordercolor .5 .5 .5 1
      visible MENU_TRUE
      decoration
    }

    itemDef
    {
      name map
      group grpTabs
      type ITEM_TYPE_BUTTON
      text "Map Name"
      textscale .33
      style WINDOW_STYLE_EMPTY
      rect (LIST_X+(SERVER_C*LIST_W)) LIST_Y (MAP_C*LIST_W) HEADFOOT_H
      textalign ALIGN_LEFT
      textvalign VALIGN_CENTER
      textalignx LIST_TOFF
      border WINDOW_BORDER_FULL
      bordercolor   0.5 0.5 0.5 1
      forecolor     1   1   1   1
      backcolor     0.2 0.2 0.2 1
      outlinecolor  0.1 0.1 0.1 0.5
      visible MENU_TRUE
      action
      {
        play "sound/misc/menu1.wav";
        uiScript ServerSort 1;

        setitemcolor grpColumn backcolor 0 0 0 0;
        setitemcolor mapColumn backcolor 0.3 1 1 0.5
      }
    }

    itemDef
    {
      name mapColumn
      group grpColumn
      rect (LIST_X+(SERVER_C*LIST_W)) (LIST_Y+HEADFOOT_H) (MAP_C*LIST_W) (LIST_H-(2*HEADFOOT_H))
      style WINDOW_STYLE_FILLED
      border WINDOW_BORDER_FULL
      backcolor 0 0 0 0
      bordersize 1
      bordercolor .5 .5 .5 1
      visible MENU_TRUE
      decoration
    }

    itemDef
    {
      name Players
      group grpTabs
      text "Players"
      type ITEM_TYPE_BUTTON
      textscale .33
      style WINDOW_STYLE_EMPTY
      rect (LIST_X+((SERVER_C+MAP_C)*LIST_W)) LIST_Y (PLAYERS_C*LIST_W) HEADFOOT_H
      textalign ALIGN_LEFT
      textvalign VALIGN_CENTER
      textalignx LIST_TOFF
      border WINDOW_BORDER_FULL
      bordercolor   0.5 0.5 0.5 1
      forecolor     1   1   1   1
      backcolor     0.2 0.2 0.2 1
      outlinecolor  0.1 0.1 0.1 0.5
      visible MENU_TRUE
      action
      {
        play "sound/misc/menu1.wav";
        uiScript ServerSort 2;

        setitemcolor grpColumn backcolor 0 0 0 0;
        setitemcolor playerColumn backcolor 0.3 1 1 0.5
      }
    }

    itemDef
    {
      name playerColumn
      group grpColumn
      rect (LIST_X+((SERVER_C+MAP_C)*LIST_W)) (LIST_Y+HEADFOOT_H) (PLAYERS_C*LIST_W) (LIST_H-(2*HEADFOOT_H))
      style WINDOW_STYLE_FILLED
      border WINDOW_BORDER_FULL
      backcolor 0 0 0 0
      bordersize 1
      bordercolor .5 .5 .5 1
      visible MENU_TRUE
      decoration
    }

    itemDef
    {
      name Ping
      group grpTabs
      text "Ping"
      type ITEM_TYPE_BUTTON
      textscale .33
      style WINDOW_STYLE_EMPTY
      rect (LIST_X+((SERVER_C+MAP_C+PLAYERS_C)*LIST_W)) LIST_Y (PING_C*LIST_W) HEADFOOT_H
      textalign ALIGN_LEFT
      textvalign VALIGN_CENTER
      textalignx LIST_TOFF
      border WINDOW_BORDER_FULL
      bordercolor   0.5 0.5 0.5 1
      forecolor     1   1   1   1
      backcolor     0.2 0.2 0.2 1
      outlinecolor  0.1 0.1 0.1 0.5
      visible MENU_TRUE
      action
      {
        play "sound/misc/menu1.wav";
        uiScript ServerSort 3;

        setitemcolor grpColumn backcolor 0 0 0 0;
        setitemcolor pingColumn backcolor 0.3 1 1 0.5
      }
    }

    itemDef
    {
      name pingColumn
      group grpColumn
      rect (LIST_X+((SERVER_C+MAP_C+PLAYERS_C)*LIST_W)) (LIST_Y+HEADFOOT_H) (PING_C*LIST_W) (LIST_H-(2*HEADFOOT_H))
      style WINDOW_STYLE_FILLED
      border WINDOW_BORDER_FULL
      backcolor 0 0 0 0
      bordersize 1
      bordercolor .5 .5 .5 1
      visible MENU_TRUE
      decoration
    }

    // SERVER LIST //

    itemDef
    {
      name serverlist
      rect LIST_X (LIST_Y+HEADFOOT_H) LIST_W (LIST_H-(2*HEADFOOT_H))
      type ITEM_TYPE_LISTBOX
      style WINDOW_STYLE_EMPTY
      elementwidth 120
      elementheight 20
      textscale .33
      elementtype LISTBOX_TEXT
      feeder FEEDER_SERVERS
      border WINDOW_BORDER_FULL
      bordercolor   0.5 0.5 0.5 1
      forecolor     1   1   1   1
      backcolor     0.2 0.2 0.2 1
      outlinecolor  0.1 0.1 0.1 0.5
      visible MENU_TRUE
      columns 4
        LIST_TOFF                                       ((SERVER_C*LIST_W)-(3*LIST_TOFF))   ALIGN_LEFT
        (LIST_TOFF+((SERVER_C)*LIST_W))                 ((MAP_C*LIST_W)-(3*LIST_TOFF))      ALIGN_LEFT
        (LIST_TOFF+((SERVER_C+MAP_C)*LIST_W))           ((PLAYERS_C*LIST_W)-(3*LIST_TOFF))  ALIGN_LEFT
        (LIST_TOFF+((SERVER_C+MAP_C+PLAYERS_C)*LIST_W)) ((PING_C*LIST_W)-(3*LIST_TOFF))     ALIGN_LEFT

      doubleClick { uiScript JoinServer }
    }


    // DATE AND MESSAGE OF THE DAY  //

    itemDef
    {
      name refreshdate
      ownerdraw UI_SERVERREFRESHDATE
      textscale .33
      rect LIST_X (LIST_Y+(LIST_H-HEADFOOT_H)) (LIST_W/2) HEADFOOT_H
      textalign ALIGN_LEFT
      textvalign VALIGN_CENTER
      textalignx LIST_TOFF
      forecolor 1 1 1 1
      border WINDOW_BORDER_FULL
      bordercolor .5 .5 .5 1
      visible MENU_TRUE
      decoration
    }

    itemDef
    {
      name messageoftheday
      ownerdraw UI_SERVERMOTD
      textscale .33
      rect (LIST_X+(LIST_W/2)) (LIST_Y+(LIST_H-HEADFOOT_H)) (LIST_W/2) HEADFOOT_H
      textalign ALIGN_LEFT
      textvalign VALIGN_CENTER
      textalignx LIST_TOFF
      forecolor 1 1 1 1
      border WINDOW_BORDER_FULL
      bordercolor .5 .5 .5 1
      visible MENU_TRUE
      decoration
    }


    // BOTTOM BUTTONS //

    itemDef
    {
      name password
      text "Set Password"
      type ITEM_TYPE_BUTTON
      textscale .4
      style WINDOW_STYLE_EMPTY
      rect BOT_X BOT_Y BOTBUTT_W BOTBUTT_H
      textalign ALIGN_CENTER
      textvalign VALIGN_CENTER
      forecolor 1 1 1 1
      visible MENU_TRUE
      action
      {
        play "sound/misc/menu1.wav";
        open password_popmenu
      }
    }

    itemDef
    {
      name createFavorite
      text "Create Favorite"
      type ITEM_TYPE_BUTTON
      textscale .4
      style WINDOW_STYLE_EMPTY
      rect (BOT_X+BOTBUTT_W) BOT_Y BOTBUTT_W BOTBUTT_H
      textalign ALIGN_CENTER
      textvalign VALIGN_CENTER
      forecolor 1 1 1 1
      visible MENU_TRUE
      action
      {
        play "sound/misc/menu1.wav";
        open createfavorite_popmenu
      }
    }

    itemDef
    {
      name addFavorite
      text "Add Favorite"
      type ITEM_TYPE_BUTTON
      textscale .4
      style WINDOW_STYLE_EMPTY
      ownerdrawFlag UI_SHOW_NOTFAVORITESERVERS
      rect (BOT_X+(2*BOTBUTT_W)) BOT_Y BOTBUTT_W BOTBUTT_H
      textalign ALIGN_CENTER
      textvalign VALIGN_CENTER
      forecolor 1 1 1 1
      visible MENU_TRUE
      action
      {
        play "sound/misc/menu1.wav";
        uiScript addFavorite
      }
    }

    itemDef
    {
      name delfavorite
      text "Delete Favorite"
      type ITEM_TYPE_BUTTON
      textscale .4
      style WINDOW_STYLE_EMPTY
      ownerdrawFlag UI_SHOW_FAVORITESERVERS
      rect (BOT_X+(2*BOTBUTT_W)) BOT_Y BOTBUTT_W BOTBUTT_H
      textalign ALIGN_CENTER
      textvalign VALIGN_CENTER
      forecolor 1 1 1 1
      visible MENU_TRUE
      action
      {
        play "sound/misc/menu1.wav";
        uiScript DeleteFavorite;
        uiScript UpdateFilter
      }
    }

    itemDef
    {
      name serverinfo
      text "Server Info"
      type ITEM_TYPE_BUTTON
      textscale .4
      style WINDOW_STYLE_EMPTY
      rect (BOT_X+(3*BOTBUTT_W)) BOT_Y BOTBUTT_W BOTBUTT_H
      textalign ALIGN_CENTER
      textvalign VALIGN_CENTER
      forecolor 1 1 1 1
      visible MENU_TRUE
      action
      {
        play "sound/misc/menu1.wav";
        open serverinfo_popmenu
      }
    }

    itemDef
    {
      name findplayer
      text "Find a Friend"
      type ITEM_TYPE_BUTTON
      textscale .4
      style WINDOW_STYLE_EMPTY
      rect (BOT_X+(4*BOTBUTT_W)) BOT_Y BOTBUTT_W BOTBUTT_H
      textalign ALIGN_CENTER
      textvalign VALIGN_CENTER
      forecolor 1 1 1 1
      visible MENU_TRUE
      action
      {
        play "sound/misc/menu1.wav";
        open findplayer_popmenu
      }
    }



    // BACK CREATE JOIN //

    itemDef
    {
      name createServer
      text "Create Server"
      textscale .5
      style WINDOW_STYLE_EMPTY
      type ITEM_TYPE_BUTTON
      rect (BCJ_X+ARROW_W) BCJ_Y (BCJ_W-(2*ARROW_W)) BCJ_H
      textalign ALIGN_CENTER
      textvalign VALIGN_CENTER
      forecolor 1 1 1 1
      visible MENU_TRUE
      action
      {
        play "sound/misc/menu1.wav";
        open createserver
      }
    }


    itemDef
    {
      name back
      style WINDOW_STYLE_SHADER
      background "ui/assets/backarrow.tga"
      rect BCJ_X BCJ_Y ARROW_H ARROW_W
      aspectBias ALIGN_LEFT
      visible MENU_TRUE
      action
      {
        play "sound/misc/menu4.wav";
        close joinserver
      }

      mouseEnter
      {
        hide back;
        show back_alt
      }
    }

    itemDef
    {
      name back_alt
      style WINDOW_STYLE_SHADER
      background "ui/assets/backarrow_alt.tga"
      rect BCJ_X BCJ_Y ARROW_H ARROW_W
      aspectBias ALIGN_LEFT
      backcolor 0 0 0 0
      forecolor 1 1 1 1
      visible MENU_FALSE
      type ITEM_TYPE_BUTTON

      text "Back"
      textalign ALIGN_LEFT
      textvalign VALIGN_CENTER
      textalignx ARROW_W
      textscale .6

      mouseExit
      {
        hide back_alt;
        show back
      }

      action
      {
        play "sound/misc/menu4.wav";
        close joinserver
      }
    }




    itemDef
    {
      name accept
      style WINDOW_STYLE_SHADER
      rect ((BCJ_X+BCJ_W)-ARROW_W) BCJ_Y ARROW_H ARROW_W
      aspectBias ALIGN_RIGHT
      background "ui/assets/forwardarrow.tga"
      backcolor 0 0 0 0
      forecolor 1 1 1 1
      visible MENU_TRUE
      mouseEnter
      {
        hide accept;
        show accept_alt
      }

      action
      {
        play "sound/misc/menu1.wav";
        uiScript JoinServer
      }
    }

    itemDef
    {
      name accept_alt
      style WINDOW_STYLE_SHADER
      rect ((BCJ_X+BCJ_W)-ARROW_W) BCJ_Y ARROW_H ARROW_W
      aspectBias ALIGN_RIGHT
      background "ui/assets/forwardarrow_alt.tga"
      backcolor 0 0 0 0
      type ITEM_TYPE_BUTTON
      forecolor 1 1 1 1
      visible MENU_FALSE
      type ITEM_TYPE_BUTTON

      text "Join"
      textalign ALIGN_RIGHT
      textvalign VALIGN_CENTER
      textalignx -ARROW_W
      textscale .6

      mouseExit
      {
        hide accept_alt;
        show accept
      }

      action
      {
        play "sound/misc/menu1.wav";
        uiScript JoinServer
      }
    }
  }
}