package cx.ath.hoenicke.otp.client;

import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.FormHandler;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.FormSubmitCompleteEvent;
import com.google.gwt.user.client.ui.FormSubmitEvent;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.KeyboardListener;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;

public class LoginDialog extends DialogBox implements ClickListener, FormHandler, KeyboardListener {
	Client client;
	TextBox loginField;
	PasswordTextBox pwField;
	Button submitButton;
	FormPanel form;
	
	public LoginDialog(Client client) {
		this.client = client;
		setText("Anmelden");

		FlexTable loginBox = new FlexTable();
		loginBox.setWidget(0,0, new Label("Benutzer: "));
		loginField = new TextBox();
		loginField.setName("user");
		loginField.setVisibleLength(20);
		loginField.setMaxLength(20);
		loginField.addKeyboardListener(this);
		loginBox.setWidget(0, 1, loginField);
		loginBox.setWidget(1, 0, new Label("Passwort: "));
		pwField = new PasswordTextBox();
		pwField.setName("pw");
		pwField.setVisibleLength(20);
		pwField.setMaxLength(60);
		pwField.addKeyboardListener(this);
		loginBox.setWidget(1, 1, pwField);
		submitButton = new Button("Anmelden");
		submitButton.addClickListener(this);
		loginBox.setWidget(2, 0, submitButton);
		loginBox.getFlexCellFormatter().
			setHorizontalAlignment(2, 0, HasHorizontalAlignment.ALIGN_CENTER);
		loginBox.getFlexCellFormatter().setColSpan(2, 0, 2);
		form = new FormPanel();
		form.setWidget(loginBox);
		form.setAction("javascript:''");
		form.addFormHandler(this);
		setWidget(form);
	}
	
	public void onClick(Widget sender) {
		client.setAuth(loginField.getText(), pwField.getText());
		hide();
	}
	
	public void onKeyDown(Widget sender, char keyCode, int modifiers) {
	}

	public void onKeyPress(Widget sender, char keycode, int modifiers) {
		if (keycode == KEY_ENTER) {
			if (sender == loginField) {
				pwField.setFocus(true);
			} else if (sender == pwField) {
				submitButton.click();
			}
		}
	}

	public void onKeyUp(Widget sender, char keyCode, int modifiers) {
	}

	public void onSubmit(FormSubmitEvent event) {
		client.setAuth(loginField.getText(), pwField.getText());
	}

	public void onSubmitComplete(FormSubmitCompleteEvent event) {
		hide();
	}

	public void show() {
		super.show();
		loginField.setFocus(true);
	}
}

