Index: /trunk/src/org/expeditee/gui/FrameUtils.java
===================================================================
--- /trunk/src/org/expeditee/gui/FrameUtils.java	(revision 528)
+++ /trunk/src/org/expeditee/gui/FrameUtils.java	(revision 529)
@@ -45,4 +45,5 @@
 import org.expeditee.items.widgets.InteractiveWidgetInitialisationFailedException;
 import org.expeditee.items.widgets.InteractiveWidgetNotAvailableException;
+import org.expeditee.items.widgets.Password;
 import org.expeditee.items.widgets.WidgetCorner;
 import org.expeditee.items.widgets.WidgetEdge;
@@ -706,4 +707,6 @@
 				} else if (attribute.equals("colorwheel")) {
 					Item.COLOR_WHEEL = getColorWheel(item);
+				} else if (attribute.equals("proxy")) {
+					proxySetup(item);
 				} else if (attribute.equals("fillcolorwheel")) {
 					Item.FILL_COLOR_WHEEL = getColorWheel(item);
@@ -732,4 +735,60 @@
 
 		return errors;
+	}
+
+	/**
+	 * Loads proxy config from a frame
+	 * To be used with authentication code to allow web browsers to work through a proxy
+	 * @author jts21
+	 */
+	private static void proxySetup(Item item) {
+		Frame child = item.getChild();
+		// FrameUtils.Parse(child);
+		Password passwordWidget = null;
+		for(Item config : child.getAllItems()) {
+			// System.out.println(config.toString());
+			if(config instanceof Text) {
+				String str = config.getText().trim().toLowerCase();
+				if(str.startsWith("http_host:")) {
+					System.out.println(str.substring(10).trim());
+				} else if(str.startsWith("http_port:")) {
+					System.out.println(str.substring(10).trim());
+				} else if(str.startsWith("https_host:")) {
+					System.out.println(str.substring(11).trim());
+				} else if(str.startsWith("https_port:")) {
+					System.out.println(str.substring(11).trim());
+				} else if(str.startsWith("proxy_user:")) {
+					System.out.println(str.substring(11).trim());
+				} else if(str.startsWith("proxy_pass:")) { // unencrypted password
+					System.out.println(str.substring(11).trim());
+				} else if(str.startsWith("@iw:")) {	      // widget
+					// check if it's a password widget
+					if(str.substring(4).trim().startsWith("org.expeditee.items.widgets.password")) {
+						if(passwordWidget == null) {
+							try {
+								passwordWidget = (Password) InteractiveWidget.createWidget((Text)config);
+								System.out.println(passwordWidget.getPassword());
+							} catch (Exception e) {
+								e.printStackTrace();
+							}
+						}
+					}
+				}
+			} else if(config instanceof WidgetCorner || config instanceof WidgetEdge) {
+				// System.out.println("BLAH");
+				if(passwordWidget == null) {
+					InteractiveWidget iw;
+					if(config instanceof WidgetCorner) {
+						iw = ((WidgetCorner)config).getWidgetSource();
+					} else {
+						iw = ((WidgetEdge)config).getWidgetSource();
+					}
+					if(iw instanceof Password) {
+						passwordWidget = (Password) iw;
+					}
+					System.out.println(passwordWidget.getPassword());
+				}
+			}
+		}
 	}
 
Index: /trunk/src/org/expeditee/items/widgets/Password.java
===================================================================
--- /trunk/src/org/expeditee/items/widgets/Password.java	(revision 529)
+++ /trunk/src/org/expeditee/items/widgets/Password.java	(revision 529)
@@ -0,0 +1,35 @@
+package org.expeditee.items.widgets;
+
+import javax.swing.JPasswordField;
+
+import org.expeditee.items.Text;
+
+/**
+ * Allows entering password data in non-visible form
+ * TODO: encrypt this before storing it
+ * @author jts21
+ */
+public class Password extends InteractiveWidget {
+
+	private String[] args;
+	private JPasswordField passwordField;
+	
+	public Password(Text source, String[] args) {
+		super(source, new JPasswordField(), 100, 500, 10, 30);
+		this.passwordField = (JPasswordField) super._swingComponent;
+		if(args != null && args.length > 0) {
+			this.passwordField.setText(args[0]);
+		}
+		this.args = args;
+	}
+
+	@Override
+	protected String[] getArgs() {
+		return new String[] { new String(this.passwordField.getPassword()) };
+	}
+	
+	public String getPassword() {
+		return new String(this.passwordField.getPassword());
+	}
+
+}
