/*****************************************************
 * index.js
 * 03.29.2003
 * Eddie Lim <elim@eecs.harvard.edu>
 * www.netsymbiosis.com
 *****************************************************/

// dialog objects.
var _activeDialog = null;
var _aboutDialogEl = null;
var _deleteDialogEl = null;
var _renameDialogEl = null;
var _newDialogEl = null;
var _preferencesDialogEl = null;

var _mainMenu = null;
var _frameMenu = null;

// internal panes.
var _debugPane = null;
var _exceptionPane = null;

// body element.
var _bodyEl = null;

function init()
{
	initColorSchemes();
	initMenus();
	initInternalMemos();

	initDialogs();
	initMemos();	
	_bodyEl = document.getElementById("body");
}

window.onload = init;
self.onerror = errorHandler;

function initInternalMemos()
{
	// customize the debug pane.
	_debugPane = new Memo(Memo.INTERNAL_MEMO, ".:DEBUG PANE:.", "c10", 100, 600, 280, 350, false, true);
	_debugPane.root.titleTextEl.style.fontWeight = "bold";
	_debugPane.root.simulatedTitleTextEl.style.fontWeight = "bold";

	// customize the exception pane.
	_exceptionPane = new Memo(Memo.INTERNAL_MEMO, ".:EXCEPTION WEB:.", "c1", 100, 300, 540, 300, false, true);
	_exceptionPane.root.titleTextEl.style.fontWeight = "bold";
	_exceptionPane.root.simulatedTitleTextEl.style.fontWeight = "bold";
	_exceptionPane.root.textAreaEl.style.font = "9px verdana, sans-serif";
	_exceptionPane.updateTitle(true);
	
	_exceptionPane.appendText("errors in the application will appear in this window and be sent to our support team for analysis\n-------------------------------------\n\n");
}

function initMenus()
{
	var menuItem;
	_mainMenu = new Menu("menuMain", null, 200, "");

	_mainMenu.addFiller(4);

	menuItem = new MenuItem("menuItemNew", "New", Menu.SUBMENU_MENU_ITEM);
	_mainMenu.addMenuItem(menuItem);
	menuItem.addIcon("images/arrow-right.gif", MenuItem.ALIGN_RIGHT, 7, 7, "images/arrow-right-readonly.gif");
	menuItem = new MenuItem("menuItemMemos", "Memos", Menu.SUBMENU_MENU_ITEM);
	_mainMenu.addMenuItem(menuItem);
	menuItem.addIcon("images/arrow-right.gif", MenuItem.ALIGN_RIGHT, 7, 7, "images/arrow-right-readonly.gif");	
	menuItem = new MenuItem("menuItemFrames", "In-house", Menu.SUBMENU_MENU_ITEM);
	_mainMenu.addMenuItem(menuItem);
	menuItem.addIcon("images/arrow-right.gif", MenuItem.ALIGN_RIGHT, 7, 7, "images/arrow-right-readonly.gif");	
	_mainMenu.addSeparator();

	menuItem = new MenuItem("menuItemTools", "Tools", Menu.SUBMENU_MENU_ITEM);
	_mainMenu.addMenuItem(menuItem);
	menuItem.addIcon("images/arrow-right.gif", MenuItem.ALIGN_RIGHT, 7, 7, "images/arrow-right-readonly.gif");	
	_mainMenu.addSeparator();
	
	menuItem = new MenuItem("menuItemRename", "Rename", Menu.TEXT_MENU_ITEM);
	menuItem.addOnClickHandler("RenameHandler");
	menuItem.setListener(MenuItem.READ_ONLY);
	_mainMenu.addMenuItem(menuItem);
	menuItem = new MenuItem("menuItemHide", "Hide", Menu.TEXT_MENU_ITEM);
	menuItem.addOnClickHandler("HideHandler");
	_mainMenu.addMenuItem(menuItem);
	menuItem = new MenuItem("menuItemDelete", "Delete", Menu.TEXT_MENU_ITEM);
	menuItem.addOnClickHandler("DeleteHandler");
	menuItem.setListener(MenuItem.READ_ONLY);
	_mainMenu.addMenuItem(menuItem);
	_mainMenu.addSeparator();

	menuItem = new MenuItem("menuItemPreferences", "Preferences", Menu.TEXT_MENU_ITEM);
	menuItem.addOnClickHandler("PreferencesHandler");
	_mainMenu.addMenuItem(menuItem);
	_mainMenu.addSeparator();
	menuItem = new MenuItem("menuItemAbout", "About Mindlist...", Menu.TEXT_MENU_ITEM);
	menuItem.addOnClickHandler("AboutHandler");
	_mainMenu.addMenuItem(menuItem);
	_mainMenu.addFiller(4);
	
	var _newMenu = new Menu("menuNew", document.getElementById("menuItemNew"), 200, "");
	_newMenu.addFiller(4);

	menuItem = new MenuItem("menuItemNewSame", "Same color", Menu.TEXT_MENU_ITEM);
	menuItem.addOnClickHandler("NewHandler", [Memo.SAME_COLOR]);
	_newMenu.addMenuItem(menuItem);
	menuItem = new MenuItem("menuItemNewChance", "Leave it to chance", Menu.TEXT_MENU_ITEM);
	menuItem.addOnClickHandler("NewHandler", [Memo.CHANCE_COLOR]);
	_newMenu.addMenuItem(menuItem);
	_newMenu.addFiller(4);	

	var _toolMenu = new Menu("menuTools", document.getElementById("menuItemTools"), 200, "");
	_toolMenu.addFiller(4);
	menuItem = new MenuItem("menuItemCascade", "Cascadia", Menu.TEXT_MENU_ITEM);
	menuItem.addOnClickHandler("CascadeHandler");
	_toolMenu.addMenuItem(menuItem);
	_toolMenu.addFiller(4);
	
	_memoMenu = new Menu("menuMemos", document.getElementById("menuItemMemos"), 150, "");
	_memoMenu.addFiller(4);
	_memoMenu.addFiller(4);	

	_frameMenu = new Menu("frameMemos", document.getElementById("menuItemFrames"), 150, "");
	_frameMenu.addFiller(4);
	_frameMenu.addFiller(4);	
}

function initDialogs()
{
	_aboutDialogEl = Dialog.newInstance("MindList Workshop<br />Version 0.3 Alpha [Build: 2003.0503.044306]<br />Certified Platinum by: Internet Explorer 6.0.2+, Mozilla 1.2.1+<br /><br /><br />Copyright 2001-2003 NetSymbiosis, Inc. All rights reserved.<br />", 320, 110);
	_aboutDialogEl.addButton(Button.newInstance("OK", "CancelHandler", null, null, 10, 10));
	_aboutDialogEl.addIcon(Icon.newInstance("images/close_up.gif", "images/close_over.gif", "CancelHandler", 4, null, 4, null, 11, 11));

	_deleteDialogEl = Dialog.newInstance("", 320, 67);
	_deleteDialogEl.addButton(Button.newInstance("Yes", "DeleteHandler", null, null, 10, 74));
	_deleteDialogEl.addButton(Button.newInstance("No", "CancelHandler", null, null, 10, 10));
	_deleteDialogEl.addIcon(Icon.newInstance("images/close_up.gif", "images/close_over.gif", "CancelHandler", 4, null, 4, null, 11, 11));

	_renameDialogEl = Dialog.newInstance("Rename title", 320, 67);
	_renameDialogEl.textEl.style.fontWeight = "bold";
	_renameDialogEl.addButton(Button.newInstance("OK", "RenameHandler", null, null, 10, 74));
	_renameDialogEl.addButton(Button.newInstance("Cancel", "CancelHandler", null, null, 10, 10));
	_renameDialogEl.addIcon(Icon.newInstance("images/close_up.gif", "images/close_over.gif", "CancelHandler", 4, null, 4, null, 11, 11));
	_renameDialogEl.addInput(Input.newInstance(34, 18, null, null, 290, null));
		
	var textEl = _renameDialogEl.textEl;
	var offsetLeft = parseInt(textEl.style.left) + parseInt(textEl.offsetWidth) + 6;
	var div = Div.newInstance(parseInt(textEl.style.top) + Math.floor(parseInt(textEl.offsetHeight) / 2), offsetLeft, null, null, parseInt(_renameDialogEl.canvasEl.style.width) - offsetLeft, 1, "#808080"); 
	_renameDialogEl.addElement(div);

	// could probably consolidate this into one with the rename dialog...
	_newDialogEl = Dialog.newInstance("Title", 320, 67);
	_newDialogEl.textEl.style.fontWeight = "bold";
	_newDialogEl.addButton(Button.newInstance("OK", "NewHandler", null, null, 10, 74));
	_newDialogEl.addButton(Button.newInstance("Cancel", "CancelHandler", null, null, 10, 10));
	_newDialogEl.addIcon(Icon.newInstance("images/close_up.gif", "images/close_over.gif", "CancelHandler", 4, null, 4, null, 11, 11));
	_newDialogEl.addInput(Input.newInstance(34, 18, null, null, 290, null));
		
	textEl = _newDialogEl.textEl;
	offsetLeft = parseInt(textEl.style.left) + parseInt(textEl.offsetWidth) + 6;
	div = Div.newInstance(parseInt(textEl.style.top) + Math.floor(parseInt(textEl.offsetHeight) / 2), offsetLeft, null, null, parseInt(_newDialogEl.canvasEl.style.width) - offsetLeft, 1, "#808080"); 
	_newDialogEl.addElement(div);


	initPreferencesDialog();
}

// this is not pretty.
function initPreferencesDialog()
{
	_preferencesDialogEl = Dialog.newInstance("Title font", 320, 205);
	_preferencesDialogEl.textEl.style.fontWeight = "bold";
	_preferencesDialogEl.addButton(Button.newInstance("OK", "PreferencesHandler", null, null, 10, 74));
	_preferencesDialogEl.addButton(Button.newInstance("Cancel", "CancelHandler", null, null, 10, 10));
	_preferencesDialogEl.addIcon(Icon.newInstance("images/close_up.gif", "images/close_over.gif", "CancelHandler", 4, null, 4, null, 11, 11));
		
	textEl = _preferencesDialogEl.textEl;
	offsetLeft = parseInt(textEl.style.left) + parseInt(textEl.offsetWidth) + 6;
	div = Div.newInstance(parseInt(textEl.style.top) + Math.floor(parseInt(textEl.offsetHeight) / 2), offsetLeft, null, null, parseInt(_preferencesDialogEl.canvasEl.style.width) - offsetLeft, 1, "#808080"); 
	_preferencesDialogEl.addElement(div);

	textEl = Text.newInstance("Font:", parseInt(textEl.style.top) + parseInt(textEl.offsetHeight) + 6, parseInt(textEl.style.left) + 10, null, null, "normal");
	_preferencesDialogEl.addElement(textEl);
	
	var selectEl = document.createElement("select");
	_preferencesDialogEl.selectTitleFont = selectEl;
	selectEl.style.position = "absolute";
	selectEl.style.top = textEl.style.top;
	selectEl.style.left = (parseInt(textEl.style.left) + parseInt(textEl.offsetWidth) + 6) + "px";
	selectEl.style.width = "150px";
	selectEl.style.fontSize = "11px";
	selectEl.style.fontStyle ="normal";
	selectEl.style.fontFamily = "tahoma, arial, verdana, sans-serif";
	selectEl.size = "1";

	var optionEl;
	var fonts = new Array("Trebuchet MS", "Verdana", "Tahoma", "Arial", "Georgia");
	for(var i = 0; i < fonts.length; i++)
	{
		optionEl = document.createElement("option");
		optionEl.label = fonts[i];
		optionEl.text = " " + fonts[i];
		optionEl.value = fonts[i];		
		if(Browser.isMozilla)
		{			
			selectEl.add(optionEl, null);
		}
		else
		{
			selectEl.add(optionEl);
		}

	}
	
	_preferencesDialogEl.addElement(selectEl);

	// now retrofit the label.
	textEl.style.top = (parseInt(selectEl.style.top) + Math.floor((selectEl.offsetHeight - textEl.offsetHeight) / 2)) + "px";

	textEl = Text.newInstance("Size:", parseInt(selectEl.style.top) + parseInt(selectEl.offsetHeight) + 4, parseInt(textEl.style.left), null, null, "normal");
	_preferencesDialogEl.addElement(textEl);
	
	selectOffsetLeft = selectEl.style.left;
	selectEl = document.createElement("select");
	_preferencesDialogEl.selectTitleSize = selectEl;
	selectEl.style.position = "absolute";
	selectEl.style.top = textEl.style.top;
	selectEl.style.left = selectOffsetLeft;
	selectEl.style.width = "58px";
	selectEl.style.fontSize = "11px";
	selectEl.style.fontStyle ="normal";
	selectEl.style.fontFamily = "tahoma, arial, verdana, sans-serif";
	selectEl.size = "1";

	var sizes = new Array("9px", "10px", "11px", "12px");
	for(var i = 0; i < sizes.length; i++)
	{
		optionEl = document.createElement("option");
		optionEl.label = sizes[i];
		optionEl.text = " " + sizes[i];
		optionEl.value = sizes[i];
		if(Browser.isMozilla)
		{			
			selectEl.add(optionEl, null);
		}
		else
		{
			selectEl.add(optionEl);
		}
	}
	
	_preferencesDialogEl.addElement(selectEl);

	// now retrofit the label.
	textEl.style.top = (parseInt(selectEl.style.top) + Math.floor((selectEl.offsetHeight - textEl.offsetHeight) / 2)) + "px";

	/* NEW SECTION*/
	textEl = Text.newInstance("Textarea font", parseInt(selectEl.style.top) + selectEl.offsetHeight + 30, parseInt(_preferencesDialogEl.textEl.style.left), null, null, "bold");
	_preferencesDialogEl.addElement(textEl);
	offsetLeft = parseInt(textEl.style.left) + parseInt(textEl.offsetWidth) + 6;
	div = Div.newInstance(parseInt(textEl.style.top) + Math.floor(parseInt(textEl.offsetHeight) / 2), offsetLeft, null, null, parseInt(_preferencesDialogEl.canvasEl.style.width) - offsetLeft, 1, "#808080"); 
	_preferencesDialogEl.addElement(div);

	textEl = Text.newInstance("Font:", parseInt(textEl.style.top) + parseInt(textEl.offsetHeight) + 6, parseInt(textEl.style.left) + 10, null, null, "normal");
	_preferencesDialogEl.addElement(textEl);
	
	var selectEl = document.createElement("select");
	_preferencesDialogEl.selectTextAreaFont = selectEl;
	selectEl.style.position = "absolute";
	selectEl.style.top = textEl.style.top;
	selectEl.style.left = (parseInt(textEl.style.left) + parseInt(textEl.offsetWidth) + 6) + "px";
	selectEl.style.width = "150px";
	selectEl.style.fontSize = "11px";
	selectEl.style.fontStyle ="normal";
	selectEl.style.fontFamily = "tahoma, arial, verdana, sans-serif";
	selectEl.size = "1";

	var optionEl;
	var fonts = new Array("Trebuchet MS", "Verdana", "Tahoma", "Arial", "Georgia");
	for(var i = 0; i < fonts.length; i++)
	{
		optionEl = document.createElement("option");
		optionEl.label = fonts[i];
		optionEl.text = " " + fonts[i];
		optionEl.value = fonts[i];		
		if(Browser.isMozilla)
		{			
			selectEl.add(optionEl, null);
		}
		else
		{
			selectEl.add(optionEl);
		}

	}
	
	_preferencesDialogEl.addElement(selectEl);

	// now retrofit the label.
	textEl.style.top = (parseInt(selectEl.style.top) + Math.floor((selectEl.offsetHeight - textEl.offsetHeight) / 2)) + "px";

	textEl = Text.newInstance("Size:", parseInt(selectEl.style.top) + parseInt(selectEl.offsetHeight) + 4, parseInt(textEl.style.left), null, null, "normal");
	_preferencesDialogEl.addElement(textEl);
	
	selectOffsetLeft = selectEl.style.left;
	selectEl = document.createElement("select");
	_preferencesDialogEl.selectTextAreaSize = selectEl;
	selectEl.style.position = "absolute";
	selectEl.style.top = textEl.style.top;
	selectEl.style.left = selectOffsetLeft;
	selectEl.style.width = "58px";
	selectEl.style.fontSize = "11px";
	selectEl.style.fontStyle ="normal";
	selectEl.style.fontFamily = "tahoma, arial, verdana, sans-serif";
	selectEl.size = "1";

	var sizes = new Array("9px", "10px", "11px", "12px");
	for(var i = 0; i < sizes.length; i++)
	{
		optionEl = document.createElement("option");
		optionEl.label = sizes[i];
		optionEl.text = " " + sizes[i];
		optionEl.value = sizes[i];
		if(Browser.isMozilla)
		{			
			selectEl.add(optionEl, null);
		}
		else
		{
			selectEl.add(optionEl);
		}
	}
	
	_preferencesDialogEl.addElement(selectEl);

	// now retrofit the label.
	textEl.style.top = (parseInt(selectEl.style.top) + Math.floor((selectEl.offsetHeight - textEl.offsetHeight) / 2)) + "px";


	/* NEW SECTION*/
/*
	textEl = Text.newInstance("Menu font", parseInt(selectEl.style.top) + selectEl.offsetHeight + 30, parseInt(_preferencesDialogEl.textEl.style.left), null, null, "bold");
	_preferencesDialogEl.addElement(textEl);
	offsetLeft = parseInt(textEl.style.left) + parseInt(textEl.offsetWidth) + 6;
	div = Div.newInstance(parseInt(textEl.style.top) + Math.floor(parseInt(textEl.offsetHeight) / 2), offsetLeft, null, null, parseInt(_preferencesDialogEl.canvasEl.style.width) - offsetLeft, 1, "#808080"); 
	_preferencesDialogEl.addElement(div);

	textEl = Text.newInstance("Font:", parseInt(textEl.style.top) + parseInt(textEl.offsetHeight) + 6, parseInt(textEl.style.left) + 10, null, null, "normal");
	_preferencesDialogEl.addElement(textEl);
	
	var selectEl = document.createElement("select");
	_preferencesDialogEl.selectMenuFont = selectEl;
	selectEl.style.position = "absolute";
	selectEl.style.top = textEl.style.top;
	selectEl.style.left = (parseInt(textEl.style.left) + parseInt(textEl.offsetWidth) + 6) + "px";
	selectEl.style.width = "150px";
	selectEl.style.fontSize = "11px";
	selectEl.style.fontStyle ="normal";
	selectEl.style.fontFamily = "tahoma, arial, verdana, sans-serif";
	selectEl.size = "1";

	var optionEl;
	var fonts = new Array("Trebuchet MS", "Verdana", "Tahoma", "Arial", "Georgia");
	for(var i = 0; i < fonts.length; i++)
	{
		optionEl = document.createElement("option");
		optionEl.label = fonts[i];
		optionEl.text = " " + fonts[i];
		optionEl.value = fonts[i];		
		if(Browser.isMozilla)
		{			
			selectEl.add(optionEl, null);
		}
		else
		{
			selectEl.add(optionEl);
		}

	}
	
	_preferencesDialogEl.addElement(selectEl);

	// now retrofit the label.
	textEl.style.top = (parseInt(selectEl.style.top) + Math.floor((selectEl.offsetHeight - textEl.offsetHeight) / 2)) + "px";

	textEl = Text.newInstance("Size:", parseInt(selectEl.style.top) + parseInt(selectEl.offsetHeight) + 4, parseInt(textEl.style.left), null, null, "normal");
	_preferencesDialogEl.addElement(textEl);
	
	selectOffsetLeft = selectEl.style.left;
	selectEl = document.createElement("select");
	_preferencesDialogEl.selectMenuSize = selectEl;
	selectEl.style.position = "absolute";
	selectEl.style.top = textEl.style.top;
	selectEl.style.left = selectOffsetLeft;
	selectEl.style.width = "58px";
	selectEl.style.fontSize = "11px";
	selectEl.style.fontStyle ="normal";
	selectEl.style.fontFamily = "tahoma, arial, verdana, sans-serif";
	selectEl.size = "1";

	var sizes = new Array("9px", "10px", "11px", "12px");
	for(var i = 0; i < sizes.length; i++)
	{
		optionEl = document.createElement("option");
		optionEl.label = sizes[i];
		optionEl.text = " " + sizes[i];
		optionEl.value = sizes[i];
		if(Browser.isMozilla)
		{			
			selectEl.add(optionEl, null);
		}
		else
		{
			selectEl.add(optionEl);
		}
	}
	
	_preferencesDialogEl.addElement(selectEl);

	// now retrofit the label.
	textEl.style.top = (parseInt(selectEl.style.top) + Math.floor((selectEl.offsetHeight - textEl.offsetHeight) / 2)) + "px";
*/

}

function initColorSchemes()
{	
	ColorScheme.init("c1", "#D2D2D2", "#E7E7E7", "#999999"); // gray.
	ColorScheme.init("c2", "#EBA46E", "#F3C490", "#C4825C"); // burnt orange.
	ColorScheme.init("c3", "#EFE5BB", "#F8F3E1", "#BCAA5F"); // camel.
	ColorScheme.init("c4", "#CFCFE4", "#EDEDF5", "#7C7CA5"); // blue-ish.

	ColorScheme.init("c5", "#C1DBCD", "#DDEBE4", "#749E87"); // light green.
	ColorScheme.init("c6", "#B0EBB9", "#D4F4D9", "#5AB768"); // yellow green.
	ColorScheme.init("c7", "#B9C5AA", "#CCD5C2", "#7C896A"); // forest green.
	ColorScheme.init("c8", "#C4D2CF", "#DDE5E3", "#7C928D"); // grayish green.

	ColorScheme.init("c9", "#ECDEE9", "#FEFEFE", "#AB86A3"); // lavender.
	ColorScheme.init("c10", "#EEC1D1", "#FCF7F9", "#B4778C"); // pink.
	ColorScheme.init("c11", "#EBB9B9", "#F5DDDD", "#B66161"); // pink.
	ColorScheme.init("c12", "#E6C7C7", "#F4E7E7", "#AB7272"); // pink. take two.
	ColorScheme.init("c13", "#FF7DAA", "#FFABC8", "#CC4B78"); // dark pink.
	ColorScheme.init("c14", "#EBB7D2", "#EFCBDD", "#B05985"); // purple.
	ColorScheme.init("c15", "#EEC1DF", "#F8E6F2", "#B9659D"); // purply-blue.
}

function bubbleClick(e)
{
//debug("body: yoyo. in bubble. bubble me up.");

	// ignore clicks when a dialog is open, and when the menu was clicked.
	/*
	if(_activeDialog)
	{
		if(_mainMenu.isOpen())
		{
			debug("body: hiding menu from dialog......");
			_mainMenu.hide();
		}
	}
	
	else*/ if(Memo.menuIconClicked)
	{
//		debug("body: .......ignoring click...");
		Memo.menuIconClicked = false;
	}
	else if(_mainMenu.isOpen())
	{
//		debug("body: hiding from bubble click...");
		_mainMenu.hide();
	}
}
