//Vector.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.JRadioButton;
import javax.swing.ButtonGroup;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.geom.*;
import java.util.*;
import java.text.*;

public class Vector extends JFrame implements WindowListener{  
  
  // Draws the radiation pattern
  VectorCanvas vc;
  PaintPanel pp;
  PaintPanel2 pp2;
  
  public int anno_mio;

  // Sliders
  public JSlider jslider_dipole;
  public JSlider jslider_distance;
  public JSlider jslider_phase;
  public JSlider jslider_animation;
  public JSlider jslider_number;
  
  public JSlider jslider_x;
  public JSlider jslider_z;
  
  public JLabel jlab_dipole;
  public JLabel jlab_distance;
  public JLabel jlab_phase;
  public JLabel jlab_number;
  
  public JLabel jlab_0;
  public JLabel jlab_10;
  public JLabel jlab_5;
  
  public JLabel jlab_d0;
  public JLabel jlab_d10;
  public JLabel jlab_d5;
  
  public JLabel jlab_f0;
  public JLabel jlab_f10;
  public JLabel jlab_f5;
  
  public JLabel jlab_n0;
  public JLabel jlab_n10;
  public JLabel jlab_n5;
  
  public JLabel jlambda;
  public JLabel jlambda2;
  public JLabel jcopyright;
  public JLabel janimation;
  public JLabel jselect;
  public JLabel jslower;
  public JLabel jfaster;
  public JLabel jtitle1;
  public JLabel jtitle2;
  public JLabel jtitle3;
  
  public JButton jshowdipoles;
  public JButton jreset;
  public JButton jstart;
  public JButton jstop;
  public JButton jback;
  public JButton jLength;
  public JButton jDistance;
  public JButton jPhase;
  public JButton jforth;
  public JButton jabout;
  public JButton jrotatex;
  public JButton jclose;
  public JButton jColorF;
  public JButton jColorP;
  
  public JRadioButton[] Field = new JRadioButton[2];
  public ButtonGroup field_power = new ButtonGroup();
  
  public JRadioButton[] Fill = new JRadioButton[1];
  
  public double direction = 1.0;
  
  public boolean running = false;
  public boolean goforth = true;
  
  public JPanel jtitle = new JPanel();
  public JPanel jcontrols = new JPanel();
  public JPanel jline1 = new JPanel();
  public JPanel jline2 = new JPanel();
  public JPanel jline3 = new JPanel();
  
  public JPanel jtitlep1 = new JPanel();
  public JPanel jtitlep2 = new JPanel();
  public JPanel jtitlep3 = new JPanel();
  public JPanel jtitlep4 = new JPanel();
  public JPanel jtitlep5 = new JPanel();
  public JPanel jtitlep6 = new JPanel();
  public JPanel jtitlep7 = new JPanel();
  public JPanel jtitlep8 = new JPanel();
  
  public JPanel jInst2 = new JPanel();
  public JPanel jInst3 = new JPanel();
  public JPanel jInst4 = new JPanel();
  public JPanel jInst5 = new JPanel();
  public JPanel jInst6 = new JPanel();
  
  public JPanel jback1 = new JPanel();
  public JPanel jback2 = new JPanel();
  public JPanel jback3 = new JPanel();
  
  public JPanel jaboutpanel = new JPanel();
  
  public JPanel jcontrols2 = new JPanel();
  public int sleep_factor = 200;
  public int Nside;
  public Panel p_one;
  public Panel p_patch;
 
  Thread vai;
  public boolean forward = true;
  public boolean IsLength = false;
  public boolean IsDistance = false;
  public boolean IsPhase = false;
  public boolean rotate_x = false;
  
  //--------------------------------------------
  public boolean LicenseExpired;
    
  public int this_month, today_week, this_year, this_hour, this_minute, today_month, 
	       today_year,this_zone, saving_time;
	
  public int annonuovo = 2020;
  public int anno = 2020;
        
  public double my_antenna = 0.5; // wavelengths
  GregorianCalendar Greg = new GregorianCalendar();
  
  //--------------------------------------------
    public static int xmove_main = 20;
    public static int ymove_main = 20;
    public static int base_width = 830;
    public static final int base_height = 545;
    public static final double Xfactor = 0.85;
    
    // java - get screen size using the Toolkit class
    public static final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    public static final int screenHeight = screenSize.height;
    public static final int screenWidth = screenSize.width;
    
    //MANUAL TESTING OF DIFFERENT SCREEN SIZES
    //public static final int screenHeight = 768;
    //public static final int screenWidth = 1360;
    
    //public static final int screenHeight = 800;
    //public static final int screenWidth = 1280;
    
    //public static final int screenHeight = 720;
    //public static final int screenWidth = 1280;
    //==========================================================================

    //public static double sfactorm = 1.25;
    //public double sfactor = sfactorm;

    public static final double sfactorm = MaestroA.rounder(Xfactor*((double)screenHeight/(double)base_height),2);
    public int sfactor1 = screenHeight;
    public int sfactor2 = screenWidth;
    public double sfactor3 = Math.min(sfactor1, sfactor2);
    public double sfactor = MaestroA.rounder(Xfactor*(double)(sfactor3/base_height),2);

    //==============================================================================
    // Look-up table to simplify zoom 
    public int ss2 = (int)Math.ceil(2*sfactor);
    public int s1 = (int)Math.ceil(1*sfactor);
    public int s2 = (int)Math.ceil(2*sfactor);
    public int s3 = (int)Math.ceil(3*sfactor);
    public int s4 = (int)Math.ceil(4*sfactor);
    public int s5 = (int)Math.ceil(5*sfactor);
    public int s6 = (int)Math.ceil(6*sfactor);
    public int s7 = (int)Math.ceil(7*sfactor);
    public int s8 = (int)Math.ceil(8*sfactor);
    public int s9 = (int)Math.ceil(9*sfactor);
    public int s10 = (int)Math.ceil(10*sfactor);
    public int s11 = (int)Math.ceil(11*sfactor);
    public int s12 = (int)Math.ceil(12*sfactor);
    public int s13 = (int)Math.ceil(13*sfactor);
    public int s14 = (int)Math.ceil(14*sfactor);
    public int s15 = (int)Math.ceil(15*sfactor);
    public int s16 = (int)Math.ceil(16*sfactor);
    public int s17 = (int)Math.ceil(17*sfactor);
    public int s18 = (int)Math.ceil(18*sfactor);
    public int s19 = (int)Math.ceil(19*sfactor);
    public int s20 = (int)Math.ceil(20*sfactor);
    public int s21 = (int)Math.ceil(21*sfactor);
    public int s22 = (int)Math.ceil(22*sfactor);
    public int s23 = (int)Math.ceil(23*sfactor);
    public int s24 = (int)Math.ceil(24*sfactor);
    public int s25 = (int)Math.ceil(25*sfactor);
    public int s26 = (int)Math.ceil(26*sfactor);
    public int s27 = (int)Math.ceil(27*sfactor);
    public int s28 = (int)Math.ceil(28*sfactor);
    public int s29 = (int)Math.ceil(29*sfactor);
    public int s30 = (int)Math.ceil(30*sfactor);
    public int s31 = (int)Math.ceil(31*sfactor);
    public int s32 = (int)Math.ceil(32*sfactor);
    public int s33 = (int)Math.ceil(33*sfactor);
    public int s34 = (int)Math.ceil(34*sfactor);
    public int s35 = (int)Math.ceil(35*sfactor);
    public int s36 = (int)Math.ceil(36*sfactor);
    public int s37 = (int)Math.ceil(37*sfactor);
    public int s38 = (int)Math.ceil(38*sfactor);
    public int s39 = (int)Math.ceil(39*sfactor);
    public int s40 = (int)Math.ceil(40*sfactor);
    public int s41 = (int)Math.ceil(41*sfactor);
    public int s42 = (int)Math.ceil(42*sfactor);
    public int s43 = (int)Math.ceil(43*sfactor);
    public int s44 = (int)Math.ceil(44*sfactor);
    public int s45 = (int)Math.ceil(45*sfactor);
    public int s46 = (int)Math.ceil(46*sfactor);
    public int s47 = (int)Math.ceil(47*sfactor);
    public int s48 = (int)Math.ceil(48*sfactor);
    public int s49 = (int)Math.ceil(49*sfactor);
    public int s50 = (int)Math.ceil(50*sfactor);
    public int s51 = (int)Math.ceil(51*sfactor);
    public int s52 = (int)Math.ceil(52*sfactor);
    public int s53 = (int)Math.ceil(53*sfactor);
    public int s54 = (int)Math.ceil(54*sfactor);
    public int s55 = (int)Math.ceil(55*sfactor);
    public int s56 = (int)Math.ceil(56*sfactor);
    public int s57 = (int)Math.ceil(57*sfactor);
    public int s58 = (int)Math.ceil(58*sfactor);
    public int s59 = (int)Math.ceil(59*sfactor);
    public int s60 = (int)Math.ceil(60*sfactor);
    public int s61 = (int)Math.ceil(61*sfactor);
    public int s62 = (int)Math.ceil(62*sfactor);
    public int s63 = (int)Math.ceil(63*sfactor);
    public int s64 = (int)Math.ceil(64*sfactor);
    public int s65 = (int)Math.ceil(65*sfactor);
    public int s66 = (int)Math.ceil(66*sfactor);
    public int s67 = (int)Math.ceil(67*sfactor);
    public int s68 = (int)Math.ceil(68*sfactor);
    public int s69 = (int)Math.ceil(69*sfactor);
    public int s70 = (int)Math.ceil(70*sfactor);
    public int s71 = (int)Math.ceil(71*sfactor);
    public int s72 = (int)Math.ceil(72*sfactor);
    public int s73 = (int)Math.ceil(73*sfactor);
    public int s74 = (int)Math.ceil(74*sfactor);
    public int s75 = (int)Math.ceil(75*sfactor);
    public int s76 = (int)Math.ceil(76*sfactor);
    public int s77 = (int)Math.ceil(77*sfactor);
    public int s78 = (int)Math.ceil(78*sfactor);
    public int s79 = (int)Math.ceil(79*sfactor);
    public int s80 = (int)Math.ceil(80*sfactor);
    public int s81 = (int)Math.ceil(81*sfactor);
    public int s82 = (int)Math.ceil(82*sfactor);
    public int s83 = (int)Math.ceil(83*sfactor);
    public int s84 = (int)Math.ceil(84*sfactor);
    public int s85 = (int)Math.ceil(85*sfactor);
    public int s86 = (int)Math.ceil(86*sfactor);
    public int s87 = (int)Math.ceil(87*sfactor);
    public int s88 = (int)Math.ceil(88*sfactor);
    public int s89 = (int)Math.ceil(89*sfactor);
    public int s90 = (int)Math.ceil(90*sfactor);
    public int s91 = (int)Math.ceil(91*sfactor);
    public int s92 = (int)Math.ceil(92*sfactor);
    public int s93 = (int)Math.ceil(93*sfactor);
    public int s94 = (int)Math.ceil(94*sfactor);
    public int s95 = (int)Math.ceil(95*sfactor);
    public int s96 = (int)Math.ceil(96*sfactor);
    public int s97 = (int)Math.ceil(97*sfactor);
    public int s98 = (int)Math.ceil(98*sfactor);
    public int s99 = (int)Math.ceil(99*sfactor);
    
    public int s100 = (int)Math.ceil(100*sfactor);
    public int s101 = (int)Math.ceil(101*sfactor);
    public int s102 = (int)Math.ceil(102*sfactor);
    public int s103 = (int)Math.ceil(103*sfactor);
    public int s104 = (int)Math.ceil(104*sfactor);
    public int s105 = (int)Math.ceil(105*sfactor);
    public int s106 = (int)Math.ceil(106*sfactor);
    public int s107 = (int)Math.ceil(107*sfactor);
    public int s108 = (int)Math.ceil(108*sfactor);
    public int s109 = (int)Math.ceil(109*sfactor);
    public int s110 = (int)Math.ceil(110*sfactor);
    public int s111 = (int)Math.ceil(111*sfactor);
    public int s112 = (int)Math.ceil(112*sfactor);
    public int s113 = (int)Math.ceil(113*sfactor);
    public int s114 = (int)Math.ceil(114*sfactor);
    public int s115 = (int)Math.ceil(115*sfactor);
    public int s116 = (int)Math.ceil(116*sfactor);
    public int s117 = (int)Math.ceil(117*sfactor);
    public int s118 = (int)Math.ceil(118*sfactor);
    public int s119 = (int)Math.ceil(119*sfactor);
    public int s120 = (int)Math.ceil(120*sfactor);
    public int s121 = (int)Math.ceil(121*sfactor);
    public int s122 = (int)Math.ceil(122*sfactor);
    public int s123 = (int)Math.ceil(123*sfactor);
    public int s124 = (int)Math.ceil(124*sfactor);
    public int s125 = (int)Math.ceil(125*sfactor);
    public int s126 = (int)Math.ceil(126*sfactor);
    public int s127 = (int)Math.ceil(127*sfactor);
    public int s128 = (int)Math.ceil(128*sfactor);
    public int s129 = (int)Math.ceil(129*sfactor);
    public int s130 = (int)Math.ceil(130*sfactor);
    public int s131 = (int)Math.ceil(131*sfactor);
    public int s132 = (int)Math.ceil(132*sfactor);
    public int s133 = (int)Math.ceil(133*sfactor);
    public int s134 = (int)Math.ceil(134*sfactor);
    public int s135 = (int)Math.ceil(135*sfactor);
    public int s136 = (int)Math.ceil(136*sfactor);
    public int s137 = (int)Math.ceil(137*sfactor);
    public int s138 = (int)Math.ceil(138*sfactor);
    public int s139 = (int)Math.ceil(139*sfactor);
    public int s140 = (int)Math.ceil(140*sfactor);
    public int s141 = (int)Math.ceil(141*sfactor);
    public int s142 = (int)Math.ceil(142*sfactor);
    public int s143 = (int)Math.ceil(143*sfactor);
    public int s144 = (int)Math.ceil(144*sfactor);
    public int s145 = (int)Math.ceil(145*sfactor);
    public int s146 = (int)Math.ceil(146*sfactor);
    public int s147 = (int)Math.ceil(147*sfactor);
    public int s148 = (int)Math.ceil(148*sfactor);
    public int s149 = (int)Math.ceil(149*sfactor);
    public int s150 = (int)Math.ceil(150*sfactor);
    public int s151 = (int)Math.ceil(151*sfactor);
    public int s152 = (int)Math.ceil(152*sfactor);
    public int s153 = (int)Math.ceil(153*sfactor);
    public int s154 = (int)Math.ceil(154*sfactor);
    public int s155 = (int)Math.ceil(155*sfactor);
    public int s156 = (int)Math.ceil(156*sfactor);
    public int s157 = (int)Math.ceil(157*sfactor);
    public int s158 = (int)Math.ceil(158*sfactor);
    public int s159 = (int)Math.ceil(159*sfactor);
    public int s160 = (int)Math.ceil(160*sfactor);
    public int s161 = (int)Math.ceil(161*sfactor);
    public int s162 = (int)Math.ceil(162*sfactor);
    public int s163 = (int)Math.ceil(163*sfactor);
    public int s164 = (int)Math.ceil(164*sfactor);
    public int s165 = (int)Math.ceil(165*sfactor);
    public int s166 = (int)Math.ceil(166*sfactor);
    public int s167 = (int)Math.ceil(167*sfactor);
    public int s168 = (int)Math.ceil(168*sfactor);
    public int s169 = (int)Math.ceil(169*sfactor);
    public int s170 = (int)Math.ceil(170*sfactor);
    public int s171 = (int)Math.ceil(171*sfactor);
    public int s172 = (int)Math.ceil(172*sfactor);
    public int s173 = (int)Math.ceil(173*sfactor);
    public int s174 = (int)Math.ceil(174*sfactor);
    public int s175 = (int)Math.ceil(175*sfactor);
    public int s176 = (int)Math.ceil(176*sfactor);
    public int s177 = (int)Math.ceil(177*sfactor);
    public int s178 = (int)Math.ceil(178*sfactor);
    public int s179 = (int)Math.ceil(179*sfactor);
    public int s180 = (int)Math.ceil(180*sfactor);
    public int s181 = (int)Math.ceil(181*sfactor);
    public int s182 = (int)Math.ceil(182*sfactor);
    public int s183 = (int)Math.ceil(183*sfactor);
    public int s184 = (int)Math.ceil(184*sfactor);
    public int s185 = (int)Math.ceil(185*sfactor);
    public int s186 = (int)Math.ceil(186*sfactor);
    public int s187 = (int)Math.ceil(187*sfactor);
    public int s188 = (int)Math.ceil(188*sfactor);
    public int s189 = (int)Math.ceil(189*sfactor);
    public int s190 = (int)Math.ceil(190*sfactor);
    public int s191 = (int)Math.ceil(191*sfactor);
    public int s192 = (int)Math.ceil(192*sfactor);
    public int s193 = (int)Math.ceil(193*sfactor);
    public int s194 = (int)Math.ceil(194*sfactor);
    public int s195 = (int)Math.ceil(195*sfactor);
    public int s196 = (int)Math.ceil(196*sfactor);
    public int s197 = (int)Math.ceil(197*sfactor);
    public int s198 = (int)Math.ceil(198*sfactor);
    public int s199 = (int)Math.ceil(199*sfactor);
    
    public int s200 = (int)Math.ceil(200*sfactor);
    public int s201 = (int)Math.ceil(201*sfactor);
    public int s202 = (int)Math.ceil(202*sfactor);
    public int s203 = (int)Math.ceil(203*sfactor);
    public int s204 = (int)Math.ceil(204*sfactor);
    public int s205 = (int)Math.ceil(205*sfactor);
    public int s206 = (int)Math.ceil(206*sfactor);
    public int s207 = (int)Math.ceil(207*sfactor);
    public int s208 = (int)Math.ceil(208*sfactor);
    public int s209 = (int)Math.ceil(209*sfactor);
    public int s210 = (int)Math.ceil(210*sfactor);
    public int s211 = (int)Math.ceil(211*sfactor);
    public int s212 = (int)Math.ceil(212*sfactor);
    public int s213 = (int)Math.ceil(213*sfactor);
    public int s214 = (int)Math.ceil(214*sfactor);
    public int s215 = (int)Math.ceil(215*sfactor);
    public int s216 = (int)Math.ceil(216*sfactor);
    public int s217 = (int)Math.ceil(217*sfactor);
    public int s218 = (int)Math.ceil(218*sfactor);
    public int s219 = (int)Math.ceil(219*sfactor);
    public int s220 = (int)Math.ceil(220*sfactor);
    public int s221 = (int)Math.ceil(221*sfactor);
    public int s222 = (int)Math.ceil(222*sfactor);
    public int s223 = (int)Math.ceil(223*sfactor);
    public int s224 = (int)Math.ceil(224*sfactor);
    public int s225 = (int)Math.ceil(225*sfactor);
    public int s226 = (int)Math.ceil(226*sfactor);
    public int s227 = (int)Math.ceil(227*sfactor);
    public int s228 = (int)Math.ceil(228*sfactor);
    public int s229 = (int)Math.ceil(229*sfactor);
    public int s230 = (int)Math.ceil(230*sfactor);
    public int s231 = (int)Math.ceil(231*sfactor);
    public int s232 = (int)Math.ceil(232*sfactor);
    public int s233 = (int)Math.ceil(233*sfactor);
    public int s234 = (int)Math.ceil(234*sfactor);
    public int s235 = (int)Math.ceil(235*sfactor);
    public int s236 = (int)Math.ceil(236*sfactor);
    public int s237 = (int)Math.ceil(237*sfactor);
    public int s238 = (int)Math.ceil(238*sfactor);
    public int s239 = (int)Math.ceil(239*sfactor);
    public int s240 = (int)Math.ceil(240*sfactor);
    public int s241 = (int)Math.ceil(241*sfactor);
    public int s242 = (int)Math.ceil(242*sfactor);
    public int s243 = (int)Math.ceil(243*sfactor);
    public int s244 = (int)Math.ceil(244*sfactor);
    public int s245 = (int)Math.ceil(245*sfactor);
    public int s246 = (int)Math.ceil(246*sfactor);
    public int s247 = (int)Math.ceil(247*sfactor);
    public int s248 = (int)Math.ceil(248*sfactor);
    public int s249 = (int)Math.ceil(249*sfactor);
    public int s250 = (int)Math.ceil(250*sfactor);
    public int s251 = (int)Math.ceil(251*sfactor);
    public int s252 = (int)Math.ceil(252*sfactor);
    public int s253 = (int)Math.ceil(253*sfactor);
    public int s254 = (int)Math.ceil(254*sfactor);
    public int s255 = (int)Math.ceil(255*sfactor);
    public int s256 = (int)Math.ceil(256*sfactor);
    public int s257 = (int)Math.ceil(257*sfactor);
    public int s258 = (int)Math.ceil(258*sfactor);
    public int s259 = (int)Math.ceil(259*sfactor);
    public int s260 = (int)Math.ceil(260*sfactor);
    public int s261 = (int)Math.ceil(261*sfactor);
    public int s262 = (int)Math.ceil(262*sfactor);
    public int s263 = (int)Math.ceil(263*sfactor);
    public int s264 = (int)Math.ceil(264*sfactor);
    public int s265 = (int)Math.ceil(265*sfactor);
    public int s266 = (int)Math.ceil(266*sfactor);
    public int s267 = (int)Math.ceil(267*sfactor);
    public int s268 = (int)Math.ceil(268*sfactor);
    public int s269 = (int)Math.ceil(269*sfactor);
    public int s270 = (int)Math.ceil(270*sfactor);
    public int s271 = (int)Math.ceil(271*sfactor);
    public int s272 = (int)Math.ceil(272*sfactor);
    public int s273 = (int)Math.ceil(273*sfactor);
    public int s274 = (int)Math.ceil(274*sfactor);
    public int s275 = (int)Math.ceil(275*sfactor);
    public int s276 = (int)Math.ceil(276*sfactor);
    public int s277 = (int)Math.ceil(277*sfactor);
    public int s278 = (int)Math.ceil(278*sfactor);
    public int s279 = (int)Math.ceil(279*sfactor);
    public int s280 = (int)Math.ceil(280*sfactor);
    public int s281 = (int)Math.ceil(281*sfactor);
    public int s282 = (int)Math.ceil(282*sfactor);
    public int s283 = (int)Math.ceil(283*sfactor);
    public int s284 = (int)Math.ceil(284*sfactor);
    public int s285 = (int)Math.ceil(285*sfactor);
    public int s286 = (int)Math.ceil(286*sfactor);
    public int s287 = (int)Math.ceil(287*sfactor);
    public int s288 = (int)Math.ceil(288*sfactor);
    public int s289 = (int)Math.ceil(289*sfactor);
    public int s290 = (int)Math.ceil(290*sfactor);
    public int s291 = (int)Math.ceil(291*sfactor);
    public int s292 = (int)Math.ceil(292*sfactor);
    public int s293 = (int)Math.ceil(293*sfactor);
    public int s294 = (int)Math.ceil(294*sfactor);
    public int s295 = (int)Math.ceil(295*sfactor);
    public int s296 = (int)Math.ceil(296*sfactor);
    public int s297 = (int)Math.ceil(297*sfactor);
    public int s298 = (int)Math.ceil(298*sfactor);
    public int s299 = (int)Math.ceil(299*sfactor);
    
    public int s300 = (int)Math.ceil(300*sfactor);
    public int s301 = (int)Math.ceil(301*sfactor);
    public int s302 = (int)Math.ceil(302*sfactor);
    public int s303 = (int)Math.ceil(303*sfactor);
    public int s304 = (int)Math.ceil(304*sfactor);
    public int s305 = (int)Math.ceil(305*sfactor);
    public int s306 = (int)Math.ceil(306*sfactor);
    public int s307 = (int)Math.ceil(307*sfactor);
    public int s308 = (int)Math.ceil(308*sfactor);
    public int s309 = (int)Math.ceil(309*sfactor);
    public int s310 = (int)Math.ceil(310*sfactor);
    public int s311 = (int)Math.ceil(311*sfactor);
    public int s312 = (int)Math.ceil(312*sfactor);
    public int s313 = (int)Math.ceil(313*sfactor);
    public int s314 = (int)Math.ceil(314*sfactor);
    public int s315 = (int)Math.ceil(315*sfactor);
    public int s316 = (int)Math.ceil(316*sfactor);
    public int s317 = (int)Math.ceil(317*sfactor);
    public int s318 = (int)Math.ceil(318*sfactor);
    public int s319 = (int)Math.ceil(319*sfactor);
    public int s320 = (int)Math.ceil(320*sfactor);
    public int s321 = (int)Math.ceil(321*sfactor);
    public int s322 = (int)Math.ceil(322*sfactor);
    public int s323 = (int)Math.ceil(323*sfactor);
    public int s324 = (int)Math.ceil(324*sfactor);
    public int s325 = (int)Math.ceil(325*sfactor);
    public int s326 = (int)Math.ceil(326*sfactor);
    public int s327 = (int)Math.ceil(327*sfactor);
    public int s328 = (int)Math.ceil(328*sfactor);
    public int s329 = (int)Math.ceil(329*sfactor);
    public int s330 = (int)Math.ceil(330*sfactor);
    public int s331 = (int)Math.ceil(331*sfactor);
    public int s332 = (int)Math.ceil(332*sfactor);
    public int s333 = (int)Math.ceil(333*sfactor);
    public int s334 = (int)Math.ceil(334*sfactor);
    public int s335 = (int)Math.ceil(335*sfactor);
    public int s336 = (int)Math.ceil(336*sfactor);
    public int s337 = (int)Math.ceil(337*sfactor);
    public int s338 = (int)Math.ceil(338*sfactor);
    public int s339 = (int)Math.ceil(339*sfactor);
    public int s340 = (int)Math.ceil(340*sfactor);
    public int s341 = (int)Math.ceil(341*sfactor);
    public int s342 = (int)Math.ceil(342*sfactor);
    public int s343 = (int)Math.ceil(343*sfactor);
    public int s344 = (int)Math.ceil(344*sfactor);
    public int s345 = (int)Math.ceil(345*sfactor);
    public int s346 = (int)Math.ceil(346*sfactor);
    public int s347 = (int)Math.ceil(347*sfactor);
    public int s348 = (int)Math.ceil(348*sfactor);
    public int s349 = (int)Math.ceil(349*sfactor);
    public int s350 = (int)Math.ceil(350*sfactor);
    public int s351 = (int)Math.ceil(351*sfactor);
    public int s352 = (int)Math.ceil(352*sfactor);
    public int s353 = (int)Math.ceil(353*sfactor);
    public int s354 = (int)Math.ceil(354*sfactor);
    public int s355 = (int)Math.ceil(355*sfactor);
    public int s356 = (int)Math.ceil(356*sfactor);
    public int s357 = (int)Math.ceil(357*sfactor);
    public int s358 = (int)Math.ceil(358*sfactor);
    public int s359 = (int)Math.ceil(359*sfactor);
    public int s360 = (int)Math.ceil(360*sfactor);
    public int s361 = (int)Math.ceil(361*sfactor);
    public int s362 = (int)Math.ceil(362*sfactor);
    public int s363 = (int)Math.ceil(363*sfactor);
    public int s364 = (int)Math.ceil(364*sfactor);
    public int s365 = (int)Math.ceil(365*sfactor);
    public int s366 = (int)Math.ceil(366*sfactor);
    public int s367 = (int)Math.ceil(367*sfactor);
    public int s368 = (int)Math.ceil(368*sfactor);
    public int s369 = (int)Math.ceil(369*sfactor);
    public int s370 = (int)Math.ceil(370*sfactor);
    public int s371 = (int)Math.ceil(371*sfactor);
    public int s372 = (int)Math.ceil(372*sfactor);
    public int s373 = (int)Math.ceil(373*sfactor);
    public int s374 = (int)Math.ceil(374*sfactor);
    public int s375 = (int)Math.ceil(375*sfactor);
    public int s376 = (int)Math.ceil(376*sfactor);
    public int s377 = (int)Math.ceil(377*sfactor);
    public int s378 = (int)Math.ceil(378*sfactor);
    public int s379 = (int)Math.ceil(379*sfactor);
    public int s380 = (int)Math.ceil(380*sfactor);
    public int s381 = (int)Math.ceil(381*sfactor);
    public int s382 = (int)Math.ceil(382*sfactor);
    public int s383 = (int)Math.ceil(383*sfactor);
    public int s384 = (int)Math.ceil(384*sfactor);
    public int s385 = (int)Math.ceil(385*sfactor);
    public int s386 = (int)Math.ceil(386*sfactor);
    public int s387 = (int)Math.ceil(387*sfactor);
    public int s388 = (int)Math.ceil(388*sfactor);
    public int s389 = (int)Math.ceil(389*sfactor);
    public int s390 = (int)Math.ceil(390*sfactor);
    public int s391 = (int)Math.ceil(391*sfactor);
    public int s392 = (int)Math.ceil(392*sfactor);
    public int s393 = (int)Math.ceil(393*sfactor);
    public int s394 = (int)Math.ceil(394*sfactor);
    public int s395 = (int)Math.ceil(395*sfactor);
    public int s396 = (int)Math.ceil(396*sfactor);
    public int s397 = (int)Math.ceil(397*sfactor);
    public int s398 = (int)Math.ceil(398*sfactor);
    public int s399 = (int)Math.ceil(399*sfactor);
    
    public int s400 = (int)Math.ceil(400*sfactor);
    public int s401 = (int)Math.ceil(401*sfactor);
    public int s402 = (int)Math.ceil(402*sfactor);
    public int s403 = (int)Math.ceil(403*sfactor);
    public int s404 = (int)Math.ceil(404*sfactor);
    public int s405 = (int)Math.ceil(405*sfactor);
    public int s406 = (int)Math.ceil(406*sfactor);
    public int s407 = (int)Math.ceil(407*sfactor);
    public int s408 = (int)Math.ceil(408*sfactor);
    public int s409 = (int)Math.ceil(409*sfactor);
    public int s410 = (int)Math.ceil(410*sfactor);
    public int s411 = (int)Math.ceil(411*sfactor);
    public int s412 = (int)Math.ceil(412*sfactor);
    public int s413 = (int)Math.ceil(413*sfactor);
    public int s414 = (int)Math.ceil(414*sfactor);
    public int s415 = (int)Math.ceil(415*sfactor);
    public int s416 = (int)Math.ceil(416*sfactor);
    public int s417 = (int)Math.ceil(417*sfactor);
    public int s418 = (int)Math.ceil(418*sfactor);
    public int s419 = (int)Math.ceil(419*sfactor);
    public int s420 = (int)Math.ceil(420*sfactor);
    public int s421 = (int)Math.ceil(421*sfactor);
    public int s422 = (int)Math.ceil(422*sfactor);
    public int s423 = (int)Math.ceil(423*sfactor);
    public int s424 = (int)Math.ceil(424*sfactor);
    public int s425 = (int)Math.ceil(425*sfactor);
    public int s426 = (int)Math.ceil(426*sfactor);
    public int s427 = (int)Math.ceil(427*sfactor);
    public int s428 = (int)Math.ceil(428*sfactor);
    public int s429 = (int)Math.ceil(429*sfactor);
    public int s430 = (int)Math.ceil(430*sfactor);
    public int s431 = (int)Math.ceil(431*sfactor);
    public int s432 = (int)Math.ceil(432*sfactor);
    public int s433 = (int)Math.ceil(433*sfactor);
    public int s434 = (int)Math.ceil(434*sfactor);
    public int s435 = (int)Math.ceil(435*sfactor);
    public int s436 = (int)Math.ceil(36*sfactor);
    public int s437 = (int)Math.ceil(37*sfactor);
    public int s438 = (int)Math.ceil(38*sfactor);
    public int s439 = (int)Math.ceil(439*sfactor);
    public int s440 = (int)Math.ceil(440*sfactor);
    public int s441 = (int)Math.ceil(441*sfactor);
    public int s442 = (int)Math.ceil(442*sfactor);
    public int s443 = (int)Math.ceil(443*sfactor);
    public int s444 = (int)Math.ceil(444*sfactor);
    public int s445 = (int)Math.ceil(445*sfactor);
    public int s446 = (int)Math.ceil(446*sfactor);
    public int s447 = (int)Math.ceil(447*sfactor);
    public int s448 = (int)Math.ceil(448*sfactor);
    public int s449 = (int)Math.ceil(449*sfactor);
    public int s450 = (int)Math.ceil(450*sfactor);
    public int s451 = (int)Math.ceil(451*sfactor);
    public int s452 = (int)Math.ceil(452*sfactor);
    public int s453 = (int)Math.ceil(453*sfactor);
    public int s454 = (int)Math.ceil(454*sfactor);
    public int s455 = (int)Math.ceil(455*sfactor);
    public int s456 = (int)Math.ceil(456*sfactor);
    public int s457 = (int)Math.ceil(457*sfactor);
    public int s458 = (int)Math.ceil(458*sfactor);
    public int s459 = (int)Math.ceil(459*sfactor);
    public int s460 = (int)Math.ceil(460*sfactor);
    public int s461 = (int)Math.ceil(461*sfactor);
    public int s462 = (int)Math.ceil(462*sfactor);
    public int s463 = (int)Math.ceil(463*sfactor);
    public int s464 = (int)Math.ceil(464*sfactor);
    public int s465 = (int)Math.ceil(465*sfactor);
    public int s466 = (int)Math.ceil(466*sfactor);
    public int s467 = (int)Math.ceil(467*sfactor);
    public int s468 = (int)Math.ceil(468*sfactor);
    public int s469 = (int)Math.ceil(469*sfactor);
    public int s470 = (int)Math.ceil(470*sfactor);
    public int s471 = (int)Math.ceil(471*sfactor);
    public int s472 = (int)Math.ceil(472*sfactor);
    public int s473 = (int)Math.ceil(473*sfactor);
    public int s474 = (int)Math.ceil(474*sfactor);
    public int s475 = (int)Math.ceil(475*sfactor);
    public int s476 = (int)Math.ceil(476*sfactor);
    public int s477 = (int)Math.ceil(477*sfactor);
    public int s478 = (int)Math.ceil(478*sfactor);
    public int s479 = (int)Math.ceil(479*sfactor);
    public int s480 = (int)Math.ceil(480*sfactor);
    public int s481 = (int)Math.ceil(481*sfactor);
    public int s482 = (int)Math.ceil(482*sfactor);
    public int s483 = (int)Math.ceil(483*sfactor);
    public int s484 = (int)Math.ceil(484*sfactor);
    public int s485 = (int)Math.ceil(485*sfactor);
    public int s486 = (int)Math.ceil(486*sfactor);
    public int s487 = (int)Math.ceil(487*sfactor);
    public int s488 = (int)Math.ceil(488*sfactor);
    public int s489 = (int)Math.ceil(489*sfactor);
    public int s490 = (int)Math.ceil(490*sfactor);
    public int s491 = (int)Math.ceil(491*sfactor);
    public int s492 = (int)Math.ceil(492*sfactor);
    public int s493 = (int)Math.ceil(493*sfactor);
    public int s494 = (int)Math.ceil(494*sfactor);
    public int s495 = (int)Math.ceil(495*sfactor);
    public int s496 = (int)Math.ceil(496*sfactor);
    public int s497 = (int)Math.ceil(497*sfactor);
    public int s498 = (int)Math.ceil(498*sfactor);
    public int s499 = (int)Math.ceil(499*sfactor);
    
    public int s500 = (int)Math.ceil(500*sfactor);
    public int s501 = (int)Math.ceil(501*sfactor);
    public int s502 = (int)Math.ceil(502*sfactor);
    public int s503 = (int)Math.ceil(503*sfactor);
    public int s504 = (int)Math.ceil(504*sfactor);
    public int s505 = (int)Math.ceil(505*sfactor);
    public int s506 = (int)Math.ceil(506*sfactor);
    public int s507 = (int)Math.ceil(507*sfactor);
    public int s508 = (int)Math.ceil(508*sfactor);
    public int s509 = (int)Math.ceil(509*sfactor);
    public int s510 = (int)Math.ceil(510*sfactor);
    public int s511 = (int)Math.ceil(511*sfactor);
    public int s512 = (int)Math.ceil(512*sfactor);
    public int s513 = (int)Math.ceil(513*sfactor);
    public int s514 = (int)Math.ceil(514*sfactor);
    public int s515 = (int)Math.ceil(515*sfactor);
    public int s516 = (int)Math.ceil(516*sfactor);
    public int s517 = (int)Math.ceil(517*sfactor);
    public int s518 = (int)Math.ceil(518*sfactor);
    public int s519 = (int)Math.ceil(519*sfactor);
    public int s520 = (int)Math.ceil(520*sfactor);
    public int s521 = (int)Math.ceil(521*sfactor);
    public int s522 = (int)Math.ceil(522*sfactor);
    public int s523 = (int)Math.ceil(523*sfactor);
    public int s524 = (int)Math.ceil(524*sfactor);
    public int s525 = (int)Math.ceil(525*sfactor);
    public int s526 = (int)Math.ceil(526*sfactor);
    public int s527 = (int)Math.ceil(527*sfactor);
    public int s528 = (int)Math.ceil(528*sfactor);
    public int s529 = (int)Math.ceil(529*sfactor);
    public int s530 = (int)Math.ceil(530*sfactor);
    public int s531 = (int)Math.ceil(531*sfactor);
    public int s532 = (int)Math.ceil(532*sfactor);
    public int s533 = (int)Math.ceil(533*sfactor);
    public int s534 = (int)Math.ceil(534*sfactor);
    public int s535 = (int)Math.ceil(535*sfactor);
    public int s536 = (int)Math.ceil(536*sfactor);
    public int s537 = (int)Math.ceil(537*sfactor);
    public int s538 = (int)Math.ceil(538*sfactor);
    public int s539 = (int)Math.ceil(539*sfactor);
    public int s540 = (int)Math.ceil(540*sfactor);
    public int s541 = (int)Math.ceil(541*sfactor);
    public int s542 = (int)Math.ceil(542*sfactor);
    public int s543 = (int)Math.ceil(543*sfactor);
    public int s544 = (int)Math.ceil(544*sfactor);
    public int s545 = (int)Math.ceil(545*sfactor);
    public int s546 = (int)Math.ceil(546*sfactor);
    public int s547 = (int)Math.ceil(547*sfactor);
    public int s548 = (int)Math.ceil(548*sfactor);
    public int s549 = (int)Math.ceil(549*sfactor);
    public int s550 = (int)Math.ceil(550*sfactor);
    public int s551 = (int)Math.ceil(551*sfactor);
    public int s552 = (int)Math.ceil(552*sfactor);
    public int s553 = (int)Math.ceil(553*sfactor);
    public int s554 = (int)Math.ceil(554*sfactor);
    public int s555 = (int)Math.ceil(555*sfactor);
    public int s556 = (int)Math.ceil(556*sfactor);
    public int s557 = (int)Math.ceil(557*sfactor);
    public int s558 = (int)Math.ceil(558*sfactor);
    public int s559 = (int)Math.ceil(559*sfactor);
    public int s560 = (int)Math.ceil(560*sfactor);
    public int s561 = (int)Math.ceil(561*sfactor);
    public int s562 = (int)Math.ceil(562*sfactor);
    public int s563 = (int)Math.ceil(563*sfactor);
    public int s564 = (int)Math.ceil(564*sfactor);
    public int s565 = (int)Math.ceil(565*sfactor);
    public int s566 = (int)Math.ceil(566*sfactor);
    public int s567 = (int)Math.ceil(567*sfactor);
    public int s568 = (int)Math.ceil(568*sfactor);
    public int s569 = (int)Math.ceil(569*sfactor);
    public int s570 = (int)Math.ceil(570*sfactor);
    public int s571 = (int)Math.ceil(571*sfactor);
    public int s572 = (int)Math.ceil(572*sfactor);
    public int s573 = (int)Math.ceil(573*sfactor);
    public int s574 = (int)Math.ceil(574*sfactor);
    public int s575 = (int)Math.ceil(575*sfactor);
    public int s576 = (int)Math.ceil(576*sfactor);
    public int s577 = (int)Math.ceil(577*sfactor);
    public int s578 = (int)Math.ceil(578*sfactor);
    public int s579 = (int)Math.ceil(579*sfactor);
    public int s580 = (int)Math.ceil(580*sfactor);
    public int s581 = (int)Math.ceil(581*sfactor);
    public int s582 = (int)Math.ceil(582*sfactor);
    public int s583 = (int)Math.ceil(583*sfactor);
    public int s584 = (int)Math.ceil(584*sfactor);
    public int s585 = (int)Math.ceil(585*sfactor);
    public int s586 = (int)Math.ceil(586*sfactor);
    public int s587 = (int)Math.ceil(587*sfactor);
    public int s588 = (int)Math.ceil(588*sfactor);
    public int s589 = (int)Math.ceil(589*sfactor);
    public int s590 = (int)Math.ceil(590*sfactor);
    public int s591 = (int)Math.ceil(591*sfactor);
    public int s592 = (int)Math.ceil(592*sfactor);
    public int s593 = (int)Math.ceil(593*sfactor);
    public int s594 = (int)Math.ceil(594*sfactor);
    public int s595 = (int)Math.ceil(595*sfactor);
    public int s596 = (int)Math.ceil(596*sfactor);
    public int s597 = (int)Math.ceil(597*sfactor);
    public int s598 = (int)Math.ceil(598*sfactor);
    public int s599 = (int)Math.ceil(599*sfactor);
    
    public int s600 = (int)Math.ceil(600*sfactor);
    public int s601 = (int)Math.ceil(601*sfactor);
    public int s602 = (int)Math.ceil(602*sfactor);
    public int s603 = (int)Math.ceil(603*sfactor);
    public int s604 = (int)Math.ceil(604*sfactor);
    public int s605 = (int)Math.ceil(605*sfactor);
    public int s606 = (int)Math.ceil(606*sfactor);
    public int s607 = (int)Math.ceil(607*sfactor);
    public int s608 = (int)Math.ceil(608*sfactor);
    public int s609 = (int)Math.ceil(609*sfactor);
    public int s610 = (int)Math.ceil(610*sfactor);
    public int s611 = (int)Math.ceil(611*sfactor);
    public int s612 = (int)Math.ceil(612*sfactor);
    public int s613 = (int)Math.ceil(613*sfactor);
    public int s614 = (int)Math.ceil(614*sfactor);
    public int s615 = (int)Math.ceil(615*sfactor);
    public int s616 = (int)Math.ceil(616*sfactor);
    public int s617 = (int)Math.ceil(617*sfactor);
    public int s618 = (int)Math.ceil(618*sfactor);
    public int s619 = (int)Math.ceil(619*sfactor);
    public int s620 = (int)Math.ceil(620*sfactor);
    public int s621 = (int)Math.ceil(621*sfactor);
    public int s622 = (int)Math.ceil(622*sfactor);
    public int s623 = (int)Math.ceil(623*sfactor);
    public int s624 = (int)Math.ceil(624*sfactor);
    public int s625 = (int)Math.ceil(625*sfactor);
    public int s626 = (int)Math.ceil(626*sfactor);
    public int s627 = (int)Math.ceil(627*sfactor);
    public int s628 = (int)Math.ceil(628*sfactor);
    public int s629 = (int)Math.ceil(629*sfactor);
    public int s630 = (int)Math.ceil(630*sfactor);
    public int s631 = (int)Math.ceil(631*sfactor);
    public int s632 = (int)Math.ceil(632*sfactor);
    public int s633 = (int)Math.ceil(633*sfactor);
    public int s634 = (int)Math.ceil(634*sfactor);
    public int s635 = (int)Math.ceil(635*sfactor);
    public int s636 = (int)Math.ceil(636*sfactor);
    public int s637 = (int)Math.ceil(637*sfactor);
    public int s638 = (int)Math.ceil(638*sfactor);
    public int s639 = (int)Math.ceil(639*sfactor);
    public int s640 = (int)Math.ceil(640*sfactor);
    public int s641 = (int)Math.ceil(641*sfactor);
    public int s642 = (int)Math.ceil(642*sfactor);
    public int s643 = (int)Math.ceil(643*sfactor);
    public int s644 = (int)Math.ceil(644*sfactor);
    public int s645 = (int)Math.ceil(645*sfactor);
    public int s646 = (int)Math.ceil(646*sfactor);
    public int s647 = (int)Math.ceil(647*sfactor);
    public int s648 = (int)Math.ceil(648*sfactor);
    public int s649 = (int)Math.ceil(649*sfactor);
    public int s650 = (int)Math.ceil(650*sfactor);
    public int s651 = (int)Math.ceil(651*sfactor);
    public int s652 = (int)Math.ceil(652*sfactor);
    public int s653 = (int)Math.ceil(653*sfactor);
    public int s654 = (int)Math.ceil(54*sfactor);
    public int s655 = (int)Math.ceil(655*sfactor);
    public int s656 = (int)Math.ceil(656*sfactor);
    public int s657 = (int)Math.ceil(657*sfactor);
    public int s658 = (int)Math.ceil(658*sfactor);
    public int s659 = (int)Math.ceil(659*sfactor);
    public int s660 = (int)Math.ceil(660*sfactor);
    public int s661 = (int)Math.ceil(661*sfactor);
    public int s662 = (int)Math.ceil(662*sfactor);
    public int s663 = (int)Math.ceil(663*sfactor);
    public int s664 = (int)Math.ceil(664*sfactor);
    public int s665 = (int)Math.ceil(665*sfactor);
    public int s666 = (int)Math.ceil(666*sfactor);
    public int s667 = (int)Math.ceil(667*sfactor);
    public int s668 = (int)Math.ceil(668*sfactor);
    public int s669 = (int)Math.ceil(669*sfactor);
    public int s670 = (int)Math.ceil(670*sfactor);
    public int s671 = (int)Math.ceil(671*sfactor);
    public int s672 = (int)Math.ceil(672*sfactor);
    public int s673 = (int)Math.ceil(673*sfactor);
    public int s674 = (int)Math.ceil(674*sfactor);
    public int s675 = (int)Math.ceil(675*sfactor);
    public int s676 = (int)Math.ceil(676*sfactor);
    public int s677 = (int)Math.ceil(677*sfactor);
    public int s678 = (int)Math.ceil(678*sfactor);
    public int s679 = (int)Math.ceil(679*sfactor);
    public int s680 = (int)Math.ceil(680*sfactor);
    public int s681 = (int)Math.ceil(681*sfactor);
    public int s682 = (int)Math.ceil(682*sfactor);
    public int s683 = (int)Math.ceil(683*sfactor);
    public int s684 = (int)Math.ceil(684*sfactor);
    public int s685 = (int)Math.ceil(685*sfactor);
    public int s686 = (int)Math.ceil(686*sfactor);
    public int s687 = (int)Math.ceil(687*sfactor);
    public int s688 = (int)Math.ceil(688*sfactor);
    public int s689 = (int)Math.ceil(689*sfactor);
    public int s690 = (int)Math.ceil(690*sfactor);
    public int s691 = (int)Math.ceil(691*sfactor);
    public int s692 = (int)Math.ceil(692*sfactor);
    public int s693 = (int)Math.ceil(693*sfactor);
    public int s694 = (int)Math.ceil(694*sfactor);
    public int s695 = (int)Math.ceil(695*sfactor);
    public int s696 = (int)Math.ceil(696*sfactor);
    public int s697 = (int)Math.ceil(697*sfactor);
    public int s698 = (int)Math.ceil(698*sfactor);
    public int s699 = (int)Math.ceil(699*sfactor);
        
    public int s700 = (int)Math.ceil(700*sfactor);
    public int s701 = (int)Math.ceil(701*sfactor);
    public int s702 = (int)Math.ceil(702*sfactor);
    public int s703 = (int)Math.ceil(703*sfactor);
    public int s704 = (int)Math.ceil(704*sfactor);
    public int s705 = (int)Math.ceil(705*sfactor);
    public int s706 = (int)Math.ceil(706*sfactor);
    public int s707 = (int)Math.ceil(707*sfactor);
    public int s708 = (int)Math.ceil(708*sfactor);
    public int s709 = (int)Math.ceil(709*sfactor);
    public int s710 = (int)Math.ceil(710*sfactor);
    public int s711 = (int)Math.ceil(711*sfactor);
    public int s712 = (int)Math.ceil(712*sfactor);
    public int s713 = (int)Math.ceil(713*sfactor);
    public int s714 = (int)Math.ceil(714*sfactor);
    public int s715 = (int)Math.ceil(715*sfactor);
    public int s716 = (int)Math.ceil(716*sfactor);
    public int s717 = (int)Math.ceil(717*sfactor);
    public int s718 = (int)Math.ceil(718*sfactor);
    public int s719 = (int)Math.ceil(719*sfactor);
    public int s720 = (int)Math.ceil(720*sfactor);
    public int s721 = (int)Math.ceil(721*sfactor);
    public int s722 = (int)Math.ceil(722*sfactor);
    public int s723 = (int)Math.ceil(723*sfactor);
    public int s724 = (int)Math.ceil(724*sfactor);
    public int s725 = (int)Math.ceil(725*sfactor);
    public int s726 = (int)Math.ceil(726*sfactor);
    public int s727 = (int)Math.ceil(727*sfactor);
    public int s728 = (int)Math.ceil(728*sfactor);
    public int s729 = (int)Math.ceil(729*sfactor);
    public int s730 = (int)Math.ceil(730*sfactor);
    public int s731 = (int)Math.ceil(731*sfactor);
    public int s732 = (int)Math.ceil(732*sfactor);
    public int s733 = (int)Math.ceil(733*sfactor);
    public int s734 = (int)Math.ceil(734*sfactor);
    public int s735 = (int)Math.ceil(735*sfactor);
    public int s736 = (int)Math.ceil(736*sfactor);
    public int s737 = (int)Math.ceil(737*sfactor);
    public int s738 = (int)Math.ceil(738*sfactor);
    public int s739 = (int)Math.ceil(739*sfactor);
    public int s740 = (int)Math.ceil(740*sfactor);
    public int s741 = (int)Math.ceil(741*sfactor);
    public int s742 = (int)Math.ceil(742*sfactor);
    public int s743 = (int)Math.ceil(743*sfactor);
    public int s744 = (int)Math.ceil(744*sfactor);
    public int s745 = (int)Math.ceil(745*sfactor);
    public int s746 = (int)Math.ceil(746*sfactor);
    public int s747 = (int)Math.ceil(747*sfactor);
    public int s748 = (int)Math.ceil(748*sfactor);
    public int s749 = (int)Math.ceil(749*sfactor);
    public int s750 = (int)Math.ceil(750*sfactor);
    public int s751 = (int)Math.ceil(751*sfactor);
    public int s752 = (int)Math.ceil(752*sfactor);
    public int s753 = (int)Math.ceil(753*sfactor);
    public int s754 = (int)Math.ceil(754*sfactor);
    public int s755 = (int)Math.ceil(755*sfactor);
    public int s756 = (int)Math.ceil(756*sfactor);
    public int s757 = (int)Math.ceil(757*sfactor);
    public int s758 = (int)Math.ceil(758*sfactor);
    public int s759 = (int)Math.ceil(759*sfactor);
    public int s760 = (int)Math.ceil(760*sfactor);
    public int s761 = (int)Math.ceil(761*sfactor);
    public int s762 = (int)Math.ceil(762*sfactor);
    public int s763 = (int)Math.ceil(763*sfactor);
    public int s764 = (int)Math.ceil(764*sfactor);
    public int s765 = (int)Math.ceil(765*sfactor);
    public int s766 = (int)Math.ceil(766*sfactor);
    public int s767 = (int)Math.ceil(767*sfactor);
    public int s768 = (int)Math.ceil(768*sfactor);
    public int s769 = (int)Math.ceil(769*sfactor);
    public int s770 = (int)Math.ceil(770*sfactor);
    public int s771 = (int)Math.ceil(771*sfactor);
    public int s772 = (int)Math.ceil(772*sfactor);
    public int s773 = (int)Math.ceil(773*sfactor);
    public int s774 = (int)Math.ceil(774*sfactor);
    public int s775 = (int)Math.ceil(775*sfactor);
    public int s776 = (int)Math.ceil(776*sfactor);
    public int s777 = (int)Math.ceil(777*sfactor);
    public int s778 = (int)Math.ceil(778*sfactor);
    public int s779 = (int)Math.ceil(779*sfactor);
    public int s780 = (int)Math.ceil(780*sfactor);
    public int s781 = (int)Math.ceil(781*sfactor);
    public int s782 = (int)Math.ceil(782*sfactor);
    public int s783 = (int)Math.ceil(783*sfactor);
    public int s784 = (int)Math.ceil(784*sfactor);
    public int s785 = (int)Math.ceil(785*sfactor);
    public int s786 = (int)Math.ceil(786*sfactor);
    public int s787 = (int)Math.ceil(787*sfactor);
    public int s788 = (int)Math.ceil(788*sfactor);
    public int s789 = (int)Math.ceil(789*sfactor);
    public int s790 = (int)Math.ceil(790*sfactor);
    public int s791 = (int)Math.ceil(791*sfactor);
    public int s792 = (int)Math.ceil(792*sfactor);
    public int s793 = (int)Math.ceil(793*sfactor);
    public int s794 = (int)Math.ceil(794*sfactor);
    public int s795 = (int)Math.ceil(795*sfactor);
    public int s796 = (int)Math.ceil(796*sfactor);
    public int s797 = (int)Math.ceil(797*sfactor);
    public int s798 = (int)Math.ceil(798*sfactor);
    public int s799 = (int)Math.ceil(799*sfactor);
    
    public int s800 = (int)Math.ceil(800*sfactor);
    public int s801 = (int)Math.ceil(801*sfactor);
    public int s802 = (int)Math.ceil(802*sfactor);
    public int s803 = (int)Math.ceil(803*sfactor);
    public int s804 = (int)Math.ceil(804*sfactor);
    public int s805 = (int)Math.ceil(805*sfactor);
    public int s806 = (int)Math.ceil(806*sfactor);
    public int s807 = (int)Math.ceil(807*sfactor);
    public int s808 = (int)Math.ceil(808*sfactor);
    public int s809 = (int)Math.ceil(809*sfactor);
    public int s810 = (int)Math.ceil(810*sfactor);
    public int s811 = (int)Math.ceil(811*sfactor);
    public int s812 = (int)Math.ceil(812*sfactor);
    public int s813 = (int)Math.ceil(813*sfactor);
    public int s814 = (int)Math.ceil(814*sfactor);
    public int s815 = (int)Math.ceil(815*sfactor);
    public int s816 = (int)Math.ceil(816*sfactor);
    public int s817 = (int)Math.ceil(817*sfactor);
    public int s818 = (int)Math.ceil(818*sfactor);
    public int s819 = (int)Math.ceil(819*sfactor);
    public int s820 = (int)Math.ceil(820*sfactor);
    public int s821 = (int)Math.ceil(821*sfactor);
    public int s822 = (int)Math.ceil(822*sfactor);
    public int s823 = (int)Math.ceil(823*sfactor);
    public int s824 = (int)Math.ceil(824*sfactor);
    public int s825 = (int)Math.ceil(825*sfactor);
    public int s826 = (int)Math.ceil(826*sfactor);
    public int s827 = (int)Math.ceil(827*sfactor);
    public int s828 = (int)Math.ceil(828*sfactor);
    public int s829 = (int)Math.ceil(829*sfactor);
    public int s830 = (int)Math.ceil(830*sfactor);
    public int s831 = (int)Math.ceil(831*sfactor);
    public int s832 = (int)Math.ceil(832*sfactor);
    public int s833 = (int)Math.ceil(833*sfactor);
    public int s834 = (int)Math.ceil(834*sfactor);
    public int s835 = (int)Math.ceil(835*sfactor);
    public int s836 = (int)Math.ceil(836*sfactor);
    public int s837 = (int)Math.ceil(837*sfactor);
    public int s838 = (int)Math.ceil(838*sfactor);
    public int s839 = (int)Math.ceil(839*sfactor);
    public int s840 = (int)Math.ceil(840*sfactor);
    public int s841 = (int)Math.ceil(841*sfactor);
    public int s842 = (int)Math.ceil(842*sfactor);
    public int s843 = (int)Math.ceil(843*sfactor);
    public int s844 = (int)Math.ceil(844*sfactor);
    public int s845 = (int)Math.ceil(845*sfactor);
    public int s846 = (int)Math.ceil(846*sfactor);
    public int s847 = (int)Math.ceil(847*sfactor);
    public int s848 = (int)Math.ceil(848*sfactor);
    public int s849 = (int)Math.ceil(849*sfactor);
    public int s850 = (int)Math.ceil(850*sfactor);
    public int s851 = (int)Math.ceil(851*sfactor);
    public int s852 = (int)Math.ceil(852*sfactor);
    public int s853 = (int)Math.ceil(853*sfactor);
    public int s854 = (int)Math.ceil(854*sfactor);
    public int s855 = (int)Math.ceil(855*sfactor);
    public int s856 = (int)Math.ceil(856*sfactor);
    public int s857 = (int)Math.ceil(857*sfactor);
    public int s858 = (int)Math.ceil(858*sfactor);
    public int s859 = (int)Math.ceil(859*sfactor);
    public int s860 = (int)Math.ceil(860*sfactor);
    public int s861 = (int)Math.ceil(861*sfactor);
    public int s862 = (int)Math.ceil(862*sfactor);
    public int s863 = (int)Math.ceil(863*sfactor);
    public int s864 = (int)Math.ceil(864*sfactor);
    public int s865 = (int)Math.ceil(865*sfactor);
    public int s866 = (int)Math.ceil(866*sfactor);
    public int s867 = (int)Math.ceil(867*sfactor);
    public int s868 = (int)Math.ceil(868*sfactor);
    public int s869 = (int)Math.ceil(869*sfactor);
    public int s870 = (int)Math.ceil(870*sfactor);
    public int s871 = (int)Math.ceil(871*sfactor);
    public int s872 = (int)Math.ceil(872*sfactor);
    public int s873 = (int)Math.ceil(873*sfactor);
    public int s874 = (int)Math.ceil(874*sfactor);
    public int s875 = (int)Math.ceil(875*sfactor);
    public int s876 = (int)Math.ceil(876*sfactor);
    public int s877 = (int)Math.ceil(877*sfactor);
    public int s878 = (int)Math.ceil(878*sfactor);
    public int s879 = (int)Math.ceil(879*sfactor);
    public int s880 = (int)Math.ceil(880*sfactor);
    public int s881 = (int)Math.ceil(881*sfactor);
    public int s882 = (int)Math.ceil(882*sfactor);
    public int s883 = (int)Math.ceil(883*sfactor);
    public int s884 = (int)Math.ceil(884*sfactor);
    public int s885 = (int)Math.ceil(885*sfactor);
    public int s886 = (int)Math.ceil(886*sfactor);
    public int s887 = (int)Math.ceil(887*sfactor);
    public int s888 = (int)Math.ceil(888*sfactor);
    public int s889 = (int)Math.ceil(889*sfactor);
    public int s890 = (int)Math.ceil(890*sfactor);
    public int s891 = (int)Math.ceil(891*sfactor);
    public int s892 = (int)Math.ceil(892*sfactor);
    public int s893 = (int)Math.ceil(893*sfactor);
    public int s894 = (int)Math.ceil(894*sfactor);
    public int s895 = (int)Math.ceil(895*sfactor);
    public int s896 = (int)Math.ceil(896*sfactor);
    public int s897 = (int)Math.ceil(897*sfactor);
    public int s898 = (int)Math.ceil(898*sfactor);
    public int s899 = (int)Math.ceil(899*sfactor);
    
    public int s900 = (int)Math.ceil(900*sfactor);
    public int s901 = (int)Math.ceil(901*sfactor);
    public int s902 = (int)Math.ceil(902*sfactor);
    public int s903 = (int)Math.ceil(903*sfactor);
    public int s904 = (int)Math.ceil(904*sfactor);
    public int s905 = (int)Math.ceil(905*sfactor);
    public int s906 = (int)Math.ceil(906*sfactor);
    public int s907 = (int)Math.ceil(907*sfactor);
    public int s908 = (int)Math.ceil(908*sfactor);
    public int s909 = (int)Math.ceil(909*sfactor);
    public int s910 = (int)Math.ceil(910*sfactor);
    public int s911 = (int)Math.ceil(911*sfactor);
    public int s912 = (int)Math.ceil(912*sfactor);
    public int s913 = (int)Math.ceil(913*sfactor);
    public int s914 = (int)Math.ceil(914*sfactor);
    public int s915 = (int)Math.ceil(915*sfactor);
    public int s916 = (int)Math.ceil(916*sfactor);
    public int s917 = (int)Math.ceil(917*sfactor);
    public int s918 = (int)Math.ceil(918*sfactor);
    public int s919 = (int)Math.ceil(919*sfactor);
    public int s920 = (int)Math.ceil(920*sfactor);
    public int s921 = (int)Math.ceil(921*sfactor);
    public int s922 = (int)Math.ceil(922*sfactor);
    public int s923 = (int)Math.ceil(923*sfactor);
    public int s924 = (int)Math.ceil(924*sfactor);
    public int s925 = (int)Math.ceil(925*sfactor);
    public int s926 = (int)Math.ceil(926*sfactor);
    public int s927 = (int)Math.ceil(927*sfactor);
    public int s928 = (int)Math.ceil(928*sfactor);
    public int s929 = (int)Math.ceil(929*sfactor);
    public int s930 = (int)Math.ceil(930*sfactor);
    public int s931 = (int)Math.ceil(931*sfactor);
    public int s932 = (int)Math.ceil(932*sfactor);
    public int s933 = (int)Math.ceil(933*sfactor);
    public int s934 = (int)Math.ceil(934*sfactor);
    public int s935 = (int)Math.ceil(935*sfactor);
    public int s936 = (int)Math.ceil(936*sfactor);
    public int s937 = (int)Math.ceil(937*sfactor);
    public int s938 = (int)Math.ceil(938*sfactor);
    public int s939 = (int)Math.ceil(939*sfactor);
    public int s940 = (int)Math.ceil(940*sfactor);
    public int s941 = (int)Math.ceil(941*sfactor);
    public int s942 = (int)Math.ceil(942*sfactor);
    public int s943 = (int)Math.ceil(943*sfactor);
    public int s944 = (int)Math.ceil(944*sfactor);
    public int s945 = (int)Math.ceil(945*sfactor);
    public int s946 = (int)Math.ceil(946*sfactor);
    public int s947 = (int)Math.ceil(947*sfactor);
    public int s948 = (int)Math.ceil(948*sfactor);
    public int s949 = (int)Math.ceil(949*sfactor);
    public int s950 = (int)Math.ceil(950*sfactor);
    public int s951 = (int)Math.ceil(951*sfactor);
    public int s952 = (int)Math.ceil(952*sfactor);
    public int s953 = (int)Math.ceil(953*sfactor);
    public int s954 = (int)Math.ceil(954*sfactor);
    public int s955 = (int)Math.ceil(955*sfactor);
    public int s956 = (int)Math.ceil(956*sfactor);
    public int s957 = (int)Math.ceil(957*sfactor);
    public int s958 = (int)Math.ceil(958*sfactor);
    public int s959 = (int)Math.ceil(959*sfactor);
    public int s960 = (int)Math.ceil(960*sfactor);
    public int s961 = (int)Math.ceil(961*sfactor);
    public int s962 = (int)Math.ceil(962*sfactor);
    public int s963 = (int)Math.ceil(963*sfactor);
    public int s964 = (int)Math.ceil(964*sfactor);
    public int s965 = (int)Math.ceil(965*sfactor);
    public int s966 = (int)Math.ceil(966*sfactor);
    public int s967 = (int)Math.ceil(967*sfactor);
    public int s968 = (int)Math.ceil(968*sfactor);
    public int s969 = (int)Math.ceil(969*sfactor);
    public int s970 = (int)Math.ceil(970*sfactor);
    public int s971 = (int)Math.ceil(971*sfactor);
    public int s972 = (int)Math.ceil(972*sfactor);
    public int s973 = (int)Math.ceil(973*sfactor);
    public int s974 = (int)Math.ceil(974*sfactor);
    public int s975 = (int)Math.ceil(975*sfactor);
    public int s976 = (int)Math.ceil(976*sfactor);
    public int s977 = (int)Math.ceil(977*sfactor);
    public int s978 = (int)Math.ceil(978*sfactor);
    public int s979 = (int)Math.ceil(979*sfactor);
    public int s980 = (int)Math.ceil(980*sfactor);
    public int s981 = (int)Math.ceil(981*sfactor);
    public int s982 = (int)Math.ceil(982*sfactor);
    public int s983 = (int)Math.ceil(983*sfactor);
    public int s984 = (int)Math.ceil(984*sfactor);
    public int s985 = (int)Math.ceil(985*sfactor);
    public int s986 = (int)Math.ceil(986*sfactor);
    public int s987 = (int)Math.ceil(987*sfactor);
    public int s988 = (int)Math.ceil(988*sfactor);
    public int s989 = (int)Math.ceil(989*sfactor);
    public int s990 = (int)Math.ceil(990*sfactor);
    public int s991 = (int)Math.ceil(991*sfactor);
    public int s992 = (int)Math.ceil(992*sfactor);
    public int s993 = (int)Math.ceil(993*sfactor);
    public int s994 = (int)Math.ceil(994*sfactor);
    public int s995 = (int)Math.ceil(995*sfactor);
    public int s996 = (int)Math.ceil(996*sfactor);
    public int s997 = (int)Math.ceil(997*sfactor);
    public int s998 = (int)Math.ceil(998*sfactor);
    public int s999 = (int)Math.ceil(999*sfactor);
    
    public int s1000 = (int)Math.ceil(1000*sfactor);
    public int s1231 = (int)Math.ceil(1231*sfactor);
    public int s1237 = (int)Math.ceil(1237*sfactor);
    public int s100000 = (int)Math.ceil(100000*sfactor);

    //------------------------------------------------------------------------------ 
    // Look-up table for automatic adjustment of fonts
    //------------------------------------------------------------------------------
    public int font8 = (int)Math.floor(8*sfactor);
    public int font9 = (int)Math.floor(9*sfactor);
    public int font10 = (int)Math.floor(10*sfactor);
    public int font11 = (int)Math.floor(11*sfactor);
    public int font12 = (int)Math.floor(12*sfactor);
    public int font13 = (int)Math.floor(13*sfactor);
    public int font14 = (int)Math.floor(14*sfactor);
    public int font15 = (int)Math.floor(15*sfactor);
    public int font16 = (int)Math.floor(16*sfactor);
    public int font17 = (int)Math.floor(17*sfactor);
    public int font18 = (int)Math.floor(18*sfactor);
    public int font19 = (int)Math.floor(19*sfactor);
    public int font20 = (int)Math.floor(20*sfactor);
    public int font21 = (int)Math.floor(21*sfactor);
    public int font22 = (int)Math.floor(22*sfactor);
    public int font23 = (int)Math.floor(23*sfactor);
    public int font24 = (int)Math.floor(24*sfactor);
    public int font25 = (int)Math.floor(25*sfactor);
    public int font26 = (int)Math.floor(26*sfactor);
    public int font27 = (int)Math.floor(27*sfactor);
    public int font28 = (int)Math.floor(28*sfactor);
    public int font29 = (int)Math.floor(29*sfactor);
    public int font30 = (int)Math.floor(30*sfactor);
    public int font31 = (int)Math.floor(31*sfactor);
    public int font32 = (int)Math.floor(32*sfactor);
    public int font33 = (int)Math.floor(33*sfactor);
    public int font34 = (int)Math.floor(34*sfactor);
    public int font35 = (int)Math.floor(35*sfactor);
    public int font36 = (int)Math.floor(36*sfactor);
    public int font37 = (int)Math.floor(37*sfactor);
    public int font38 = (int)Math.floor(38*sfactor);
    public int font39 = (int)Math.floor(39*sfactor);
    public int font40 = (int)Math.floor(40*sfactor);
    
  //----------------------------------------------------------------------------
  
    public static void main(String[] args){
        Vector f = new Vector();
        
        // Determine if Windows or Mac OS
        String lcOSName = System.getProperty("os.name").toLowerCase();
        boolean HAVE_MAC_OS_X = lcOSName.startsWith("mac os x");
        boolean HAVE_WINDOWS = lcOSName.startsWith("windows");
        boolean OS_Windows;
        
        if(HAVE_WINDOWS){
            OS_Windows = true;
        }
        else{
            OS_Windows = false;
        }
        
        // Frame of Application window has thickness with a fixed number 
        // of pixels along x and y, which require a shift. 
        int xfixed = 0;
        int yfixed = 0;
        
        if(OS_Windows){ //Windows opearting system
            xfixed = 16;
            yfixed = 40;
        }
        else{ //MAC Operating System
            xfixed = 16;
            yfixed = 40;
        }
        f.setSize((int)(xfixed + sfactorm*(base_width + xmove_main)),
                  (int)(yfixed + sfactorm*(base_height + ymove_main)));
        
        //f.setSize((int)(xfixed + sfactorm*(base_width)),
        //          (int)(yfixed + sfactorm*(base_height)));
                
        f.setVisible(true);
        f.setLayout(null);
    }
  
  //--------------------------------------------

class PaintPanel extends JPanel{
    PaintPanel(){
        dipole = 0.5;
        setOpaque(true);
    //    double dipole;
    //    dipole = my_antenna;
    //    setBorder(BorderFactory.createLineBorder(Color.RED,5));
    }  
      
    private double dipole;
    public void setdipole(double dipole){
        this.dipole = dipole;
    }
    
    @Override
        protected void paintComponent(Graphics g){
            //double dipole;
            //dipole = my_antenna;
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D)g;
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
            
            double xsize, xmiddle, xstart, xend, xstart2, xend2, xstart3, xstart4, xline, ysize, ymiddle, ystart, yend, ystart2, yend2, yend3, yend4;
            xmiddle = (double)getSize().width * 0.5;
            xsize = (double)getSize().width;
            ymiddle = (double)getSize().height * 0.5;
            ysize = (double)getSize().height;
            
            xline = s25;
            xstart = (double)getSize().width * 8.0/16.0 - (double)getSize().width * 4.0/16.0 * vc.distancia;
            xend = xstart;
            xstart2 = (double)getSize().width * 8.0/16.0  + (double)getSize().width * 4.0/16.0 * vc.distancia;
            xend2 = xstart2;
            xstart4 = (double)getSize().width*26.0/32.0;
            xstart3 = xstart2 + s20;
            
            ystart = (double)getSize().height/2.0-(double)s3;
            yend = ystart - (double)getSize().height/3.0 * dipole/10.0;
            ystart2 = (double)getSize().height/2.0 + (double)s3;
            yend2 = ystart2 + (double)getSize().height/3.0 * dipole/10.0;
            yend3 = yend2 + s30;
            yend4 = yend2 + s20;
            
            // Dipole distance tick marks
            drawLineThick(g,xmiddle,ysize-s4,xmiddle,ysize-s10,1, Color.black); // center
            
            double ytop = s20;
            double ybot = (double)getSize().height -s30;
            Color faint = new Color (240, 240, 240);
            /*
            drawLineThick(g,xsize*8.0/32.0,ytop,xsize*8.0/32.0,ybot,2, faint); // left end
            drawLineThick(g,xsize*24.0/32.0,ytop,xsize*24.0/32.0,ybot,2, faint); // right end
            drawLineThick(g,xsize*12.0/32.0,ytop,xsize*12.0/32.0,ybot,1, faint); 
            drawLineThick(g,xsize*20.0/32.0,ytop,xsize*20.0/32.0,ybot,1, faint);
            
            drawLineThick(g,xsize*10.0/32.0,ytop,xsize*10.0/32.0,ybot,1, faint); 
            drawLineThick(g,xsize*22.0/32.0,ytop,xsize*22.0/32.0,ybot,1, faint);
            
            drawLineThick(g,xsize*14.0/32.0,ytop,xsize*14.0/32.0,ybot,1, faint); 
            drawLineThick(g,xsize*18.0/32.0,ytop,xsize*18.0/32.0,ybot,1, faint);
            */
            Color ctick = new Color (0, 0, 250);
            drawLineThick(g,xsize*8.0/32.0,ysize-s4,xsize*8.0/32.0,ysize-s10,1, ctick); // left end
            drawLineThick(g,xsize*24.0/32.0,ysize-s4,xsize*24.0/32.0,ysize-s10,1, ctick); // right end
            drawLineThick(g,xsize*12.0/32.0,ysize-s4,xsize*12.0/32.0,ysize-s10,1, ctick); 
            drawLineThick(g,xsize*20.0/32.0,ysize-s4,xsize*20.0/32.0,ysize-s10,1, ctick);
            
            drawLineThick(g,xsize*10.0/32.0,ysize-s5,xsize*10.0/32.0,ysize-s9,1, ctick); 
            drawLineThick(g,xsize*22.0/32.0,ysize-s5,xsize*22.0/32.0,ysize-s9,1, ctick);
            
            drawLineThick(g,xsize*14.0/32.0,ysize-s5,xsize*14.0/32.0,ysize-s9,1, ctick); 
            drawLineThick(g,xsize*18.0/32.0,ysize-s5,xsize*18.0/32.0,ysize-s9,1, ctick);
            //------------------------------------------------------------------
            
            // z-axis
            drawLineThick(g,xmiddle,ytop,xmiddle,ytop+s10,1, Color.red);
            drawDashLineThick(g, xmiddle, ytop, xmiddle, ybot, 1, 5, Color.red);
            
            drawLineThick(g,xmiddle,ytop,xmiddle+s2,ytop+s7,1, Color.red);
            drawLineThick(g,xmiddle,ytop,xmiddle-s2,ytop+s7,1, Color.red);
            
            g.setColor(Color.black);
            MaestroG.subscripterBold("z","","",g, font12, (int)xmiddle+s10, (int)ytop+s7);
            
            // dipole #1
            if(dipole <=2.0){
                drawLineThick(g,xstart,ystart,xend,yend, s3, Color.green.darker());
                drawLineThick(g,xstart,ystart2,xend,yend2+1, s3, Color.green.darker());
            }
            else{
                drawLineThick(g,xstart,ystart,xend,yend, s3, Color.green.darker());
                drawLineThick(g,xstart,ystart2,xend,yend2, s3, Color.green.darker());
            }
            
            // dipole #2
            if(dipole <= 2.0){
                drawLineThick(g,xstart2,ystart,xend2,yend, s3, Color.red);
                drawLineThick(g,xstart2,ystart2,xend2,yend2+1, s3, Color.red);
            }
            else{
                drawLineThick(g,xstart2,ystart,xend2,yend, s3, Color.red);
                drawLineThick(g,xstart2,ystart2,xend2,yend2, s3, Color.red);
            }
            
            // transmission line #1
            drawLineThick(g,xstart-xline,ystart+s1,xstart,ystart+s1,1, Color.gray);
            drawLineThick(g,xstart-xline,ystart2-s1,xstart,ystart2-s1,1, Color.gray);
            
            // transmission line #2
            drawLineThick(g,xstart2+xline,ystart+s1,xstart2,ystart+s1,1, Color.gray);
            drawLineThick(g,xstart2+xline,ystart2-s1,xstart2,ystart2-s1,1, Color.gray);
            
            // measuring arrows for dipole length
            double xmeasure, lmeasure, lmeasure2;
            xmeasure = (double)getSize().width * 20.0/320.0;
            lmeasure = s8;
            lmeasure2 = s4;
            // horizontal lines
            drawLineThick(g,xmeasure,yend,xmeasure+lmeasure,yend,1, Color.gray);
            drawLineThick(g,xmeasure,yend2,xmeasure+lmeasure,yend2,1, Color.gray);
            
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
            g.setColor(Color.black);
            
            MaestroG.subscripterSansItalic("l","","",g,font15,(int)((double)getSize().width * 10.0/320.0),(int)ystart2+s1);
            
            //vertical line
            g.setColor(Color.gray);
            if(dipole <=1.0){
                g.drawLine((int)(xmeasure+lmeasure2),(int)yend,(int)(xmeasure+lmeasure2),(int)yend2);
                MaestroG.drawArrowScaled((int)(xmeasure+lmeasure2), (int)yend-s8, 2, sfactor, g);
                MaestroG.drawArrowScaled((int)(xmeasure+lmeasure2), (int)yend2+s8, 1, sfactor, g);
                
                g.setColor(Color.black);
                MaestroG.subscripterSansItalicBold("l",""," = "+MaestroA.rounder(dipole,2)+(" \u03bb"),g,font14,s9,(int)yend -s20);
            
            }
            else{
                g.drawLine((int)(xmeasure+lmeasure2),(int)yend,(int)(xmeasure+lmeasure2),(int)yend2);
                MaestroG.drawArrowScaled((int)(xmeasure+lmeasure2), (int)yend2-s8, 2, sfactor, g);
                MaestroG.drawArrowScaled((int)(xmeasure+lmeasure2), (int)yend+s8, 1, sfactor, g);
                
                g.setColor(Color.black);
                MaestroG.subscripterSansItalicBold("l",""," = "+MaestroA.rounder(dipole,2)+(" \u03bb"),g,font14,s9,(int)yend -s13);
            }
            
            // measuring arrows for dipole distance
            double ymeasure, ymeasure2;
            ymeasure = (double)getSize().height *29.0/32.0;
            ymeasure2 = (double)getSize().height *297.0/320.0;
            
            // vertical lines
            drawLineThick(g,xstart,ymeasure-s4,xstart,ymeasure+s4,1, Color.blue);
            drawLineThick(g,xstart2,ymeasure-s4,xstart2,ymeasure+s4,1, Color.blue);
            
            //horizontal line
            g.setColor(Color.blue);
            if(vc.distancia <= 0.2){
                g.drawLine((int)(xstart),(int)ymeasure,(int)(xstart2),(int)ymeasure);
                MaestroG.drawArrowScaled((int)(xstart-s8), (int)ymeasure, 3, sfactor, g);
                MaestroG.drawArrowScaled((int)(xstart2+s8), (int)ymeasure, 4, sfactor, g);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
                g.setColor(Color.black);
                MaestroG.subscripterSansItalic("d",""," = "+MaestroA.rounder(vc.distancia,2)+(" \u03bb"),g,font13,(int)xstart3,(int)ymeasure2);
                
            }
            else{
                g.drawLine((int)(xstart),(int)ymeasure,(int)(xstart2),(int)ymeasure);
                MaestroG.drawArrowScaled((int)(xstart+s8), (int)ymeasure, 4, sfactor, g);
                MaestroG.drawArrowScaled((int)(xstart2-s8), (int)ymeasure, 3, sfactor, g);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
                g.setColor(Color.black);
                MaestroG.subscripterSansItalic("d",""," = "+MaestroA.rounder(vc.distancia,2)+(" \u03bb"),g,font13,(int)xstart3-s5,(int)ymeasure2);
            }
            
            //g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
            //g.setColor(Color.black);
            //MaestroG.subscripterSansItalic("d",""," = "+MaestroA.rounder(vc.distancia,2)+(" \u03bb"),g,font13,(int)xstart3-s2,(int)ymeasure2);
            
            g.setColor(Color.green.darker());
            MaestroG.subscripterBold("A","","",g,font15,(int)xstart - s25,(int)(ysize*20.0/32.0));
            g.setColor(Color.red);
            MaestroG.subscripterBold("B","","",g,font15,(int)xstart2 + s16,(int)(ysize*20.0/32.0));
            
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
            
        }
        public void changeBorderSize(int size){
            setBorder(BorderFactory.createLineBorder(Color.RED,size));
        }
        
        public void drawLineThick(Graphics g, double x1, double y1, double x2, double y2, int thick, Color color){
            Graphics2D g2d = (Graphics2D)g;
            g2d.setPaint(color);
            //g2d.setStroke(new BasicStroke(thick,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND));
            g2d.setStroke(new BasicStroke(thick,BasicStroke.CAP_BUTT,BasicStroke.JOIN_ROUND));

            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);

            Line2D.Double line = new Line2D.Double(x1,y1,x2,y2);
            g2d.draw(line);

            g2d.setStroke(new BasicStroke(1));
            //g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
        }
        
        private void drawDashLineThick(Graphics g, double x1, double y1, double x2, double y2, int thick, int dash, Color color){
            Graphics2D g2d = (Graphics2D)g;
            g2d.setPaint(color);
            //g2d.setStroke(new BasicStroke(thick,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND));
            float[] dashPattern = {dash,dash};
            g2d.setStroke(new BasicStroke(thick,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER,10.0F,dashPattern,0));  
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);

            Line2D.Double line = new Line2D.Double(x1,y1,x2,y2);
            g2d.draw(line);

            g2d.setStroke(new BasicStroke(1));g2d.setStroke(new BasicStroke(thick,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND));

            //g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
        }
}

class PaintPanel2 extends JPanel{
    PaintPanel2(){
        setOpaque(true);
    //    setBorder(BorderFactory.createLineBorder(Color.RED,5));
    }  
      
    private double myfrequency;
    public void setmyfrequency(double myfrequency){
        this.myfrequency = myfrequency;
    }
    
    @Override
        protected void paintComponent(Graphics g){
            
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D)g;
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
            
            g.setColor(Color.black);
            g.setFont(new Font("SanSerif",Font.BOLD,font18));

            g.drawString("Instructions", s15,s30);
            
            int xcolumn1 = s25; int xcolumn2 = s25; int xcolumn3 = s25;
            int ystart; int y;
            int ytext; int deltaY = s23;
            String s; int nextX;
            ystart = s60;
            ytext = ystart;
            // ASSUMPTIONS
            g.setColor(Color.red);
            g.setFont(new Font("SanSerif",Font.BOLD,font17));
            g.drawString("Assumptions", xcolumn1,ytext);
            g.setColor(Color.black);
            g.setFont(new Font("SanSerif",Font.PLAIN,font16));

            ytext += deltaY;
            s = "\u2022 Far Field approximation";
            nextX = STR.displayString(s,g,xcolumn1,ytext);
            
            ytext += deltaY;
            s = "\u2022 Array of two identical parallel linear dipoles";
            nextX = STR.displayString(s,g,xcolumn1,ytext);
            
            ytext += 15*deltaY/10;
            // INPUT
            g.setColor(Color.red);
            g.setFont(new Font("SanSerif",Font.BOLD,font17));

            g.drawString("Input", xcolumn2,ytext);
            g.setColor(Color.black);
            g.setFont(new Font("SanSerif",Font.PLAIN,font16));

            ytext += deltaY;
            //INPUT
            
            s = "\u2022 Length of the dipoles in units of wavelength";
            nextX = STR.displayString(s,g,xcolumn2,ytext);
            ytext += deltaY;
            
            s = "\u2022 Distance between the dipoles in units of wavelength";
            nextX = STR.displayString(s,g,xcolumn2,ytext);
            ytext += deltaY;
            
            s = "\u2022 Phase difference of the currents feeding the antennas";
            nextX = STR.displayString(s,g,xcolumn2,ytext);
            ytext += deltaY;
            MaestroG.subsubscripterBOLD("Current Phase Difference  =  \u2220"," I","B"," \u2212 \u2220 I","A"," ",g,font14,2*xcolumn2,ytext);
            
            g.setFont(new Font("SanSerif",Font.PLAIN,font16));
            ytext += deltaY;
            s = "\u2022 Selection of Field or Power radiation pattern";
            nextX = STR.displayString(s,g,xcolumn2,ytext);
            
            ytext += 15*deltaY/10;

            // OUTPUT
            g.setColor(Color.red);
            g.setFont(new Font("SanSerif",Font.BOLD,font17));
            g.drawString("Displayed Information", xcolumn3,ytext);
            g.setColor(Color.black);
            g.setFont(new Font("SanSerif",Font.PLAIN,font15));
            ytext += deltaY;
            s = "\u2022 3D wireframe representation of the radiation pattern in cartesian coordinates which can be animated, varying";
            nextX = STR.displayString(s,g,xcolumn3,ytext);
            ytext += deltaY;
            s = "   dipoles length, dipoles distance, and current phase difference.  Azimuthal plane rotation can also be animated.";
            nextX = STR.displayString(s,g,xcolumn3,ytext);
            
            g.setColor(Color.blue.darker());
            ytext += 15*deltaY/10;
            s = "The orientation of the 3D diagram can be modified by clicking and dragging on the picture or by using sliders.";
            nextX = STR.displayString(s,g,xcolumn2,ytext);
            
            //ytext += deltaY;
            //s = "";
            //nextX = STR.displayString(s,g,xcolumn2,ytext);
                       
            drawCopyRight(g);
        }
        
        public void drawCopyRight(Graphics g) {
            int deltaY = s18;
            int startingY = getSize().height - s70;
            int startingX = 0;
            FontMetrics fm;
            g.setColor(Color.black);
            g.setColor(Color.black);
            g.setFont(new Font("SanSerif",Font.PLAIN,font13));
            fm = g.getFontMetrics();
            g.drawString("Application Design: Umberto Ravaioli",
                         startingX+s10,startingY+deltaY+s5);

            String s = "Interactive Java"+STR.SUP+"TM"+STR.ENDSUP+" platform:  www.amanogawa.com";
            int nextX = STR.displayString(s,g,startingX+s10,startingY+2*deltaY+s5);
            int lineLength = fm.stringWidth("Interactive JavaTM platform:  www.amanogawa.com");
            lineLength+= s10;

            g.drawString("All Rights Reserved",startingX+s10,startingY+3*deltaY+s5);
            g.drawLine(startingX,startingY+s5,
                       startingX+lineLength+s10,startingY+s5);
            g.drawLine(startingX+lineLength+s10,startingY+s5,
                       startingX+lineLength+s10,startingY+4*deltaY);
        }    
    
        private double dipole;
        public void setdipole(double dipole){
            this.dipole = dipole;
        }
        
        public void changeBorderSize(int size){
            setBorder(BorderFactory.createLineBorder(Color.RED,size));
        }
        
        public void drawLineThick(Graphics g, double x1, double y1, double x2, double y2, int thick, Color color){
            Graphics2D g2d = (Graphics2D)g;
            g2d.setPaint(color);
            g2d.setStroke(new BasicStroke(thick,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND));

            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);

            Line2D.Double line = new Line2D.Double(x1,y1,x2,y2);
            g2d.draw(line);

            g2d.setStroke(new BasicStroke(1));
            //g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
        }
        
        private void drawDashLineThick(Graphics g, double x1, double y1, double x2, double y2, int thick, int dash, Color color){
            Graphics2D g2d = (Graphics2D)g;
            g2d.setPaint(color);
            g2d.setStroke(new BasicStroke(thick,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND));
            float[] dashPattern = {dash,dash};
            g2d.setStroke(new BasicStroke(thick,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER,10.0F,dashPattern,0));  
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);

            Line2D.Double line = new Line2D.Double(x1,y1,x2,y2);
            g2d.draw(line);

            g2d.setStroke(new BasicStroke(1));g2d.setStroke(new BasicStroke(thick,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND));

            //g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
        }
    }
     
    public Vector() {
      
        this_month = Greg.get(Calendar.MONTH);
	//System.out.println("  This is the month = "+this_month);
	today_week = Greg.get(Calendar.DAY_OF_WEEK);
	//System.out.println("  This is the day_week = "+today_week);
	this_year = Greg.get(Calendar.YEAR);
	this_hour = Greg.get(Calendar.HOUR_OF_DAY);
	//System.out.println("  This is the year = "+this_year);
	this_minute = Greg.get(Calendar.MINUTE);
	//System.out.println("  This is the minute = "+this_minute);
	today_month = Greg.get(Calendar.DAY_OF_MONTH);
	//System.out.println("  This is the day_month = "+today_month);
	today_year = Greg.get(Calendar.DAY_OF_YEAR);
	//System.out.println("  This is the day_year = "+today_year);
	this_zone = Greg.get(Calendar.ZONE_OFFSET);
	//System.out.println("  This is the zone_offset = "+this_zone/3600000);
	saving_time = Greg.get(Calendar.DST_OFFSET);
	//System.out.println("  This is the dst_offset = "+saving_time/3600000);
        
        if(anno > this_year){
                annonuovo = anno;
        }
        else{
                annonuovo = this_year;
        }
      
      try{
          SwingUtilities.invokeAndWait(new Runnable(){
              public void run(){
                 guiInit(); //initialize GUI 
              }
          });
      }
      catch(Exception exc){}    
        
        Runnable Ant_Thread = new Runnable(){
            public void run(){
                try{
                    for(; ;){
                        Thread.sleep(sleep_factor);
                        SwingUtilities.invokeLater(new Runnable(){
                            public void run(){
                                updateTime();
                            }
                        });
                    }
                }
                catch(InterruptedException exc){}
            }
        };
        
        vai = new Thread(Ant_Thread);
        vai.start();
        
        // Listeners
        this.addWindowListener(this);
         
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
  
    void updateTime(){
           
        //if(!running && !rotate_x)return;
        //projector.getRotationAngle()

        if(rotate_x){
            if((vc.x_angle + 1.0) <= 359.0){
                vc.x_angle = vc.x_angle + 1.0;
                
                vc.resetRotationAngle((int)vc.x_angle);
                jslider_x.setValue((int)(vc.x_angle));
                vc.repaint();
            }
            else{
                vc.x_angle = 0.0;
                vc.resetRotationAngle((int)vc.x_angle);
                jslider_x.setValue((int)(vc.x_angle));
                vc.repaint();
            }
            
            
            if(!running){return;}
            else{   
                if(IsLength){   

                    if(vc.dipolelength >= 1.0){
                       if(forward){
                           vc.dipolelength = vc.dipolelength + 0.01;
                           vc.dipolelengthA = vc.dipolelength;
                           vc.dipolelengthB = vc.dipolelength;
                           jforth.setVisible(false);
                           jback.setVisible(true);
                       }
                       else{
                           vc.dipolelength = vc.dipolelength - 0.01;
                           vc.dipolelengthA = vc.dipolelength;
                           vc.dipolelengthB = vc.dipolelength;
                           jforth.setVisible(true);
                           jback.setVisible(false);
                       }
                    }
                    else{
                       if(forward){
                           vc.dipolelength = vc.dipolelength + 0.005;
                           vc.dipolelengthA = vc.dipolelength;
                           vc.dipolelengthB = vc.dipolelength;
                           jforth.setVisible(false);
                           jback.setVisible(true);
                       }
                       else{
                           vc.dipolelength = vc.dipolelength - 0.005;
                           vc.dipolelengthA = vc.dipolelength;
                           vc.dipolelengthB = vc.dipolelength;
                           jforth.setVisible(true);
                           jback.setVisible(false);
                       }
                    }       
                    if(vc.dipolelength >= 10.0){
                        forward = false;
                        vc.dipolelength = 10.0;
                        vc.dipolelengthA = vc.dipolelength;
                        vc.dipolelengthB = vc.dipolelength;
                    }
                    else if(vc.dipolelength <= 0.0){
                        forward = true;
                        vc.dipolelength = 0.0;
                        vc.dipolelengthA = vc.dipolelength;
                        vc.dipolelengthB = vc.dipolelength;
                    }

                    jslider_dipole.setValue((int)(vc.dipolelength*100));

                    vc.repaint();

                    my_antenna = vc.dipolelength;
                    pp.setdipole(my_antenna);
                    pp.repaint();
                }
                if(IsDistance){   

                    if(forward){
                        vc.distancia = vc.distancia + 0.01;
                        jforth.setVisible(false);
                        jback.setVisible(true);
                    }
                    else{
                        vc.distancia = vc.distancia - 0.01;
                        jforth.setVisible(true);
                        jback.setVisible(false);
                    }

                    if(vc.distancia >= 1.0){
                        forward = false;
                        vc.distancia = 1.0;
                    }
                    else if(vc.distancia <= 0.0){
                        forward = true;
                        vc.distancia = 0.0;
                    }

                    jslider_distance.setValue((int)(vc.distancia*100));
                    vc.repaint();

                    my_antenna = vc.dipolelength;
                    pp.setdipole(my_antenna);
                    pp.repaint();
                }
                if(IsPhase){   

                    if(forward){
                        vc.fase = vc.fase + 1;
                        jforth.setVisible(false);
                        jback.setVisible(true);
                        jslider_phase.setValue((int)(vc.fase) + 180);
                    }
                    else{
                        vc.fase = vc.fase - 1;
                        jforth.setVisible(true);
                        jback.setVisible(false);
                        jslider_phase.setValue((int)(vc.fase) + 180);
                    }

                    if(vc.fase >= 180.0){
                        forward = false;
                        vc.fase = 180.0;
                        jslider_phase.setValue((int)(vc.fase) + 180);
                    }
                    else if(vc.fase <= -180.0){
                        forward = true;
                        vc.fase = -180;
                        //jslider_phase.setValue((int)(vc.fase) + 180);
                    }

                    vc.repaint();

                    my_antenna = vc.dipolelength;
                    pp.setdipole(my_antenna);
                    pp.repaint();
                }
            }
            
        }
        else{
            
            if(!running){return;}
            else{   
                if(IsLength){   

                    if(vc.dipolelength >= 1.0){
                       if(forward){
                           vc.dipolelength = vc.dipolelength + 0.01;
                           vc.dipolelengthA = vc.dipolelength;
                           vc.dipolelengthB = vc.dipolelength;
                           jforth.setVisible(false);
                           jback.setVisible(true);
                       }
                       else{
                           vc.dipolelength = vc.dipolelength - 0.01;
                           vc.dipolelengthA = vc.dipolelength;
                           vc.dipolelengthB = vc.dipolelength;
                           jforth.setVisible(true);
                           jback.setVisible(false);
                       }
                    }
                    else{
                       if(forward){
                           vc.dipolelength = vc.dipolelength + 0.005;
                           vc.dipolelengthA = vc.dipolelength;
                           vc.dipolelengthB = vc.dipolelength;
                           jforth.setVisible(false);
                           jback.setVisible(true);
                       }
                       else{
                           vc.dipolelength = vc.dipolelength - 0.005;
                           vc.dipolelengthA = vc.dipolelength;
                           vc.dipolelengthB = vc.dipolelength;
                           jforth.setVisible(true);
                           jback.setVisible(false);
                       }
                    }       
                    if(vc.dipolelength >= 10.0){
                        forward = false;
                        vc.dipolelength = 10.0;
                        vc.dipolelengthA = vc.dipolelength;
                        vc.dipolelengthB = vc.dipolelength;
                    }
                    else if(vc.dipolelength <= 0.0){
                        forward = true;
                        vc.dipolelength = 0.0;
                        vc.dipolelengthA = vc.dipolelength;
                        vc.dipolelengthB = vc.dipolelength;
                    }

                    jslider_dipole.setValue((int)(vc.dipolelength*100));

                    vc.repaint();

                    my_antenna = vc.dipolelength;
                    pp.setdipole(my_antenna);
                    pp.repaint();
                }
                if(IsDistance){   

                    if(forward){
                        vc.distancia = vc.distancia + 0.01;
                        jforth.setVisible(false);
                        jback.setVisible(true);
                    }
                    else{
                        vc.distancia = vc.distancia - 0.01;
                        jforth.setVisible(true);
                        jback.setVisible(false);
                    }

                    if(vc.distancia >= 1.0){
                        forward = false;
                        vc.distancia = 1.0;
                    }
                    else if(vc.distancia <= 0.0){
                        forward = true;
                        vc.distancia = 0.0;
                    }

                    jslider_distance.setValue((int)(vc.distancia*100));
                    vc.repaint();

                    my_antenna = vc.dipolelength;
                    pp.setdipole(my_antenna);
                    pp.repaint();
                }
                if(IsPhase){   

                    if(forward){
                        vc.fase = vc.fase + 1;
                        jforth.setVisible(false);
                        jback.setVisible(true);
                        jslider_phase.setValue((int)(vc.fase) + 180);
                    }
                    else{
                        vc.fase = vc.fase - 1;
                        jforth.setVisible(true);
                        jback.setVisible(false);
                        jslider_phase.setValue((int)(vc.fase) + 180);
                    }

                    if(vc.fase >= 180.0){
                        forward = false;
                        vc.fase = 180.0;
                        jslider_phase.setValue((int)(vc.fase) + 180);
                    }
                    else if(vc.fase <= -180.0){
                        forward = true;
                        vc.fase = -180;
                        //jslider_phase.setValue((int)(vc.fase) + 180);
                    }

                    vc.repaint();

                    my_antenna = vc.dipolelength;
                    pp.setdipole(my_antenna);
                    pp.repaint();
                }
            }
        }
    }
  
    public void windowClosing(WindowEvent e) {
        dispose();
        System.exit(0);
    }
    
    public void windowOpened(WindowEvent evt){}
    
    public void windowIconified(WindowEvent evt){}
    
    public void windowClosed(WindowEvent evt){}
    
    public void windowDeiconified(WindowEvent evt){}
    
    public void windowActivated(WindowEvent evt){}
    
    public void windowDeactivated(WindowEvent evt){}
    
  
  private void guiInit(){
    setLayout(null);
    vc = new VectorCanvas(this, sfactor); 
    add(vc);
    
    int xmove, ymove;
    
    String lcOSName = System.getProperty("os.name").toLowerCase();
        boolean MAC_OS_X = lcOSName.startsWith("mac os x");
        //System.out.println(lcOSName);
        
        boolean HAVE_WINDOWS = lcOSName.startsWith("windows");
        boolean OS_Windows;
        
        if(HAVE_WINDOWS){
            OS_Windows = true;
        }
        else{
            OS_Windows = false;
        }
        
        // Frame of Application window has thickness with a fixed number 
        // of plain pixels along x and y, which require a shift. 
        int xfixed = 0;
        int yfixed = 0;
        
        if(OS_Windows){ //Windows opearting system
            xfixed = 14;
            yfixed = 40;
        }
        else{ //MAC Operating System
            xfixed = 14;
            yfixed = 40;
        }
        
        xmove = (int)(0.5 * (sfactor*(xmove_main)));
        ymove = (int)(0.5 * (sfactorm*(ymove_main)));
        
    jColorF = new JButton("Frame Color - F");
    jColorF.setFont(new Font("Helvetica",Font.BOLD,font12));
    jColorF.setBounds(s170+xmove,s300+s87+ymove,s130,s20);
    add(jColorF);
    jColorF.setVisible(false);
    
    jColorP = new JButton("Frame Color - P");
    jColorP.setFont(new Font("Helvetica",Font.BOLD,font12));
    jColorP.setBounds(s170+xmove,s300+s87+ymove,s130,s20);
    add(jColorP);
    jColorP.setVisible(false);
    
    Fill[0] = new JRadioButton("Apply Tint",true);
    Fill[0].setBounds(s170,s400+s22,s130,s20);
    //add(Fill[0]);
    //Fill[0].setVisible(true);
    Fill[0].setVisible(false);
        
    Dimension dim = getSize();
    pp = new PaintPanel();
    pp.setBounds(s10+xmove,s55+ymove,s300+s4,s200+s14);
    pp.setBackground(Color.white);
    add(pp);
    
    jclose = new JButton("CLOSE");
    jclose.setFont(new Font("Helvetica",Font.PLAIN,font12));
    jclose.setBounds(s500+s50+xmove,s400+s80+ymove,s70,s25);
    add(jclose);
    jclose.setVisible(false);
    
    pp2 = new PaintPanel2();
    pp2.setBounds(s10+xmove,s55+ymove,s800+s6,s400+s80);
    pp2.setBackground(new Color(255,255,245));
    //pp2.setBorder(BorderFactory.createLineBorder(Color.gray,1));
    add(pp2);
    pp2.setVisible(false);
    
    Nside = s500+s20;
    //Nside = Math.min(dim.width,dim.height);
    //if(Nside < 20){Nside = 20;}
    //System.out.println("Nside"+Nside);
    
    Field[0] = new JRadioButton("| Field |", true);
    Field[0].setContentAreaFilled(false);
    Field[0].setFont(new Font("Helvetica",Font.BOLD,font12));
    //Field[0].addItemListener(this);
    field_power.add(Field[0]);
    add(Field[0]);
    
    Field[1] = new JRadioButton("Power", false);
    Field[1].setContentAreaFilled(false);
    Field[1].setFont(new Font("Helvetica",Font.BOLD,font12));
    //Field[1].addItemListener(this);
    field_power.add(Field[1]);
    add(Field[1]);
    
    Field[0].setBounds(s20+xmove,s300+s85+ymove,s80,s25);
    Field[1].setBounds(s110+xmove,s300+s85+ymove,s70,s25);
    
    //--------------------------------------------------------------------------
    jslider_x = new JSlider(0,360,45);
    jslider_x.setBounds(s300+s20+xmove,s500+s26+ymove+1,Nside-s28-1,s10);
    add(jslider_x);
    
    jslider_x.setMajorTickSpacing(10);
    jslider_x.setMinorTickSpacing(5);
    jslider_x.setPaintTicks(false);
    
    jslider_z = new JSlider(JSlider.VERTICAL,0,180,160);
    jslider_z.setBounds(s300+s20+xmove+Nside-s28,s11+ymove,s10,Nside-s5);
    add(jslider_z);
    
    jslider_z.setMajorTickSpacing(10);
    jslider_z.setMinorTickSpacing(5);
    jslider_z.setPaintTicks(false);
        
    vc.setBounds(s300+s20+xmove,s11+ymove,Nside-s28-1,Nside-s5);
    
    //little square at corner between slider for x and z
    p_patch = new Panel();
    p_patch.setBackground(new Color(250,250,255));
    add(p_patch);
    p_patch.setBounds(s300+s20+xmove+Nside-s28,s500+s26+ymove+1,s10,s10);
    //--------------------------------------------------------------------------
    p_one = new Panel();
    p_one.setBackground(Color.black);
    add(p_one);
    p_one.setBounds(s300+s20+xmove-1,s11+ymove-1,Nside-s28+s10+2,Nside+s5+2);
    //--------------------------------------------------------------------------
    jtitle1 = new JLabel("Module 9.5B");
    jtitle1.setFont(new Font("Helvetica",Font.BOLD,font12));
    jtitle1.setBounds(s25+xmove,s20+ymove,s100,s15);
    jtitle1.setForeground(Color.black);
    add(jtitle1);
    
    jtitle2 = new JLabel("3D Radiation Pattern");
    jtitle2.setFont(new Font("Helvetica",Font.BOLD,font13));
    jtitle2.setBounds(s160+xmove,s14+ymove,s250,s15);
    jtitle2.setForeground(Color.red.darker());
    add(jtitle2);
    
    jtitle3 = new JLabel("of Two-Dipole Array");
    jtitle3.setFont(new Font("Helvetica",Font.BOLD,font13));
    jtitle3.setBounds(s160+xmove,s30+ymove,s250,s15);
    jtitle3.setForeground(Color.red.darker());
    add(jtitle3);
    
    jslider_dipole = new JSlider(0,1000,50);
    jslider_dipole.setBounds(s20+xmove,s200+s90+ymove,s130,s20);
    add(jslider_dipole);
    
    jslider_dipole.setMajorTickSpacing(500);
    jslider_dipole.setMinorTickSpacing(100);
    jslider_dipole.setPaintTicks(true);
    
    jslider_distance = new JSlider(0,100,50);
    jslider_distance.setBounds(s170+xmove,s200+s90+ymove,s130,s20);
    add(jslider_distance);
    
    jslider_distance.setMajorTickSpacing(50);
    jslider_distance.setMinorTickSpacing(10);
    jslider_distance.setPaintTicks(true);
    
    jslider_phase = new JSlider(0,360,360);
    jslider_phase.setBounds(s20+xmove,s300+s45+ymove,s130,s20);
    add(jslider_phase);
    
    jslider_phase.setMajorTickSpacing(180);
    jslider_phase.setMinorTickSpacing(45);
    jslider_phase.setPaintTicks(true);
            
    jslider_animation = new JSlider(0,500,300);
    jslider_animation.setBounds(s60+xmove,s400+s82+ymove,s200+s5,s25);
    add(jslider_animation);
    
    //jslider_animation.setMajorTickSpacing(500);
    jslider_animation.setMinorTickSpacing(50);
    jslider_animation.setPaintTicks(true);
    
    jslider_number = new JSlider(0,50,5);
    jslider_number.setBounds(s170+xmove,s300+s45+ymove,s130,s20);
    //add(jslider_number);
    
    jslider_number.setMajorTickSpacing(10);
    jslider_number.setMinorTickSpacing(5);
    jslider_number.setPaintTicks(true);
    //------------------------------------- BUTTON FOR INSTRUCTIONS
    jabout = new JButton("Instructions");
    jabout.setFont(new Font("Helvetica",Font.BOLD,font10));
    //jabout.setPreferredSize(new Dimension(70,25));
    //jabout.setBounds(s195+xmove,s300+s37+ymove,s110,s25);
    jabout.setBounds(s29+xmove,s500+s10+ymove,s130,s20);
    add(jabout);
    //------------------------------------- BUTTONS FOR ANIMATION
    jshowdipoles = new JButton("Hide Dipoles");
    //jshowdipoles.setBounds(s123+xmove,s500+s10+ymove,s84,s20);
    jshowdipoles.setBounds(s170+xmove,s300+s37+ymove,s130,s25);
    jshowdipoles.setFont(new Font("Helvetica",Font.BOLD,font10));
    jshowdipoles.setForeground(new Color(0,0,200));
    add(jshowdipoles);
    
    jrotatex = new JButton("Rotate");
    jrotatex.setBounds(s170+xmove,s500+s10+ymove,s130,s20);;
    jrotatex.setFont(new Font("Helvetica",Font.BOLD,font10));
    jrotatex.setForeground(new Color(0,150,0));
    add(jrotatex);
    
    jreset = new JButton("Reset");
    jreset.setBounds(s30+xmove,s400+s55+ymove,s60,s20);
    jreset.setFont(new Font("Helvetica",Font.BOLD,font10));
    jreset.setForeground(new Color(0,0,200));
    add(jreset);
    
    jstart = new JButton("Start");
    jstart.setBounds(s170+xmove,s400+s55+ymove,s60,s20);
    jstart.setFont(new Font("Helvetica",Font.BOLD,font10));
    jstart.setForeground(new Color(0,150,0));
    add(jstart);
    
    jstop = new JButton("Stop");
    jstop.setBounds(s200+s40+xmove,s400+s55+ymove,s60,s20);
    jstop.setFont(new Font("Helvetica",Font.BOLD,font10));
    jstop.setForeground(new Color(200,0,0));
    add(jstop);
    
    jback = new JButton(">");
    jback.setBounds(s100+xmove,s400+s55+ymove,s60,s20);
    jback.setFont(new Font("Helvetica",Font.BOLD,font14));
    //jback.setEnabled(true);
    jback.setVisible(true);
    add(jback);
    
    jforth = new JButton("<");
    jforth.setPreferredSize(new Dimension(50,25));
    jforth.setBounds(s100+xmove,s400+s55+ymove,s60,s20);
    jforth.setFont(new Font("Helvetica",Font.BOLD,font14));
    //jforth.setEnabled(false);
    jforth.setVisible(false);
    add(jforth);
    
    jLength = new JButton("Length");
    jLength.setBounds(s100+xmove,s400+s25+ymove,s60,s20);
    jLength.setFont(new Font("Helvetica",Font.BOLD,font9));
    add(jLength);
    
    jDistance = new JButton("Distance");
    jDistance.setBounds(s170+xmove,s400+s25+ymove,s60,s20);
    jDistance.setFont(new Font("Helvetica",Font.BOLD,font9));
    add(jDistance);
    
    jPhase = new JButton("Phase");
    jPhase.setBounds(s200+s40+xmove,s400+s25+ymove,s60,s20);
    jPhase.setFont(new Font("Helvetica",Font.BOLD,font9));
    add(jPhase);
    
    //--------------------------------------------------------------------------
    // thin panel to make horizontal lines
    jline1.setBounds(s20+xmove,s200+s70+ymove,s200+s85,1);
    jline1.setOpaque(true);
    jline1.setBackground(Color.gray);
    add(jline1);
    
    jline2.setBounds(s20+xmove,s300+s80+ymove,s200+s85,1);
    jline2.setOpaque(true);
    jline2.setBackground(Color.gray);
    add(jline2);
    
    jline3.setBounds(s20+xmove,s400+s14+ymove,s200+s85,1);
    jline3.setOpaque(true);
    jline3.setBackground(Color.gray);
    add(jline3);
    
    jstop.setEnabled(false);
    jstart.setEnabled(false);
    jreset.setEnabled(true);
    
    //Compiler says the assignment below is "unsafe".  Why?
    //Straight out of "Swing A Beginner's Guide"...
    //Anyway, there is no obvious way to change font, so this is not scalable.
    //Will add labels ad hoc.
    
    Hashtable table = new Hashtable();
    table.put(new Integer(0), new JLabel(""));
    table.put(new Integer(500), new JLabel(""));
    table.put(new Integer(1000), new JLabel(""));
    
    //-------------------------------------------------------------------------
    jslider_dipole.setLabelTable(table);
    jslider_dipole.setPaintLabels(true);
    jslider_dipole.setBackground(Color.white);
    
    jslider_distance.setLabelTable(table);
    jslider_distance.setPaintLabels(true);
    jslider_distance.setBackground(Color.white);
    
    jslider_number.setLabelTable(table);
    jslider_number.setPaintLabels(true);
    jslider_number.setBackground(Color.white);
    
    jslider_phase.setLabelTable(table);
    jslider_phase.setPaintLabels(true);
    jslider_phase.setBackground(Color.white);
    
    jslider_animation.setPaintLabels(true);
    jslider_animation.setBackground(Color.white);
    
    jcopyright = new JLabel("\u00a9  Amanogawa, "+annonuovo+" - All Rights Reserved");
    jcopyright.setForeground(Color.red.darker());
    jcopyright.setFont(new Font("Helvetica",Font.PLAIN,font12));
    jcopyright.setBounds(s10+xmove,s550+ymove,s350,s15);
    //add(jcopyright);
            
    jlab_dipole = new JLabel("Dipoles Length = "+MaestroA.rounder(vc.dipolelength,3)+(" \u03bb"));
    jlab_dipole.setFont(new Font("Serif",Font.BOLD,font12));
    jlab_dipole.setBounds(s25+xmove,s200+s68+ymove,s200,s22);
    jlab_dipole.setForeground(Color.red.darker());
    add(jlab_dipole);
    
    jlab_distance = new JLabel("Dipoles Distance = "+MaestroA.rounder(vc.distancia,3)+(" \u03bb"));
    jlab_distance.setFont(new Font("Serif",Font.BOLD,font12));
    jlab_distance.setBounds(s175+xmove,s200+s68+ymove,s200,s22);
    jlab_distance.setForeground(Color.red.darker());
    add(jlab_distance);
    
    jlab_phase = new JLabel("Phase Difference = "+MaestroA.rounder(vc.fase,0)+("\u00b0"));
    jlab_phase.setFont(new Font("Serif",Font.BOLD,font12));
    jlab_phase.setBounds(s25+xmove,s300+s23+ymove,s200,s22);
    jlab_phase.setForeground(Color.red.darker());
    add(jlab_phase);
    
    jlab_number = new JLabel("Number of Dipoles = "+vc.number_dipoles);
    jlab_number.setFont(new Font("Serif",Font.BOLD,font12));
    jlab_number.setBounds(s175+xmove,s300+s23+ymove,s200,s22);
    jlab_number.setForeground(Color.red.darker());
    //add(jlab_number);
    
    // SCALABLE LABELS FOR SLIDER LENGTH----------------------------------------
    jlab_0 = new JLabel("0");
    jlab_0.setFont(new Font("Serif",Font.BOLD,font12));
    jlab_0.setBounds(s21+xmove,s300+s6+ymove,s30,s20);
    jlab_0.setForeground(Color.black);
    add(jlab_0);
    
    jlab_5 = new JLabel("5");
    jlab_5.setFont(new Font("Serif",Font.BOLD,font12));
    jlab_5.setBounds(s82+xmove,s300+s6+ymove,s30,s20);
    jlab_5.setForeground(Color.black);
    add(jlab_5);
    
    jlab_10 = new JLabel("10");
    jlab_10.setFont(new Font("Serif",Font.BOLD,font12));
    jlab_10.setBounds(s140+xmove,s300+s6+ymove,s30,s20);
    jlab_10.setForeground(Color.black);
    add(jlab_10);
    // SCALABLE LABELS FOR SLIDER DISTANCE--------------------------------------
    jlab_d0 = new JLabel("0");
    jlab_d0.setFont(new Font("Serif",Font.BOLD,font12));
    jlab_d0.setBounds(s172+xmove,s300+s6+ymove,s30,s20);
    jlab_d0.setForeground(Color.black);
    add(jlab_d0);
    
    jlab_d5 = new JLabel("0.5");
    jlab_d5.setFont(new Font("Serif",Font.BOLD,font12));
    jlab_d5.setBounds(s200+s28+xmove,s300+s6+ymove,s30,s20);
    jlab_d5.setForeground(Color.black);
    add(jlab_d5);
    
    jlab_d10 = new JLabel("1");
    jlab_d10.setFont(new Font("Serif",Font.BOLD,font12));
    jlab_d10.setBounds(s200+s93+xmove,s300+s6+ymove,s30,s20);
    jlab_d10.setForeground(Color.black);
    add(jlab_d10);
    // SCALABLE LABELS FOR SLIDER PHASE----------------------------------------
    jlab_f0 = new JLabel("-180");
    jlab_f0.setFont(new Font("Serif",Font.BOLD,font11));
    jlab_f0.setBounds(s14+xmove,s300+s60+ymove,s30,s20);
    jlab_f0.setForeground(Color.black);
    add(jlab_f0);
    
    jlab_f5 = new JLabel("0");
    jlab_f5.setFont(new Font("Serif",Font.BOLD,font12));
    jlab_f5.setBounds(s82+xmove,s300+s60+ymove,s30,s20);
    jlab_f5.setForeground(Color.black);
    add(jlab_f5);
    
    jlab_f10 = new JLabel("180");
    jlab_f10.setFont(new Font("Serif",Font.BOLD,font11));
    jlab_f10.setBounds(s138+xmove,s300+s60+ymove,s30,s20);
    jlab_f10.setForeground(Color.black);
    add(jlab_f10);
    // SCALABLE LABELS FOR SLIDER DISTANCE--------------------------------------
    jlab_n0 = new JLabel("0");
    jlab_n0.setFont(new Font("Serif",Font.BOLD,font12));
    jlab_n0.setBounds(s172+xmove,s300+s60+ymove,s30,s20);
    jlab_n0.setForeground(Color.black);
    //add(jlab_n0);
    
    jlab_n5 = new JLabel("25");
    jlab_n5.setFont(new Font("Serif",Font.BOLD,font12));
    jlab_n5.setBounds(s200+s29+xmove,s300+s60+ymove,s30,s20);
    jlab_n5.setForeground(Color.black);
    //add(jlab_n5);
    
    jlab_n10 = new JLabel("50");
    jlab_n10.setFont(new Font("Serif",Font.BOLD,font12));
    jlab_n10.setBounds(s200+s91+xmove,s300+s60+ymove,s30,s20);
    jlab_n10.setForeground(Color.black);
    //add(jlab_n10);
    //--------------------------------------------------------------------------
    janimation = new JLabel("Animation");
    janimation.setFont(new Font("Serif",Font.BOLD,font12));
    janimation.setBounds(s20+xmove,s400+s13+ymove,s160,s20);
    janimation.setForeground(Color.blue.darker());
    add(janimation);
    
    jselect = new JLabel("Select:");
    jselect.setFont(new Font("Sanserif",Font.BOLD,font10));
    jselect.setBounds(s60+xmove,s400+s28+ymove,s160,s20);
    jselect.setForeground(Color.red.darker());
    add(jselect);
    
    jslower = new JLabel("slower");
    jslower.setFont(new Font("SanSerif",Font.BOLD,font10));
    jslower.setBounds(s22+xmove,s400+s82+ymove,s150,s15);
    jslower.setForeground(Color.black);
    add(jslower);
    
    jfaster = new JLabel("faster");
    jfaster.setFont(new Font("SanSerif",Font.BOLD,font10));
    jfaster.setBounds(s200+s75+xmove,s400+s82+ymove,s150,s15);
    jfaster.setForeground(Color.black);
    add(jfaster);
    // Unit Label for Dipole Lengths slider ------------------------------------
    jlambda = new JLabel(" \u03bb");
    jlambda.setFont(new Font("Serif",Font.BOLD,font15));
    jlambda.setBounds(s200+s94+xmove,s200+s82+ymove,s20,s30);
    //add(jlambda);
    //--------------------------------------------------------------------------
    // My own border...  much easier!!! JUST MADE WITH PANELS
    jtitlep1.setBounds(s9+xmove,s9+ymove,s300+s5,1);
    jtitlep1.setOpaque(true);
    jtitlep1.setBackground(Color.white);
    add(jtitlep1);
    
    jtitlep2.setBounds(s12+xmove,s46+ymove,s300,1);
    jtitlep2.setOpaque(true);
    jtitlep2.setBackground(Color.white);
    add(jtitlep2);
    
    jtitlep3.setBounds(s9+xmove,s9+ymove,1,s40);
    jtitlep3.setOpaque(true);
    jtitlep3.setBackground(Color.white);
    add(jtitlep3);
    
    jtitlep4.setBounds(s300+s11+xmove,s12+ymove,1,s35);
    jtitlep4.setOpaque(true);
    jtitlep4.setBackground(Color.white);
    add(jtitlep4);
    
    jtitle.setBounds(s9+xmove,s9+ymove,s300+s5,s40);
    jtitle.setBorder(BorderFactory.createLineBorder(Color.gray,3));
    //jtitle.setBorder(BorderFactory.createEtchedBorder());
    jtitle.setOpaque(true);
    add(jtitle);
    
    
    // Make background of Instructions panel
    jInst4.setBounds(s10+xmove,s54+ymove,s300+s10,1);
    jInst4.setOpaque(true);
    jInst4.setBackground(Color.black);
    add(jInst4);
    jInst4.setVisible(true);
    
    jInst6.setBounds(s300+s19+xmove,s10+ymove,1,s45);
    jInst6.setOpaque(true);
    jInst6.setBackground(Color.black);
    add(jInst6);
    jInst6.setVisible(true);
    
    jInst3.setBounds(s9+xmove,s49+ymove,s300+s10,s5);
    jInst3.setOpaque(true);
    jInst3.setBackground(Color.cyan);
    add(jInst3);
    jInst3.setVisible(true);
    
    jInst5.setBounds(s300+s14+xmove,s8+ymove,s5,s47);
    jInst5.setOpaque(true);
    jInst5.setBackground(Color.cyan);
    add(jInst5);
    jInst5.setVisible(true);
    
    jcontrols.setBounds(s10+xmove-1,s54+ymove,s300+s5+2,s400+s82);
    jcontrols.setBorder(BorderFactory.createLineBorder(Color.black));
    jcontrols.setBackground(Color.white);
    jcontrols.setOpaque(true);
    add(jcontrols);
    
    jaboutpanel.setBounds(s9+xmove,s10+ymove,s800+s13,s500+s26);
    jaboutpanel.setOpaque(true);
    jaboutpanel.setBorder(BorderFactory.createLineBorder(Color.black));
    jaboutpanel.setBackground(new Color(255,255,245));
    add(jaboutpanel);
    jaboutpanel.setVisible(false);
    
    //jback2.setBounds(3+xmove,3+ymove,s830-6,s545-6);
    jback2.setBounds(3+xmove,3+ymove,(int)Math.ceil(base_width*sfactor)-6,(int)Math.ceil(base_height*sfactor)-6);
    jback2.setOpaque(true);
    jback2.setBackground(Color.cyan);
    add(jback2);
    
    //jback1.setBounds(0+xmove,0+ymove,s830,s545);
    jback1.setBounds(xmove,ymove,(int)Math.ceil(base_width*sfactor),(int)Math.ceil(base_height*sfactor));
    jback1.setOpaque(true);
    jback1.setBackground(Color.black);
    add(jback1);
    
    jback3.setBounds(0,0,s100000,s100000);
    jback3.setOpaque(true);
    jback3.setBackground(Color.white);
    add(jback3);
    
            jLength.setVisible(false);
            jDistance.setVisible(false);
            jPhase.setVisible(false);
            jshowdipoles.setVisible(false);
            jreset.setVisible(false);
            jstart.setVisible(false);
            jstop.setVisible(false);
            jabout.setVisible(false);
            jrotatex.setVisible(false);
            pp.setVisible(false);
            vc.setVisible(false);
            jslider_dipole.setVisible(false);
            jslider_distance.setVisible(false);
            jslider_phase.setVisible(false);
            jslider_number.setVisible(false);
            jslider_animation.setVisible(false);
  
            jlab_dipole.setVisible(false);
            jlab_distance.setVisible(false);
            jlab_phase.setVisible(false);
            jlab_0.setVisible(false);
            jlab_5.setVisible(false);
            jlab_10.setVisible(false);
            jlab_d0.setVisible(false);
            jlab_d5.setVisible(false);
            jlab_d10.setVisible(false);
            
            jlambda.setVisible(false);
            jcopyright.setVisible(false);
            janimation.setVisible(false);
            jtitle1.setVisible(true);
            jtitle2.setVisible(true);
            jtitle3.setVisible(true);
            
            jback.setVisible(false);
            jforth.setVisible(false);
            jtitle.setVisible(true);
            jcontrols.setVisible(false);
            jline1.setVisible(false);
            jline2.setVisible(false);
            jtitlep1.setVisible(true);
            jtitlep2.setVisible(true);
            jtitlep3.setVisible(true);
            jtitlep4.setVisible(true);
            jtitlep5.setVisible(true);
            jtitlep6.setVisible(true);
            //jtitlep7.setVisible(false);
            //jtitlep8.setVisible(false);
            p_one.setVisible(false);
            p_patch.setVisible(false);
            jslider_x.setVisible(false);
            jslider_z.setVisible(false);
            
            jColorP.setVisible(false);
            jColorF.setVisible(false);
            
            //jback1.setVisible(false);
            //jback2.setVisible(false);
            //jback3.setVisible(false);

            jcontrols2.setVisible(false);
            jaboutpanel.setVisible(true);
            jclose.setVisible(true);
            pp2.setVisible(true);
    
    jslider_dipole.addChangeListener(
            new ChangeListener(){
                public void stateChanged(ChangeEvent ce)
                {
                   vc.dipolelength = (jslider_dipole.getValue())*0.01 ;
                   if(vc.dipolelength >= 10.0){
                       vc.dipolelength = 10.0;
                       jslider_dipole.setValue(1000);
                       forward = false;
                   }
                   if(vc.dipolelength <= 0.01){
                       vc.dipolelength = 0.01;
                       jslider_dipole.setValue(1);
                       forward = true;
                   }
                    vc.dipolelengthA = vc.dipolelength;
                    vc.dipolelengthB = vc.dipolelength;
                    
                    vc.repaint();
                   
                    my_antenna = vc.dipolelength;
                    pp.setdipole(my_antenna);
                    pp.repaint();
                   
                   jlab_dipole.setText("Dipoles Length = "+MaestroA.rounder(vc.dipolelength,3)+" \u03bb");
                   
                }
            }
    );
    
    
    jslider_distance.addChangeListener(
            new ChangeListener(){
                public void stateChanged(ChangeEvent ce)
                {
                   vc.distancia = (jslider_distance.getValue())*0.01 ;
                   if(vc.distancia >= 1.0){
                       vc.distancia = 1.0;
                       jslider_distance.setValue(100);
                       forward = false;
                   }
                   if(vc.distancia <= 0.01){
                       vc.distancia = 0.01;
                       jslider_distance.setValue(1);
                       forward = true;
                   }
                    vc.dipolelengthA = vc.dipolelength;
                    vc.dipolelengthB = vc.dipolelength;
                    
                    vc.repaint();
                   
                    my_antenna = vc.dipolelength;
                    pp.setdipole(my_antenna);
                    pp.repaint();
                   
                   jlab_distance.setText("Dipoles Distance = "+MaestroA.rounder(vc.distancia,3)+" \u03bb"); 
                }
            }
    );
    
    jslider_phase.addChangeListener(
            new ChangeListener(){
                public void stateChanged(ChangeEvent ce)
                {
                   vc.fase = (double)(-180 + (jslider_phase.getValue())) ;
                   if(vc.fase >= 180.0){
                       vc.fase = 180.0;
                       jslider_phase.setValue(360);
                       forward = false;
                   }
                   if(vc.fase <= -180.0){
                       vc.fase = -180.0;
                       jslider_phase.setValue(0);
                       forward = true;
                   }
                    
                    vc.repaint();
                   
                    my_antenna = vc.dipolelength;
                    pp.setdipole(my_antenna);
                    pp.repaint();
                   
                   jlab_phase.setText("Phase Difference = "+MaestroA.rounder(vc.fase,0)+"\u00b0");
                   
                }
            }
    );
    
    jslider_number.addChangeListener( // NOT USED IN THIS VERSION
            new ChangeListener(){
                public void stateChanged(ChangeEvent ce)
                {
                   vc.number_dipoles = (jslider_number.getValue()) ;
                   if(vc.number_dipoles >= 50){
                       vc.number_dipoles = 50;
                       jslider_number.setValue(50);
                       //forward = false;
                   }
                   if(vc.number_dipoles <= 3){
                       // VERSION FOR TWO ANTENNAS - SET number_dipoles = 2
                       vc.number_dipoles = 2;
                       jslider_number.setValue(2);
                       //forward = true;
                   }
                    
                    vc.repaint();
                   
                    my_antenna = vc.dipolelength;
                    pp.setdipole(my_antenna);
                    pp.repaint();
                   
                    jlab_number.setText("Number of Dipoles = "+vc.number_dipoles); 
                }
            }
    );
    
    jslider_x.addChangeListener(
            new ChangeListener(){
                public void stateChanged(ChangeEvent ce)
                {
                    vc.x_angle = (jslider_x.getValue()) ;
                                       
                    if(vc.x_angle >= 360){
                       vc.x_angle = 0;
                       jslider_x.setValue(0);
                       //forward = false;
                    }
                    vc.resetRotationAngle(jslider_x.getValue());
                    vc.repaint();
                }
            }
    );
    
    jslider_z.addChangeListener(
            new ChangeListener(){
                public void stateChanged(ChangeEvent ce)
                {
                    vc.z_angle = (180 - jslider_z.getValue()) ;
                    vc.resetAzimuthAngle(180 - jslider_z.getValue());
                    //forward = false;
                    vc.repaint();
                }
            }
    );
    
    jslider_animation.addChangeListener(
            new ChangeListener(){
                public void stateChanged(ChangeEvent ce)
                {
                   sleep_factor = 500 - jslider_animation.getValue() + 10 ;
                   vc.repaint();
                }
            }
    );
    
    jabout.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ae){
            jLength.setVisible(false);
            jDistance.setVisible(false);
            jPhase.setVisible(false);
            jshowdipoles.setVisible(false);
            jreset.setVisible(false);
            jstart.setVisible(false);
            jstop.setVisible(false);
            jabout.setVisible(false);
            jrotatex.setVisible(false);
            pp.setVisible(false);
            vc.setVisible(false);
            jslider_dipole.setVisible(false);
            jslider_phase.setVisible(false);
            jslider_distance.setVisible(false);
            jslider_number.setVisible(false);
            jslider_animation.setVisible(false);
  
            jlab_dipole.setVisible(false);
            jlab_distance.setVisible(false);
            jlab_phase.setVisible(false);
            
            jlab_0.setVisible(false);
            jlab_5.setVisible(false);
            jlab_10.setVisible(false);
            jlab_d0.setVisible(false);
            jlab_d5.setVisible(false);
            jlab_d10.setVisible(false);
            
            jlambda.setVisible(false);
            jcopyright.setVisible(false);
            janimation.setVisible(false);
            jtitle1.setVisible(true);
            jtitle2.setVisible(true);
            jtitle3.setVisible(true);

            jback.setVisible(false);
            jforth.setVisible(false);
            jtitle.setVisible(true);
            jcontrols.setVisible(false);
            jline1.setVisible(false);
            jline2.setVisible(false);
            jtitlep1.setVisible(true);
            jtitlep2.setVisible(true);
            jtitlep3.setVisible(true);
            jtitlep4.setVisible(true);
            jtitlep5.setVisible(true);
            jtitlep6.setVisible(true);
            jtitlep7.setVisible(false);
            jtitlep8.setVisible(false);
            jInst2.setVisible(true);
            jInst3.setVisible(true);
            jInst4.setVisible(true);
            jInst5.setVisible(true);
            jInst6.setVisible(true);
            p_one.setVisible(false);
            p_patch.setVisible(false);
            jslider_x.setVisible(false);
            jslider_z.setVisible(false);
            
            jColorP.setVisible(false);
            jColorF.setVisible(false);
           
            //jback1.setVisible(false);
            //jback2.setVisible(false);
            //jback3.setVisible(false);

            jcontrols2.setVisible(false);
            jaboutpanel.setVisible(true);
            jclose.setVisible(true);
            pp2.setVisible(true);
        }
    });
    
    jclose.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ae){
            jLength.setVisible(true);
            jDistance.setVisible(true);
            jPhase.setVisible(true);
            jshowdipoles.setVisible(true);
            jreset.setVisible(true);
            jstart.setVisible(true);
            jstop.setVisible(true);
            jabout.setVisible(true);
            jrotatex.setVisible(true);
            pp.setVisible(true);
            vc.setVisible(true);
            jslider_dipole.setVisible(true);
            jslider_phase.setVisible(true);
            jslider_distance.setVisible(true);
            jslider_number.setVisible(true);
            jslider_animation.setVisible(true);
  
            jlab_dipole.setVisible(true);
            jlab_distance.setVisible(true);
            jlab_phase.setVisible(true);
            jlab_0.setVisible(true);
            jlab_5.setVisible(true);
            jlab_10.setVisible(true);
            jlab_d0.setVisible(true);
            jlab_d5.setVisible(true);
            jlab_d10.setVisible(true);
            
            jlambda.setVisible(true);
            jcopyright.setVisible(true);
            janimation.setVisible(true);
            jtitle1.setVisible(true);
            jtitle2.setVisible(true);
            jtitle3.setVisible(true);
            
            jback.setVisible(true);
            jforth.setVisible(true);
            jtitle.setVisible(true);
            jcontrols.setVisible(true);
            jline1.setVisible(true);
            jline2.setVisible(true);
            jtitlep1.setVisible(true);
            jtitlep2.setVisible(true);
            jtitlep3.setVisible(true);
            jtitlep4.setVisible(true);
            jtitlep5.setVisible(true);
            jtitlep6.setVisible(true);
            jtitlep7.setVisible(true);
            jtitlep8.setVisible(true);
            
            if(vc.IsPower){
                jColorP.setVisible(true);
                jColorF.setVisible(false);
            }
            if(!vc.IsPower){
                jColorF.setVisible(true);
                jColorP.setVisible(false);
            }
            
            p_one.setVisible(true);
            p_patch.setVisible(true);
            jslider_x.setVisible(true);
            jslider_z.setVisible(true);
            jcontrols2.setVisible(true);
            jaboutpanel.setVisible(false);
            jInst2.setVisible(false);
            jInst3.setVisible(false);
            jInst4.setVisible(false);
            jInst5.setVisible(false);
            jInst6.setVisible(false);
            jclose.setVisible(false);
            pp2.setVisible(false);
        }
    });
    
    jstart.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ae){
            jstart.setEnabled(false);
            jstop.setEnabled(true);
            jabout.setEnabled(false);
            running = true;
        }
    });
    
    jstop.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ae){
            jstop.setEnabled(false);
            jstart.setEnabled(true);
            jabout.setEnabled(true);
            running = false;
        }
    });
    
    jreset.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ae){
            
            jreset.setEnabled(true);
            running = false;
            jstop.setEnabled(false);
            jstart.setEnabled(false);
            jLength.setEnabled(true);
            jDistance.setEnabled(true);
            jPhase.setEnabled(true);
            
            jforth.setVisible(false);
            jback.setVisible(true);
            forward = true;
            
            vc.exponent = 1.0;
            vc.IsPower = false;
            vc.repaint();
            jColorF.setVisible(true);
            jColorP.setVisible(false);
            Field[0].setSelected(true);
            Field[1].setSelected(false);
            
            vc.color_line1 = Color.gray.brighter();
            vc.color_line2 = Color.gray.brighter();
            
            jslider_animation.setValue(300);
            
            rotate_x = false;
            jrotatex.setText("Rotate");
            jrotatex.setForeground(new Color(0,120,0));
            vc.x_angle = 45.0;
            vc.resetRotationAngle(45);   
            jslider_x.setValue(45);
            vc.z_angle = 20.0;
            vc.resetAzimuthAngle(20);   
            jslider_z.setValue(160);     // Remember, slider is upsode down, set with (180-20)      
            
            // VERSION FOR TWO ANTENNAS - SET number_dipoles = 2
            vc.number_dipoles = 2;
            jslider_number.setValue((int)(vc.number_dipoles));
            vc.dipolelength = 0.5;
            jslider_dipole.setValue((int)(vc.dipolelength*100));
            vc.distancia = 0.5;
            jslider_distance.setValue((int)(vc.distancia*100));
            vc.fase = 180.0;
            jslider_phase.setValue((int)(vc.fase) + 180);
            vc.repaint();
        }
    });
    
    jshowdipoles.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ae){
            if(vc.ShowDipoles){
               vc.ShowDipoles = false;
               jshowdipoles.setText("Show Dipoles");
               vc.repaint();
            }
            else{
               vc.ShowDipoles = true;
               jshowdipoles.setText("Hide Dipoles");
               vc.repaint(); 
            }
        }
    });
    
    jrotatex.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ae){
            if(rotate_x){
                rotate_x = false;
                jrotatex.setText("Rotate");
                jrotatex.setForeground(new Color(0,120,0));
            }
            else{
                rotate_x = true;
                jrotatex.setText("STOP");
                jrotatex.setForeground(new Color(150,0,0));
            }
        }
    });
    
    jforth.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ae){
            //jforth.setEnabled(false);
            jforth.setVisible(false);
            //jback.setEnabled(true);
            jback.setVisible(true);
            forward = true;
            sleep_factor = 500 - jslider_animation.getValue() + 10 ;
            //direction = 1.0;
        }
    });
    
    jback.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ae){
            //jback.setEnabled(false);
            //jforth.setEnabled(true);
            jback.setVisible(false);
            jforth.setVisible(true);
            sleep_factor = 500 - jslider_animation.getValue() + 10 ;
            forward = false;
            //direction = -1.0;
        }
    });
    
    jLength.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ae){
            IsLength = true;
            IsDistance = false;
            IsPhase = false;
            
            jLength.setEnabled(false);
            jDistance.setEnabled(true);
            jPhase.setEnabled(true);
            jstart.setEnabled(true);
        }
    });
    
    jDistance.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ae){
            IsLength = false;
            IsDistance = true;
            IsPhase = false;
            
            jLength.setEnabled(true);
            jDistance.setEnabled(false);
            jPhase.setEnabled(true);
            jstart.setEnabled(true);
        }
    });
    
    jPhase.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ae){
            IsLength = false;
            IsDistance = false;
            IsPhase = true;
            
            jLength.setEnabled(true);
            jDistance.setEnabled(true);
            jPhase.setEnabled(false);
            jstart.setEnabled(true);
        }
    });
    
    jColorF.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ce){
            Color color = JColorChooser.showDialog(Vector.this,"Choose Color", vc.color_line1);
            if(color != null){
                vc.color_line1 = color;
            }
            vc.repaint();
        }
    });
    
    jColorP.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ce){
            Color color = JColorChooser.showDialog(Vector.this,"Choose Color", vc.color_line2);
            if(color != null){
                vc.color_line2 = color;
            }
            vc.repaint();
        }
    });
    
    Fill[0].addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ae){
           if(vc.IsPatchOn){
                vc.IsPatchOn = false;
           }
           else{
               vc.IsPatchOn = (true);
           }
           vc.repaint();
        }
    });
    
    Field[0].addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ae){
           vc.exponent = 1.0;
           vc.IsPower = false;
           vc.repaint();
           jColorF.setVisible(true);
           jColorP.setVisible(false);
        }
    });
    
    Field[1].addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ae){
           vc.exponent = 2.0;
           vc.IsPower = true;
           vc.repaint();
           jColorP.setVisible(true);
           jColorF.setVisible(false);
        }
    });
  }
  
  public void start(){}
  public void stop(){}
  public void destroy(){}
   
}


