import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

//情報ダイアログに関するコード

//   ツールそのものの機能はGUI.javaのButtonGUIなどにあります



public class AuthDialog extends JDialog
{
		/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	static AuthDialog authDialog;
	static OObject object;

	private AuthDialog(Frame owner, String type, OObject obj) {
		super(owner,false);
		
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				authDialog = null;
			}
		});
	}
	
	static void openAuthDialog(Frame owner, String type, OObject obj) {
		if(PCARD.pc.stack==null || PCARD.pc.stack.curCard==null){
			return;
		}
		
		boolean newOpen = false;
		if(authDialog==null){
			newOpen = true;
			authDialog = new AuthDialog(owner, type, obj);
		}
		else{
			authDialog.getContentPane().removeAll();
		}
		
		object = obj;

		//getContentPane().setLayout(new GridLayout(6, 1));
		authDialog.getContentPane().setLayout(new FlowLayout());

		JLabel label;
		JTextField jfield;
		JCheckBox check;
		JComboBox popup;
		JButton jbtn;

		int w=320;
		int h=440;
		
		//button
		if(type.equals("button")){
			OButton obtn = (OButton)obj;
			AuthButtonListener btnlistener = new AuthButtonListener();
			
			//パネルを追加する
			{
				JPanel namePanel = new JPanel();
				authDialog.getContentPane().add(namePanel);
				
				label = new JLabel(PCARD.pc.intl.getDialogText("Button Name:"));
				namePanel.add(label);
				jfield = new JTextField(obtn.name);
				jfield.setName("name");
				jfield.setPreferredSize(new Dimension(w*2/3, jfield.getPreferredSize().height));
				AuthTextListener listener = new AuthTextListener(jfield);
				jfield.getDocument().addDocumentListener(listener);
				namePanel.add(jfield);
				
				namePanel.setPreferredSize(new Dimension(w, jfield.getPreferredSize().height+4));
			}
			
			//パネルを追加する
			{
				JPanel infoPanel = new JPanel();
				infoPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
				authDialog.getContentPane().add(infoPanel);
				
				String typeStr = "";
				if(obtn.parent.objectType.equals("card")) typeStr = PCARD.pc.intl.getDialogText("Card button ");
				else typeStr = PCARD.pc.intl.getDialogText("Background button ");
				label = new JLabel(typeStr+PCARD.pc.intl.getDialogText("ID: ")+obtn.id);
				label.setPreferredSize(new Dimension(w, label.getPreferredSize().height));
				infoPanel.add(label);
				label = new JLabel(typeStr+PCARD.pc.intl.getDialogText("Number: ")+((OCardBase) obtn.parent).GetNumberof(obtn));
				label.setPreferredSize(new Dimension(w, label.getPreferredSize().height));
				infoPanel.add(label);
				label = new JLabel(typeStr+PCARD.pc.intl.getDialogText("Part Number: ")+((OCardBase) obtn.parent).GetNumberofParts(obtn));
				label.setPreferredSize(new Dimension(w, label.getPreferredSize().height));
				infoPanel.add(label);
				
				infoPanel.setPreferredSize(new Dimension(w, 24*3));
			}
	
			//パネルを追加する
			{
				JPanel stylePanel = new JPanel();
				stylePanel.setLayout(new FlowLayout(FlowLayout.LEFT));
				authDialog.getContentPane().add(stylePanel);
		
				label = new JLabel(PCARD.pc.intl.getDialogText("Style:"));
				stylePanel.add(label);
				popup = new JComboBox(new String[]{
						PCARD.pc.intl.getDialogText("Standard"),
						PCARD.pc.intl.getDialogText("Transparent"),
						PCARD.pc.intl.getDialogText("Opaque"),
						PCARD.pc.intl.getDialogText("Rectangle"),
						PCARD.pc.intl.getDialogText("Shadow"),
						PCARD.pc.intl.getDialogText("RoundRect"),
						PCARD.pc.intl.getDialogText("Default"),
						PCARD.pc.intl.getDialogText("Oval"),
						PCARD.pc.intl.getDialogText("Popup"),
						PCARD.pc.intl.getDialogText("CheckBox"),
						PCARD.pc.intl.getDialogText("Radio")});
				popup.setSelectedIndex(obtn.style);
				popup.setName("style");
				popup.setMaximumRowCount(17);
				popup.addActionListener(btnlistener);
				stylePanel.add(popup);
				
				stylePanel.setPreferredSize(new Dimension(w, popup.getPreferredSize().height+4));
			}
			
			//パネルを追加する
			{
				JPanel famiPanel = new JPanel();
				famiPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
				authDialog.getContentPane().add(famiPanel);
	
				label = new JLabel(PCARD.pc.intl.getDialogText("Family:"));
				famiPanel.add(label);
				popup = new JComboBox(new String[]{
						PCARD.pc.intl.getDialogText("None"),"1","2","3",
						"4","5","6","7","8","9","10","11","12","13","14","15","16"});
				popup.setSelectedIndex(obtn.group);
				popup.setName("family");
				popup.setMaximumRowCount(17);
				popup.addActionListener(btnlistener);
				famiPanel.add(popup);
				
				famiPanel.setPreferredSize(new Dimension(w, popup.getPreferredSize().height+4));
			}
			
			//パネルを追加する
			{
				JPanel propPanel = new JPanel();
				propPanel.setLayout(new GridLayout(3,2));
				authDialog.getContentPane().add(propPanel);
		
				check = new JCheckBox(PCARD.pc.intl.getDialogText("Show Name"));
				check.setSelected(obtn.showName);
				check.addActionListener(btnlistener);
				propPanel.add(check);
				check = new JCheckBox(PCARD.pc.intl.getDialogText("Enabled"));
				check.setSelected(obtn.enabled);
				check.addActionListener(btnlistener);
				propPanel.add(check);
				check = new JCheckBox(PCARD.pc.intl.getDialogText("Visible"));
				check.setSelected(obtn.getVisible());
				check.addActionListener(btnlistener);
				propPanel.add(check);
				check = new JCheckBox(PCARD.pc.intl.getDialogText("Scale Icon"));
				check.setSelected(obtn.getScaleIcon());
				check.addActionListener(btnlistener);
				propPanel.add(check);
				check = new JCheckBox(PCARD.pc.intl.getDialogText("Auto Hilite"));
				check.setSelected(obtn.getAutoHilite());
				check.addActionListener(btnlistener);
				propPanel.add(check);
				if(obtn.parent.objectType.equals("background")){
					check = new JCheckBox(PCARD.pc.intl.getDialogText("Shared Hilite"));
					check.setSelected(obtn.sharedHilite);
					check.addActionListener(btnlistener);
					propPanel.add(check);
				}
				
				propPanel.setPreferredSize(new Dimension(w, check.getPreferredSize().height*3));
			}
	
			//パネルを追加する
			/*{
				JPanel emptyPanel = new JPanel();
				authDialog.getContentPane().add(emptyPanel);
				
				emptyPanel.setPreferredSize(new Dimension(w, 8));
			}*/
			
			//パネルを追加する
			{
				JPanel colorPanel = new JPanel();
				authDialog.getContentPane().add(colorPanel);


				CPButton fore = new AuthColorButton(obtn.color,obtn,0);
				colorPanel.add(fore);
				CPButton back = new AuthColorButton(obtn.bgColor,obtn,1);
				colorPanel.add(back);
				
				colorPanel.setPreferredSize(new Dimension(w, 32));
			}
			
			//パネルを追加する
			{
				JPanel buttonPanel = new JPanel();
				buttonPanel.setLayout(new GridLayout(3,2));
				authDialog.getContentPane().add(buttonPanel);
	
				jbtn = new JButton(PCARD.pc.intl.getDialogText("Font…"));
				jbtn.addActionListener(btnlistener);
				buttonPanel.add(jbtn);
				jbtn = new JButton(PCARD.pc.intl.getDialogText("Icon…"));
				jbtn.addActionListener(btnlistener);
				buttonPanel.add(jbtn);
				/*jbtn = new JButton(PCARD.pc.intl.getDialogText("LinkTo…"));
				jbtn.addActionListener(btnlistener);
				jbtn.setEnabled(false);
				buttonPanel.add(jbtn);
				jbtn = new JButton(PCARD.pc.intl.getDialogText("Effect…"));
				jbtn.addActionListener(btnlistener);
				jbtn.setEnabled(false);
				buttonPanel.add(jbtn);*/
				jbtn = new JButton(PCARD.pc.intl.getDialogText("Script…"));
				jbtn.addActionListener(btnlistener);
				buttonPanel.add(jbtn);
				jbtn = new JButton(PCARD.pc.intl.getDialogText("Content…"));
				jbtn.addActionListener(btnlistener);
				buttonPanel.add(jbtn);
				
				buttonPanel.setPreferredSize(new Dimension(w, check.getPreferredSize().height*3+8));
			}
		}

		//field
		if(type.equals("field")){
			OField ofld = (OField)obj;

			JCheckBox multiplelinesbtn;
			JCheckBox fixedlineheightbtn;
			multiplelinesbtn = new JCheckBox(PCARD.pc.intl.getDialogText("Multiple lines"));
			fixedlineheightbtn = new JCheckBox(PCARD.pc.intl.getDialogText("Fixed line height"));
			
			AuthFieldListener fldlistener = new AuthFieldListener(multiplelinesbtn, fixedlineheightbtn);

			//パネルを追加する
			{
				JPanel namePanel = new JPanel();
				authDialog.getContentPane().add(namePanel);
				
				label = new JLabel(PCARD.pc.intl.getDialogText("Field Name:"));
				namePanel.add(label);
				jfield = new JTextField(ofld.name);
				jfield.setName("name");
				jfield.setPreferredSize(new Dimension(w*2/3, jfield.getPreferredSize().height));
				AuthTextListener listener = new AuthTextListener(jfield);
				jfield.getDocument().addDocumentListener(listener);
				namePanel.add(jfield);
				
				namePanel.setPreferredSize(new Dimension(w, jfield.getPreferredSize().height+4));
			}
			
			//パネルを追加する
			{
				JPanel infoPanel = new JPanel();
				infoPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
				authDialog.getContentPane().add(infoPanel);
				
				String typeStr = "";
				if(ofld.parent.objectType.equals("card")) typeStr = PCARD.pc.intl.getDialogText("Card field ");
				else typeStr = PCARD.pc.intl.getDialogText("Background field ");
				label = new JLabel(typeStr+PCARD.pc.intl.getDialogText("ID: ")+ofld.id);
				label.setPreferredSize(new Dimension(w, label.getPreferredSize().height));
				infoPanel.add(label);
				label = new JLabel(typeStr+PCARD.pc.intl.getDialogText("Number: ")+((OCardBase) ofld.parent).GetNumberof(ofld));
				label.setPreferredSize(new Dimension(w, label.getPreferredSize().height));
				infoPanel.add(label);
				label = new JLabel(typeStr+PCARD.pc.intl.getDialogText("Part Number: ")+((OCardBase) ofld.parent).GetNumberofParts(ofld));
				label.setPreferredSize(new Dimension(w, label.getPreferredSize().height));
				infoPanel.add(label);
				
				infoPanel.setPreferredSize(new Dimension(w, 24*3));
			}
	
			//パネルを追加する
			{
				JPanel stylePanel = new JPanel();
				stylePanel.setLayout(new FlowLayout(FlowLayout.LEFT));
				authDialog.getContentPane().add(stylePanel);
		
				label = new JLabel(PCARD.pc.intl.getDialogText("Style:"));
				stylePanel.add(label);
				popup = new JComboBox(new String[]{
						//PCARD.pc.intl.getDialogText("Standard"),
						PCARD.pc.intl.getDialogText("Transparent"),
						PCARD.pc.intl.getDialogText("Opaque"),
						PCARD.pc.intl.getDialogText("Rectangle"),
						PCARD.pc.intl.getDialogText("Shadow"),
						PCARD.pc.intl.getDialogText("Scroll")});
				popup.setSelectedIndex(ofld.style-1);
				popup.setName("style");
				popup.setMaximumRowCount(17);
				popup.addActionListener(fldlistener);
				stylePanel.add(popup);
				
				stylePanel.setPreferredSize(new Dimension(w, popup.getPreferredSize().height+4));
			}
			
			//パネルを追加する
			{
				JPanel propPanel = new JPanel();
				propPanel.setLayout(new GridLayout(6,2));
				authDialog.getContentPane().add(propPanel);
		
				check = new JCheckBox(PCARD.pc.intl.getDialogText("Lock text"));
				check.setSelected(ofld.enabled);
				check.addActionListener(fldlistener);
				propPanel.add(check);
				check = new JCheckBox(PCARD.pc.intl.getDialogText("Visible"));
				check.setSelected(ofld.getVisible());
				check.addActionListener(fldlistener);
				propPanel.add(check);
				check = new JCheckBox(PCARD.pc.intl.getDialogText("Don't wrap"));
				check.setSelected(ofld.dontWrap);
				check.addActionListener(fldlistener);
				propPanel.add(check);
				check = new JCheckBox(PCARD.pc.intl.getDialogText("Auto select"));
				check.setSelected(ofld.autoSelect);
				check.addActionListener(fldlistener);
				propPanel.add(check);
				//check = new JCheckBox(PCARD.pc.intl.getDialogText("Multiple lines"));
				multiplelinesbtn.setEnabled(ofld.autoSelect);
				multiplelinesbtn.setSelected(ofld.multipleLines);
				multiplelinesbtn.addActionListener(fldlistener);
				propPanel.add(multiplelinesbtn);
				check = new JCheckBox(PCARD.pc.intl.getDialogText("Wide margins"));
				check.setSelected(ofld.wideMargins);
				check.addActionListener(fldlistener);
				propPanel.add(check);
				//check = new JCheckBox(PCARD.pc.intl.getDialogText("Fixed line height"));
				fixedlineheightbtn.setSelected(ofld.fixedLineHeight);
				fixedlineheightbtn.addActionListener(fldlistener);
				propPanel.add(fixedlineheightbtn);
				check = new JCheckBox(PCARD.pc.intl.getDialogText("Show lines"));
				check.setSelected(ofld.showLines);
				check.addActionListener(fldlistener);
				propPanel.add(check);
				check = new JCheckBox(PCARD.pc.intl.getDialogText("Auto tab"));
				check.setSelected(ofld.autoTab);
				check.addActionListener(fldlistener);
				propPanel.add(check);
				check = new JCheckBox(PCARD.pc.intl.getDialogText("Don't search"));
				check.setSelected(ofld.dontSearch);
				check.addActionListener(fldlistener);
				propPanel.add(check);
				if(ofld.parent.objectType.equals("background")){
					check = new JCheckBox(PCARD.pc.intl.getDialogText("Shared text"));
					check.setSelected(ofld.sharedText);
					check.addActionListener(fldlistener);
					propPanel.add(check);
				}
				
				propPanel.setPreferredSize(new Dimension(w, check.getPreferredSize().height*5));
			}
	
			//パネルを追加する
			/*{
				JPanel emptyPanel = new JPanel();
				authDialog.getContentPane().add(emptyPanel);
				
				emptyPanel.setPreferredSize(new Dimension(w, 8));
			}*/
			//パネルを追加する
			{
				JPanel colorPanel = new JPanel();
				authDialog.getContentPane().add(colorPanel);

				
				CPButton fore = new AuthColorButton(ofld.color,ofld,0);
				colorPanel.add(fore);
				CPButton back = new AuthColorButton(ofld.bgColor,ofld,1);
				colorPanel.add(back);
				
				colorPanel.setPreferredSize(new Dimension(w, 32));
			}
			
			//パネルを追加する
			{
				JPanel buttonPanel = new JPanel();
				buttonPanel.setLayout(new GridLayout(1,2));
				authDialog.getContentPane().add(buttonPanel);
	
				jbtn = new JButton(PCARD.pc.intl.getDialogText("Font…"));
				jbtn.addActionListener(fldlistener);
				buttonPanel.add(jbtn);
				jbtn = new JButton(PCARD.pc.intl.getDialogText("Script…"));
				jbtn.addActionListener(fldlistener);
				buttonPanel.add(jbtn);
				
				buttonPanel.setPreferredSize(new Dimension(w, check.getPreferredSize().height*1+4));
			}
		}

		//card
		if(type.equals("card")){
			OCard ocard = (OCard)obj;
			AuthCardListener cardlistener = new AuthCardListener();
			
			//パネルを追加する
			{
				JPanel namePanel = new JPanel();
				authDialog.getContentPane().add(namePanel);
				
				label = new JLabel(PCARD.pc.intl.getDialogText("Card Name:"));
				namePanel.add(label);
				jfield = new JTextField(ocard.name);
				jfield.setName("name");
				jfield.setPreferredSize(new Dimension(w*2/3, jfield.getPreferredSize().height));
				AuthTextListener listener = new AuthTextListener(jfield);
				jfield.getDocument().addDocumentListener(listener);
				namePanel.add(jfield);
				
				namePanel.setPreferredSize(new Dimension(w, jfield.getPreferredSize().height+4));
			}
			
			//パネルを追加する
			{
				JPanel infoPanel = new JPanel();
				infoPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
				authDialog.getContentPane().add(infoPanel);
				
				String typeStr = "";
				typeStr = PCARD.pc.intl.getDialogText("Card ");
				label = new JLabel(typeStr+PCARD.pc.intl.getDialogText("ID: ")+ocard.id);
				label.setPreferredSize(new Dimension(w, label.getPreferredSize().height));
				infoPanel.add(label);
				label = new JLabel(typeStr+PCARD.pc.intl.getDialogText("Number: ")+ocard.stack.GetNumberof(ocard) 
						+ " / " + (ocard.stack.GetCardListSize()));
				label.setPreferredSize(new Dimension(w, label.getPreferredSize().height));
				infoPanel.add(label);
				
				infoPanel.setPreferredSize(new Dimension(w, 24*2));
			}
			
			//パネルを追加する
			{
				JPanel propPanel = new JPanel();
				propPanel.setLayout(new GridLayout(4,1));
				authDialog.getContentPane().add(propPanel);
		
				check = new JCheckBox(PCARD.pc.intl.getDialogText("Show picture"));
				check.setSelected(ocard.showPict);
				check.addActionListener(cardlistener);
				propPanel.add(check);
				check = new JCheckBox(PCARD.pc.intl.getDialogText("Marked"));
				check.setSelected(ocard.marked);
				check.addActionListener(cardlistener);
				propPanel.add(check);
				check = new JCheckBox(PCARD.pc.intl.getDialogText("Don't search"));
				check.setSelected(ocard.dontSearch);
				check.addActionListener(cardlistener);
				propPanel.add(check);
				check = new JCheckBox(PCARD.pc.intl.getDialogText("Can't delete"));
				check.setSelected(ocard.cantDelete);
				check.addActionListener(cardlistener);
				propPanel.add(check);
				
				propPanel.setPreferredSize(new Dimension(w, check.getPreferredSize().height*4));
			}
			
			//パネルを追加する
			{
				JPanel buttonPanel = new JPanel();
				//buttonPanel.setLayout(new GridLayout(1,1));
				authDialog.getContentPane().add(buttonPanel);
	
				jbtn = new JButton(PCARD.pc.intl.getDialogText("Script…"));
				jbtn.addActionListener(cardlistener);
				buttonPanel.add(jbtn);
				
				buttonPanel.setPreferredSize(new Dimension(w, jbtn.getPreferredSize().height*1+8));
			}
		}

		//background
		if(type.equals("background")){
			OBackground obkgnd = (OBackground)obj;
			AuthBgListener bglistener = new AuthBgListener();
			
			//パネルを追加する
			{
				JPanel namePanel = new JPanel();
				authDialog.getContentPane().add(namePanel);
				
				label = new JLabel(PCARD.pc.intl.getDialogText("Background Name:"));
				namePanel.add(label);
				jfield = new JTextField(obkgnd.name);
				jfield.setName("name");
				jfield.setPreferredSize(new Dimension(w*1/2, jfield.getPreferredSize().height));
				AuthTextListener listener = new AuthTextListener(jfield);
				jfield.getDocument().addDocumentListener(listener);
				namePanel.add(jfield);
				
				namePanel.setPreferredSize(new Dimension(w, jfield.getPreferredSize().height+4));
			}
			
			//パネルを追加する
			{
				JPanel infoPanel = new JPanel();
				infoPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
				authDialog.getContentPane().add(infoPanel);
				
				String typeStr = "";
				typeStr = PCARD.pc.intl.getDialogText("Background ");
				label = new JLabel(typeStr+PCARD.pc.intl.getDialogText("ID: ")+obkgnd.id);
				label.setPreferredSize(new Dimension(w, label.getPreferredSize().height));
				infoPanel.add(label);
				label = new JLabel(typeStr+PCARD.pc.intl.getDialogText("Number: ")+obkgnd.stack.GetNumberof(obkgnd) 
						+ " / " + (obkgnd.stack.GetBgListSize()));
				label.setPreferredSize(new Dimension(w, label.getPreferredSize().height));
				infoPanel.add(label);
				
				infoPanel.setPreferredSize(new Dimension(w, 24*2));
			}
			
			//パネルを追加する
			{
				JPanel propPanel = new JPanel();
				propPanel.setLayout(new GridLayout(3,1));
				authDialog.getContentPane().add(propPanel);
		
				check = new JCheckBox(PCARD.pc.intl.getDialogText("Show picture"));
				check.setSelected(obkgnd.showPict);
				check.addActionListener(bglistener);
				propPanel.add(check);
				check = new JCheckBox(PCARD.pc.intl.getDialogText("Don't search"));
				check.setSelected(obkgnd.dontSearch);
				check.addActionListener(bglistener);
				propPanel.add(check);
				check = new JCheckBox(PCARD.pc.intl.getDialogText("Can't delete"));
				check.setSelected(obkgnd.cantDelete);
				check.addActionListener(bglistener);
				propPanel.add(check);
				
				propPanel.setPreferredSize(new Dimension(w, check.getPreferredSize().height*3));
			}
			
			//パネルを追加する
			{
				JPanel buttonPanel = new JPanel();
				//buttonPanel.setLayout(new GridLayout(1,1));
				authDialog.getContentPane().add(buttonPanel);
	
				jbtn = new JButton(PCARD.pc.intl.getDialogText("Script…"));
				jbtn.addActionListener(bglistener);
				buttonPanel.add(jbtn);
				
				buttonPanel.setPreferredSize(new Dimension(w, jbtn.getPreferredSize().height*1+8));
			}
		}

		//stack
		if(type.equals("stack")){
			OStack ostack = (OStack)obj;
			AuthStackListener stacklistener = new AuthStackListener();
			
			//パネルを追加する
			{
				JPanel namePanel = new JPanel();
				authDialog.getContentPane().add(namePanel);
				
				label = new JLabel(PCARD.pc.intl.getDialogText("Stack Name:"));
				namePanel.add(label);
				jfield = new JTextField(ostack.name);
				jfield.setName("name");
				jfield.setPreferredSize(new Dimension(w*2/3, jfield.getPreferredSize().height));
				AuthTextListener listener = new AuthTextListener(jfield);
				jfield.getDocument().addDocumentListener(listener);
				namePanel.add(jfield);
				
				namePanel.setPreferredSize(new Dimension(w, jfield.getPreferredSize().height+4));
			}
			
			//パネルを追加する
			{
				JPanel infoPanel = new JPanel();
				infoPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
				authDialog.getContentPane().add(infoPanel);
				
				JTextArea area = new JTextArea(PCARD.pc.intl.getDialogText("Stack Path: ")+ostack.file.getPath());
				area.setPreferredSize(new Dimension(w, 64));
				area.setLineWrap(true);
				infoPanel.add(area);
				
				infoPanel.setPreferredSize(new Dimension(w, 64*1));
			}
			
			//パネルを追加する
			{
				JPanel buttonPanel = new JPanel();
				buttonPanel.setLayout(new GridLayout(1,2));
				authDialog.getContentPane().add(buttonPanel);
	
				jbtn = new JButton(PCARD.pc.intl.getDialogText("Script…"));
				jbtn.addActionListener(stacklistener);
				buttonPanel.add(jbtn);
				jbtn = new JButton(PCARD.pc.intl.getDialogText("Size…"));
				jbtn.addActionListener(stacklistener);
				buttonPanel.add(jbtn);
				jbtn = new JButton(PCARD.pc.intl.getDialogText("Card List…"));
				jbtn.addActionListener(stacklistener);
				buttonPanel.add(jbtn);
				
				buttonPanel.setPreferredSize(new Dimension(w, 24+8));
			}
		}

		if(newOpen){
			int left = 0;
			if(obj.left+obj.width/2 > owner.getWidth()/2){
				left = owner.getX() +obj.left +PCARD.pc.toolbar.getTWidth() -w;
			}
			else{
				left = owner.getX() +obj.left +PCARD.pc.toolbar.getTWidth() +obj.width;
			}
			authDialog.setBounds(left, owner.getY()+owner.getHeight()/2-h/2 ,w,h);
		}
		
		authDialog.getContentPane().repaint();
		authDialog.setVisible(true);
	}

	
	static class AuthButtonListener implements ActionListener
	{
		public void actionPerformed(ActionEvent e) {
			String in_cmd = e.getActionCommand();
			if(in_cmd.equals("comboBoxChanged")){
				in_cmd = ((JComboBox)e.getSource()).getName();
			}
			String cmd = PCARD.pc.intl.getDialogEngText(in_cmd);
			
			if(cmd.equals("style")){
				if(object.objectType.equals("button")){
					((OButton)object).style = ((JComboBox)e.getSource()).getSelectedIndex();
					
					OCard.reloadCurrentCard();
				}
			}
			else if(cmd.equals("family")){
				if(object.objectType.equals("button")){
					if(((OButton)object).group >= 1 && ((OButton)object).radio!=null){
						OButton.btnGroup[((OButton)object).group-1].remove(((OButton)object).radio);
					}
					((OButton)object).group = ((JComboBox)e.getSource()).getSelectedIndex();
					if(((OButton)object).group >= 1 && ((OButton)object).radio!=null){
						OButton.btnGroup[((OButton)object).group-1].add(((OButton)object).radio);
					}
				}
			}
			else if(cmd.equals("Show Name")){
				if(object.objectType.equals("button")){
					((OButton)object).setShowName(((JCheckBox)e.getSource()).isSelected());
				}
			}
			else if(cmd.equals("Enabled")){
				if(object.objectType.equals("button")){
					((OButton)object).setEnabled(((JCheckBox)e.getSource()).isSelected());
				}
			}
			else if(cmd.equals("Visible")){
				if(object.objectType.equals("button")){
					((OButton)object).setVisible(((JCheckBox)e.getSource()).isSelected());
				}
			}
			else if(cmd.equals("Auto Hilite")){
				if(object.objectType.equals("button")){
					((OButton)object).setAutoHilite(((JCheckBox)e.getSource()).isSelected());
				}
			}
			else if(cmd.equals("Shared Hilite")){
				if(object.objectType.equals("button")){
					((OButton)object).sharedHilite = ((JCheckBox)e.getSource()).isSelected();
				}
			}
			else if(cmd.equals("Scale Icon")){
				if(object.objectType.equals("button")){
					((OButton)object).setScaleIcon(((JCheckBox)e.getSource()).isSelected());
					((OButton)object).setIcon(((OButton)object).icon);
				}
			}
			else if(cmd.equals("Font…")){
				new GFontDialog(PCARD.pc, ((OButton)object).textFont, ((OButton)object).textSize, ((OButton)object).textStyle, ((OButton)object).textAlign);
				((OButton)object).textSize = GFontDialog.selectedSize;
				((OButton)object).textStyle = GFontDialog.selectedStyle;
				((OButton)object).textAlign = GFontDialog.selectedAlign;
				((OButton)object).setTextFont(GFontDialog.selectedFont);
			}
			else if(cmd.equals("Icon…")){
				new ResEdit(PCARD.pc, "icon", object);
			}
			else if(cmd.equals("LinkTo…")){
				
			}
			else if(cmd.equals("Effect…")){
				
			}
			else if(cmd.equals("Script…")){
				ScriptEditor.openScriptEditor(PCARD.pc, object);
			}
			else if(cmd.equals("Content…")){
				new TextEditor(PCARD.pc, object);
			}
			else{
				System.out.println("AuthTool AuthButtonListener actionPerformed Error!!");
			}
			
			if(object.getClass()==OStack.class){
				((OStack)object).changed = true;
			}
			else if(object.getClass()==OCard.class || object.getClass()==OBackground.class){
				((OCardBase)object).changed = true;
			}
			else if(object.getClass()==OButton.class || object.getClass()==OField.class){
				((OCardBase)object.parent).changed = true;
			}
		}
	}

	static class AuthFieldListener implements ActionListener
	{
		JCheckBox multiplelinesbtn;
		JCheckBox fixedlineheightbtn;
		
		AuthFieldListener(JCheckBox multiplelinesbtn, JCheckBox fixedlineheightbtn){
			this.multiplelinesbtn = multiplelinesbtn;
			this.fixedlineheightbtn = fixedlineheightbtn;
		}
		
		public void actionPerformed(ActionEvent e) {
			String in_cmd = e.getActionCommand();
			if(in_cmd.equals("comboBoxChanged")){
				in_cmd = ((JComboBox)e.getSource()).getName();
			}
			String cmd = PCARD.pc.intl.getDialogEngText(in_cmd);
			
			if(cmd.equals("style")){
				if(object.objectType.equals("field")){
					((OField)object).style = ((JComboBox)e.getSource()).getSelectedIndex()+1;
					
					OCard.reloadCurrentCard();
				}
			}
			else if(cmd.equals("Visible")){
				if(object.objectType.equals("field")){
					((OField)object).setVisible(((JCheckBox)e.getSource()).isSelected());
				}
			}
			else if(cmd.equals("Locked text")){
				if(object.objectType.equals("field")){
					((OField)object).enabled = ((JCheckBox)e.getSource()).isSelected();
				}
			}
			else if(cmd.equals("Don't wrap")){
				if(object.objectType.equals("field")){
					((OField)object).dontWrap = ((JCheckBox)e.getSource()).isSelected();
				}
			}
			else if(cmd.equals("Auto select")){
				if(object.objectType.equals("field")){
					((OField)object).autoSelect = ((JCheckBox)e.getSource()).isSelected();
					multiplelinesbtn.setEnabled(((OField)object).autoSelect);
					if(((OField)object).autoSelect){
						fixedlineheightbtn.setEnabled(false);
						fixedlineheightbtn.setSelected(true);
					}else{
						fixedlineheightbtn.setEnabled(true);
					}
				}
			}
			else if(cmd.equals("Multiple lines")){
				if(object.objectType.equals("field")){
					((OField)object).multipleLines = ((JCheckBox)e.getSource()).isSelected();
				}
			}
			else if(cmd.equals("Wide margins")){
				if(object.objectType.equals("field")){
					((OField)object).wideMargins = ((JCheckBox)e.getSource()).isSelected();
				}
			}
			else if(cmd.equals("Fixed line height")){
				if(object.objectType.equals("field")){
					((OField)object).fixedLineHeight = ((JCheckBox)e.getSource()).isSelected();
				}
			}
			else if(cmd.equals("Show lines")){
				if(object.objectType.equals("field")){
					((OField)object).showLines = ((JCheckBox)e.getSource()).isSelected();
				}
			}
			else if(cmd.equals("Auto tab")){
				if(object.objectType.equals("field")){
					((OField)object).autoTab = ((JCheckBox)e.getSource()).isSelected();
				}
			}
			else if(cmd.equals("Don't search")){
				if(object.objectType.equals("field")){
					((OField)object).dontSearch = ((JCheckBox)e.getSource()).isSelected();
				}
			}
			else if(cmd.equals("Shared Text")){
				if(object.objectType.equals("field")){
					((OField)object).sharedText = ((JCheckBox)e.getSource()).isSelected();
				}
			}
			else if(cmd.equals("Font…")){
				new GFontDialog(PCARD.pc, ((OField)object).textFont, ((OField)object).textSize, ((OField)object).textStyle, ((OField)object).textAlign);
				((OField)object).textSize = GFontDialog.selectedSize;
				((OField)object).textStyle = GFontDialog.selectedStyle;
				((OField)object).textAlign = GFontDialog.selectedAlign;
				((OField)object).setTextFont(GFontDialog.selectedFont);
			}
			else if(cmd.equals("Script…")){
				ScriptEditor.openScriptEditor(PCARD.pc, object);
			}
			else{
				System.out.println("AuthTool AuthFieldListener actionPerformed Error!!");
			}
			
			if(((OField)object).getComponent()!=null){
				((OField)object).getComponent().paintImmediately(((OField)object).getComponent().getBounds());
			}
		}
	}

	static class AuthCardListener implements ActionListener
	{
		public void actionPerformed(ActionEvent e) {
			String in_cmd = e.getActionCommand();
			if(in_cmd.equals("comboBoxChanged")){
				in_cmd = ((JComboBox)e.getSource()).getName();
			}
			String cmd = PCARD.pc.intl.getDialogEngText(in_cmd);
			
			if(cmd.equals("Show picture")){
				if(object.objectType.equals("card")){
					((OCard)object).showPict = ((JCheckBox)e.getSource()).isSelected();
				}
			}
			else if(cmd.equals("Don't search")){
				if(object.objectType.equals("card")){
					((OCard)object).dontSearch = ((JCheckBox)e.getSource()).isSelected();
				}
			}
			else if(cmd.equals("Can't delete")){
				if(object.objectType.equals("card")){
					((OCard)object).cantDelete = ((JCheckBox)e.getSource()).isSelected();
				}
			}
			else if(cmd.equals("Marked")){
				if(object.objectType.equals("card")){
					((OCard)object).marked = ((JCheckBox)e.getSource()).isSelected();
				}
			}
			else if(cmd.equals("Script…")){
				ScriptEditor.openScriptEditor(PCARD.pc, object);
			}
			else{
				System.out.println("AuthTool AuthCardListener actionPerformed Error!!");
			}
			
			if(((OCard)object).label!=null){
				((OCard)object).label.paintImmediately(((OCard)object).label.getBounds());
			}
		}
	}

	static class AuthBgListener implements ActionListener
	{
		public void actionPerformed(ActionEvent e) {
			String in_cmd = e.getActionCommand();
			if(in_cmd.equals("comboBoxChanged")){
				in_cmd = ((JComboBox)e.getSource()).getName();
			}
			String cmd = PCARD.pc.intl.getDialogEngText(in_cmd);
			
			if(cmd.equals("Show picture")){
				if(object.objectType.equals("background")){
					((OBackground)object).showPict = ((JCheckBox)e.getSource()).isSelected();
				}
			}
			else if(cmd.equals("Can't delete")){
				if(object.objectType.equals("background")){
					((OBackground)object).cantDelete = ((JCheckBox)e.getSource()).isSelected();
				}
			}
			else if(cmd.equals("Don't search")){
				if(object.objectType.equals("card")){
					((OBackground)object).dontSearch = ((JCheckBox)e.getSource()).isSelected();
				}
			}
			else if(cmd.equals("Script…")){
				ScriptEditor.openScriptEditor(PCARD.pc, object);
			}
			else{
				System.out.println("AuthTool AuthBgListener actionPerformed Error!!");
			}
			
			if(((OBackground)object).label!=null){
				((OBackground)object).label.paintImmediately(((OBackground)object).label.getBounds());
			}
		}
	}
	
	static class AuthStackListener implements ActionListener
	{
		public void actionPerformed(ActionEvent e) {
			String in_cmd = e.getActionCommand();
			if(in_cmd.equals("comboBoxChanged")){
				in_cmd = ((JComboBox)e.getSource()).getName();
			}
			String cmd = PCARD.pc.intl.getDialogEngText(in_cmd);

			if(cmd.equals("Script…")){
				ScriptEditor.openScriptEditor(PCARD.pc, object);
			}
			else if(cmd.equals("Size…")){
				new SizeDialog(AuthDialog.authDialog);
			}
			else if(cmd.equals("Card List…")){
				String str = "";
				for(int i=0;i<PCARD.pc.stack.cardIdList.size();i++){
					int id = PCARD.pc.stack.cardIdList.get(i);
					OCard card = PCARD.pc.stack.GetCardbyId(id);
					str += "card("+ i +") id:"+ id +" name:"+card.name+" btns:"+card.btnList.size()+" flds:"+card.fldList.size()+"\n";
				}
				new GScrollDialog(null, str, null, null, null, "OK");
			}
			else{
				System.out.println("AuthTool AuthStackListener actionPerformed Error!!");
			}
		}
	}
	
	static class AuthTextListener implements DocumentListener
	{
		JTextField jfield;
		
		public AuthTextListener(JTextField fld){
			jfield = fld;
		}
		
		public void changedUpdate(DocumentEvent e) {
			if(jfield.getName().equals("name")){
				if(object.objectType.equals("button")){
					((OButton)object).setName(jfield.getText());
				}else{
					object.name = jfield.getText();
				}
			}
		}

		public void insertUpdate(DocumentEvent e) {
			changedUpdate(e);
		}

		public void removeUpdate(DocumentEvent e) {
			changedUpdate(e);
		}
	}
	

	static class SizeDialog extends JDialog implements ActionListener {
		private static final long serialVersionUID = 1L;
		JTextField widthField;
		JTextField heightField;
		JButton defaultButton;
		
		SizeDialog(JDialog owner) {
			super(owner, true);
			getContentPane().setLayout(new BorderLayout());

			//パネルを追加する
			JPanel topPanel = new JPanel();
			topPanel.setLayout(new GridLayout(2,1));
			topPanel.setPreferredSize(new Dimension(200,80));
			getContentPane().add("Center",topPanel);
			
			{
				JPanel panel = new JPanel();
				panel.setLayout(new FlowLayout());
				//panel.setPreferredSize(new Dimension(320,32));
				
				JLabel label = new JLabel(PCARD.pc.intl.getDialogText("Width:"));
				label.setPreferredSize(new Dimension(64, label.getPreferredSize().height));
				panel.add(label);
				
				JTextField area1 = new JTextField(""+PCARD.pc.stack.width);
				area1.setPreferredSize(new Dimension(64, area1.getPreferredSize().height));
				panel.add(area1);
				widthField = area1;
				topPanel.add(panel);
			}
			{
				JPanel panel = new JPanel();
				//panel.setPreferredSize(new Dimension(320,32));
				
				JLabel label = new JLabel(PCARD.pc.intl.getDialogText("Height:"));
				label.setPreferredSize(new Dimension(64, label.getPreferredSize().height));
				panel.add(label);
				JTextField area2 = new JTextField(""+PCARD.pc.stack.height);
				area2.setPreferredSize(new Dimension(64, area2.getPreferredSize().height));
				panel.add(area2);
				heightField = area2;
				topPanel.add(panel);
			}
			
			//パネルを追加する
			JPanel btmPanel = new JPanel();
			getContentPane().add("South",btmPanel);

			{
				JButton btn1 = new JButton("Cancel");
				btn1.addActionListener(this);
				btmPanel.add(btn1);
			}
			
			{
				JButton btn2 = new JButton("OK");
				btn2.addActionListener(this);
				btmPanel.add(btn2);
				getRootPane().setDefaultButton(btn2);
				defaultButton = btn2;
			}

			setBounds(owner.getX()+owner.getWidth()/2-120,owner.getY()+owner.getHeight()/2-120,240,160);
			setUndecorated(true);//タイトルバー非表示
			
			SwingUtilities.invokeLater(new Runnable() {
				public void run() {
					if(defaultButton!=null) defaultButton.requestFocus();
				}
			});
			
			setVisible(true);
			
		}
		
		public void actionPerformed(ActionEvent e) {
			if(e.getActionCommand().equals("OK")){
				int width = 0;
				int height = 0;
				try{
					width = Integer.valueOf(widthField.getText());
					height = Integer.valueOf(heightField.getText());
				}catch(Exception e2){
					
				}
				if(width<=32 || height <=32 || width*height >= 4000*3000){
		    		new GDialog(PCARD.pc, PCARD.pc.intl.getDialogText("Illegal size.")
		    				,null,"OK",null,null);
				}
				else
				{
					PCARD.pc.stack.width = width;
					PCARD.pc.stack.height = height;
					Rectangle r = PCARD.pc.getBounds();
					PCARD.pc.setBounds(r.x, r.y, width, height + PCARD.pc.getInsets().top);
					PCARD.pc.mainPane.setBounds(0, 0, width, height);
				}
			}
			this.dispose();
		}
	}
}

class AuthColorButton extends CPButton
{
	private static final long serialVersionUID = 3564756897317769905L;

	int type;
	OObject obj;
	
	AuthColorButton(Color in_color, OObject obj, int type){
		super(in_color,0,0,false);
		this.obj = obj;
		this.type = type;
	}
	
	@Override
	public void makeIcon(Color col){
		super.makeIcon(col);
		
		if(obj.getClass()==OButton.class){
			if(type==0) ((OButton)obj).setColor(col);
			if(type==1) ((OButton)obj).setBgColor(col);
		}
		else if(obj.getClass()==OField.class){
			if(type==0) ((OField)obj).setColor(col);
			if(type==1) ((OField)obj).setBgColor(col);
		}
		OCard.reloadCurrentCard();
	}
}