/**
 * 
 */
package com.tootsville.tootsbook.client.panel;

import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Node;
import com.google.gwt.user.client.ui.SimplePanel;
import com.tootsville.tootsbook.client.TootsBook;

/**
 * <code>AvatarBox avatarPanel = new AvatarBox (); </code>
 * <code>avatarPanel.setStyleName ("avatar-portrait");</code>
 * <code>Box avatarBox = new Box (avatarPanel);</code>
 * <code>avatarBox.build ();</code>
 * 
 * @author <a href="mailto:twheys@gmail.com@resinteractive.com">Tim
 *         Heys</a>
 */
public class AvatarBox extends SimplePanel {

	/**
	 * <pre>
	 * twheys@gmail.com Jan 18, 2010
	 * </pre>
	 * 
	 * TO addParametersToObject WRITEME...
	 * 
	 * @param flashVars WRITEME
	 * @param flashLoc WRITEME
	 * @param objectTag WRITEME
	 */
	private static void addParametersToObject (final String flashVars,
			final String flashLoc, final Element objectTag) {
		objectTag.appendChild ((Element) AvatarBox.getParam ("movie",
				"/tootbook-resource/avatarViewerTB.swf"));
		objectTag.appendChild ((Element) AvatarBox.getParam (
				"flashvars", flashVars));
		objectTag.appendChild ((Element) AvatarBox.getParam ("quality",
				"high"));
		objectTag.appendChild ((Element) AvatarBox.getParam ("wmode",
				"transparent"));
		objectTag.appendChild ((Element) AvatarBox.getParam (
				"allowScriptAccess", "sameDomain"));
	}

	/**
	 * <pre>
	 * twheys@gmail.com Jan 13, 2010
	 * </pre>
	 * 
	 * TO getObjectTag WRITEME...
	 * 
	 * @param flashVars WRITEME
	 * @param flashLoc WRITEME
	 * @return WRITEME
	 */
	public native static JavaScriptObject getEmbedTag (
			final String flashVars, final String flashLoc)/*-{
        var embedTag = $doc.createElement ("embed");
        embedTag.setAttribute ("src", flashLoc);
        embedTag.setAttribute ("flashvars", flashVars);
        embedTag.setAttribute ("play", "false");
        embedTag.setAttribute ("loop", "false");
        embedTag.setAttribute ("quality", "high");
        embedTag.setAttribute ("wmode", "transparent");
        embedTag.setAttribute ("width", "215px");
        embedTag.setAttribute ("allowFullScreen", "false");
        embedTag.setAttribute ("type", "application/x-shockwave-flash");
        embedTag.setAttribute ("pluginspage", "http://www.macromedia.com/go/getflashplayer");
        embedTag.setAttribute ("name", "avatarViewerTB");
        return embedTag;
    }-*/;

	/**
	 * <pre>
	 * twheys@gmail.com Jan 13, 2010
	 * </pre>
	 * 
	 * TO getObjectTag WRITEME...
	 * 
	 * @param flashVars WRITEME
	 * @param flashLoc WRITEME
	 * @return WRITEME
	 */
	private static Element getObjectTag (final String flashVars,
			final String flashLoc) {
		final Element objectTag = (Element) AvatarBox
				.getObjectTagImpl ();
		objectTag.setAttribute ("id", "avatarViewerTB");
		objectTag
				.setAttribute (
						"codebase",
						"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0");
		objectTag.setAttribute ("classid",
				"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000");
		objectTag.setAttribute ("width", "215px");
		objectTag.setAttribute ("height", "250px");

		AvatarBox
				.addParametersToObject (flashVars, flashLoc, objectTag);
		objectTag.appendChild ((Node) AvatarBox.getEmbedTag (flashVars,
				flashLoc));

		return objectTag;
	}

	/**
	 * <pre>
	 * twheys@gmail.com Jan 26, 2010
	 * </pre>
	 * 
	 * TO getObjectTagImpl WRITEME...
	 * 
	 * @return WRITEME
	 */
	private native static JavaScriptObject getObjectTagImpl ()/*-{
        return $doc.createElement ("object");
    }-*/;

	/**
	 * <pre>
	 * twheys@gmail.com Jan 13, 2010
	 * </pre>
	 * 
	 * TO getParam WRITEME...
	 * 
	 * @param name WRITEME
	 * @param value WRITEME
	 * @return WRITEME
	 * @SuppressWarnings ("unused") Is used
	 */
	public native static JavaScriptObject getParam (final String name,
			final String value)/*-{
        var param = $doc.createElement ("param");
        param.setAttribute ("value", value);
        param.setAttribute ("name", name);
        return param;
    }-*/;

	/**
	 * <pre>
	 * twheys@gmail.com Jan 25, 2010
	 * </pre>
	 * 
	 * TO updateAvatarBackground WRITEME...
	 * 
	 * @param avatarBackgroundURL WRITEME
	 */
	public native static void updateAvatarBackground (
			String avatarBackgroundURL)/*-{
        var avatarViewerTB;			
        var userAgent = window.navigator.userAgent.toLowerCase();
        avatarViewerTB = $doc["avatarViewerTB"];
        if (avatarViewerTB) {
        try {
        avatarViewerTB.setBG(avatarBgURL);
        } catch (err) {
        // do nothing
        }
        }
    }-*/;

	/**
	 * @param userID The ShadowUser ID of whom to view
	 * @param AvatarBgURL The Background Image URL for the viewer
	 */
	public AvatarBox (final String userID, final String AvatarBgURL) {
		final String flashVars = "userID=" + userID + "&bg="
				+ AvatarBgURL + "&configURL="
				+ "/tootbook-resource/tootBookConfig.xml" + "&debug="
                + "true&libURL=/tootbook-resource/lib.swf";
		final String flashLoc = "/tootbook-resource/avatarViewerTB.swf";
		if (TootsBook.ifIE ()) {
			getElement ().setInnerHTML (
					getFlashHTML (flashVars, flashLoc));
		} else {
			setElement (AvatarBox.getObjectTag (flashVars, flashLoc));
		}
	}

	/**
	 * <pre>
	 * twheys@gmail.com Jan 18, 2010
	 * </pre>
	 * 
	 * TO getHTML WRITEME...
	 * 
	 * @param flashVars WRITEME
	 * @param flashLoc WRITEME
	 * @return WRITEME
	 */
	private String getFlashHTML (final String flashVars,
			final String flashLoc) {
		return "<object id=\"avatarViewerTB\" \n"
				+ "codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0\"\n"
				+ "classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" width=\"215px\" height=\"250px\">\n"
				+ "<param name=\"movie\" value=\""
				+ flashLoc
				+ "\" />\n"
				+ "	<param name=\"flashvars\" value=\""
				+ flashVars
				+ "\" />\n"
				+ "<param name=\"quality\" value=\"high\" />\n"
				+ "<param name=\"wmode\" value=\"transparent\" />\n"
				+ "<param name=\"allowScriptAccess\" value=\"sameDomain\" />\n"
				+ "</object>";
	}
}
