// JavaScript Document

function dialogSetup()
{
	DialogManager = new DialogManagerObject();
	
	registerListener('keydown', closeTopDialog);
}

function closeTopDialog(event)
{
	var keycode = getKeyCode(event);
	
	if(keycode == 27 && DialogManager.closeTopDialog()) //Esc
	{
		stopEventPropagation(event);
	}
}

function DialogManagerObject()
{
	var me = this;
	
	this.dialogBase = document.createElement('div');
	this.dialogBase.id = 'dialog_base';
	document.body.appendChild(this.dialogBase);
	
	var dialogs = new Array();
	dialogs.get = function(id)
	{
		for(var i = 0; i < this.length; ++i)
		{
			if(this[i].id == id)
			{
				return this[i];
			}
		}
		return null;
	};
	
	this.getDialog = function(id)
	{
		return dialogs.get(id);
	};
	this.dialogCompare = function(d1, d2) //top dialog first
	{
		return d2.dialog.style.zIndex - d1.dialog.style.zIndex;
	};
	this.registerDialog = function(dialogObject)
	{
		me.dialogBase.appendChild(dialogObject.dialog);
		dialogs.push(dialogObject);
	};
	this.unregisterDialog = function(dialogObject)
	{
		me.dialogBase.removeChild(dialogObject.dialog);
		dialogs.remove(dialogObject);
	};
	this.destroyDialog = function(dialogObject)
	{
		me.unregisterDialog(dialogObject);
		delete dialogObject;
	};
	this.closeTopDialog = function()
	{
		if(dialogs.length > 0)
		{
			dialogs.sort(me.dialogCompare);
			dialogs[0].close();
			return true;
		}
		return false;
	};
	this.closeDialog = function(dialogObject, delay)
	{
		var closeTimeoutID = setTimeout('DialogManager.getDialog(\''+dialogObject.id+'\').close()', delay ? delay : 0);
		dialogObject.setVariable('closeTimeoutID', closeTimeoutID);
	};
}

function DialogObject(id, title, dBody, buttons, modal, width, top)
{
	var me = this;
	
	var oldDialog = DialogManager.getDialog(id);
	if(oldDialog)
	{
		DialogManager.destroyDialog(oldDialog);
	}
	
	// Main dialog
	this.dialog = document.createElement('div');
	this.modal = modal ? true : false;
	this.id = id;
	this.dialog.id = id;
	this.dialog.className = 'dialog_wrapper';
	this.dialog.style.width = width ? width  : '300px';
	this.dialog.style.top = top ? top : '200px';
	this.dialog.style.visibility = 'hidden';
	this.visible = false;
	this.setFixedPosition = function(fixed)
	{
		me.dialog.style.position = fixed ? 'fixed' : 'absolute';
	};
	
	var onmousedown = function(event)
	{
		if(me.dialog.style.zIndex < DragManager.zIndex)
		{
			me.dialog.style.zIndex = ++DragManager.zIndex;
		}
	};
	registerListener('mousedown', onmousedown, this.dialog);
	this.show = function()
	{
		if(me.modal)
		{
			me.modalScreen.style.zIndex = ++DragManager.zIndex;
			me.modalScreen.style.visibility = 'visible';
		}
		me.center();
		me.dialog.style.zIndex = ++DragManager.zIndex;
		me.dialog.style.visibility = 'visible';
		
		this.visible = true;
	};
	this.hide = function()
	{
		if(me.modal)
		{
			me.modalScreen.style.visibility = 'hidden';
		}
		me.dialog.style.visibility = 'hidden';
		
		this.visible = false;
	};
	this.close = function()
	{
		clearTimeout(me.getVariable('closeTimeoutID'));
		me.onclose();
		if(me.modal)
		{
			me.closeModalScreen();
		}
		DialogManager.destroyDialog(me);
	};
	this.collapsed = false;
	this.collapse = function()
	{
		me.hideBody();
		me.hideButtonZone();
		me.collapsed = true;
	};
	this.expand = function()
	{
		me.showBody();
		me.showButtonZone();
		me.collapsed = false;
	};
	this.collapseToggle = function()
	{
		if(me.collapsed)
		{
			me.expand();
		}
		else
		{
			me.collapse();
		}
	};
	this.center = function()
	{
		var width = parseInt(me.dialog.style.width, 10);
		//var height = parseInt(me.dialog.style.height, 10);
		var windowWidth = getWindowWidth();
		//var windowHeight = getWindowHeight();
		
		me.dialog.style.left = ((windowWidth/2) - (width/2))+'px';
		//me.dialog.style.top = ((windowHeight/2) - (height/2))+'px';
	};
	
	// Close button
	var closeButton = document.createElement('img');
	closeButton.src = 'images/resources/dialog_close.png';
	closeButton.style.cursor = 'pointer';
	closeButton.title = 'Close';
	function closeButtonClick(event)
	{
		me.close();
		stopEventPropagation(event);
	}
	registerListener('click', closeButtonClick, closeButton);
	closeButton.style.position = 'absolute';
	//resizeImage(closeButton, 10);
	closeButton.style.top = '0px';
	closeButton.style.marginTop = '-4px';
	closeButton.style.marginLeft = '-4px';
	
	this.onclose = function() {}
	
	// Collapse button
	/*
	var collapseButton = document.createElement('img');
	collapseButton.src = 'images/resources/dialog_collapse.png';
	collapseButton.style.cursor = 'pointer';
	var collapseClick = function(event)
	{
		me.collapseToggle();
		stopEventPropagation(event);
	};
	registerListener('click', collapseClick, collapseButton);
	collapseButton.style.position = 'absolute';		
	resizeImage(collapseButton, 10);
	collapseButton.style.top = '0px';
	collapseButton.style.marginLeft = '-2px';
	*/
	
	this.ondrag = function(event)
	{
		dragStart(event, me.id);
	};
	
	// Top border	
	var topLeft = document.createElement('td');
	topLeft.className = 'dialog_top_left';
	topLeft.appendChild(closeButton);
	var topMiddle = document.createElement('td');
	topMiddle.className = 'dialog_border';
	//topMiddle.appendChild(collapseButton);
	var topRight = document.createElement('td');
	topRight.className = 'dialog_top_right';
	
	this.topBorder = document.createElement('tr');
	this.topBorder.appendChild(topLeft);
	this.topBorder.appendChild(topMiddle);
	this.topBorder.appendChild(topRight);
	
	// left border
	this.leftBorder = document.createElement('td');
	this.leftBorder.className = 'dialog_border';
	
	// title
	this.titleBar = document.createElement('td');
	this.titleBar.className = 'dialog_title';
	if(title)
	{
		this.titleBar.appendChild(document.createTextNode(title));
	}
	this.clearTitle = function()
	{
		removeChildren(me.titleBar);
	};
	this.hideTitle = function()
	{
		me.titleBar.style.display = 'none';
	};
	this.showTitle = function()
	{
		me.titleBar.style.display = 'table-cell';
	};
	this.setTitle = function(title)
	{
		removeChildren(me.titleBar);
		me.titleBar.appendChild(document.createTextNode(title));
		me.showTitle();
	};
	
	// body
	this.dialogBody = document.createElement('td');
	this.dialogBody.className = 'dialog_body';
	this.statusDiv = document.createElement('div');
	this.clearStatus = function()
	{
		me.statusDiv.className = '';
		removeChildren(me.statusDiv);
	};
	this.setStatus = function(text)
	{
		removeChildren(me.statusDiv);
		me.statusDiv.className = 'calign';
		me.statusDiv.appendChild(document.createTextNode(text));
	};
	this.setNotificationStatus = function(text)
	{
		removeChildren(me.statusDiv);
		me.statusDiv.className = 'notification';
		me.statusDiv.appendChild(document.createTextNode(text));
	};
	this.setErrorStatus = function(text)
	{
		removeChildren(me.statusDiv);
		me.statusDiv.className = 'error';
		me.statusDiv.appendChild(document.createTextNode(text));
	};
	this.setInfoStatus = function(text)
	{
		removeChildren(me.statusDiv);
		me.statusDiv.className = 'info';
		me.statusDiv.appendChild(document.createTextNode(text));
	};
	this.dialogBody.appendChild(this.statusDiv);
	this.dialogBodyContent = document.createElement('div');
	this.appendBodyContent = function(element)
	{
		me.dialogBodyContent.appendChild(element);
	};
	this.dialogBody.appendChild(this.dialogBodyContent);
	if(dBody)
	{
		this.dialogBodyContent.appendChild(dBody);
	}
	this.clearBodyContent = function()
	{
		removeChildren(me.dialogBodyContent);
	};
	this.hideBodyContent = function()
	{
		me.dialogBodyContent.style.display = 'none';
	};
	this.showBodyContent = function()
	{
		me.dialogBodyContent.style.display = 'block';
	};
	this.hideBody = function()
	{
		me.dialogBody.style.display = 'none';
	};
	this.showBody = function()
	{
		me.dialogBody.style.display = 'table-cell';
	};
	
	// button zone
	this.buttonZone = document.createElement('td');
	this.buttonZone.className = 'dialog_button_zone';
	this.clearButtonZone = function()
	{
		removeChildren(me.buttonZone);
	};
	this.hideButtonZone = function()
	{
		me.buttonZone.style.display = 'none';
	};
	this.showButtonZone = function()
	{
		me.buttonZone.style.display = 'table-cell';
	};
	this.addButton = function(button)
	{
		me.buttonZone.appendChild(button);
		me.showButtonZone();
	};
	if(buttons)
	{
		for(var i = 0; i < buttons.length; ++i)
		{
			this.buttonZone.appendChild(buttons[i]);
		}
	}
	
	// content table (title, body, button zone)
	var contentTable = document.createElement('table');
	var contentTbody = document.createElement('tbody');
	contentTable.appendChild(contentTbody);
	var contentTopRow = document.createElement('tr');
	contentTopRow.appendChild(this.titleBar);
	contentTbody.appendChild(contentTopRow);
	var contentMiddleRow = document.createElement('tr');
	contentMiddleRow.appendChild(this.dialogBody);
	contentTbody.appendChild(contentMiddleRow);
	var contentBottomRow = document.createElement('tr');
	contentBottomRow.appendChild(this.buttonZone);
	contentTbody.appendChild(contentBottomRow);
	
	// right border
	this.rightBorder = document.createElement('td');
	this.rightBorder.className = 'dialog_border';
	
	// content
	var content = document.createElement('td');
	content.className = 'dialog_content';
	content.appendChild(contentTable);

	// Middle row
	var middleRow = document.createElement('tr');
	middleRow.appendChild(this.leftBorder);
	middleRow.appendChild(content);
	middleRow.appendChild(this.rightBorder);
	
	// Bottom border
	this.bottomBorder = document.createElement('tr');
	var bottomLeft = document.createElement('td');
	var bottomMiddle = document.createElement('td');
	var bottomRight = document.createElement('td');
	bottomLeft.className = 'dialog_bottom_left';
	bottomMiddle.className = 'dialog_border';
	bottomRight.className = 'dialog_bottom_right';
	this.bottomBorder.appendChild(bottomLeft);
	this.bottomBorder.appendChild(bottomMiddle);
	this.bottomBorder.appendChild(bottomRight);
	
	var table = document.createElement('table');
	var tbody = document.createElement('tbody');
	tbody.appendChild(this.topBorder);
	tbody.appendChild(middleRow);
	tbody.appendChild(this.bottomBorder);
	table.appendChild(tbody);
	
	this.dialog.appendChild(table);
	
	
	if(!this.titleBar.firstChild)
	{
		this.hideTitle();
	}
	if(!this.buttonZone.firstChild)
	{
		this.hideButtonZone();
	}
	
	this.onresize = function(event)
	{
		me.center();
	};
	this.makeModal = function(modal)
	{
		if(modal)
		{
			registerListener('resize', me.onresize, window);
			
			me.modalScreen = document.createElement('div');
			me.modalScreen.className = 'modal_screen';
			me.modalScreen.id = id+'_modal_screen';
			me.modalScreen.style.visibility = 'hidden';
			var onclick = function(event)
			{
				me.close();
			};
			//registerListener('click', onclick, me.modalScreen);
			me.closeModalScreen = function()
			{
				DialogManager.dialogBase.removeChild(me.modalScreen);
			};
			DialogManager.dialogBase.appendChild(me.modalScreen);
			
			me.topBorder.style.cursor = 'default';
			unregisterListener('mousedown', me.ondrag, me.topBorder);
			me.leftBorder.style.cursor = 'default';
			unregisterListener('mousedown', me.ondrag, me.leftBorder);
			me.rightBorder.style.cursor = 'default';
			unregisterListener('mousedown', me.ondrag, me.rightBorder);
			me.bottomBorder.style.cursor = 'default';
			unregisterListener('mousedown', me.ondrag, me.bottomBorder);
			
			if(me.visible)
			{
				me.modalScreen.style.zIndex = ++DragManager.zIndex;
				me.modalScreen.style.visibility = 'visible';
				me.center();
				me.dialog.style.zIndex = ++DragManager.zIndex;
			}
		}
		else
		{
			unregisterListener('resize', me.onresize, window);
			
			if(me.modalScreen)
			{
				me.closeModalScreen();
			}
			
			me.topBorder.style.cursor = 'move';
			registerListener('mousedown', me.ondrag, me.topBorder);
			me.leftBorder.style.cursor = 'move';
			registerListener('mousedown', me.ondrag, me.leftBorder);
			me.rightBorder.style.cursor = 'move';
			registerListener('mousedown', me.ondrag, me.rightBorder);
			me.bottomBorder.style.cursor = 'move';
			registerListener('mousedown', me.ondrag, me.bottomBorder);
		}
		
		me.modal = modal;
	};
	
	this.makeModal(modal);
	
	DialogManager.registerDialog(this);
}

function showErrorDialog(message)
{
	var id = getCurrentTimestamp();	
	var dialog = new DialogObject(id, '', null, null, true);
	dialog.setFixedPosition(true);
	dialog.setErrorStatus(message);
	dialog.show();
}

function showConfirmDialog(message, callback)
{
	var noButton = document.createElement('input');
	noButton.type = 'button';
	noButton.value = 'No';
	noButton.style.width = '50px';
	noButton.onclick = function()
	{
		dialog.close();
	};
	
	var yesButton = document.createElement('input');
	yesButton.type = 'button';
	yesButton.value = 'Yes';
	yesButton.style.width = '50px';
	yesButton.onclick = function()
	{
		callback();
		dialog.close();
	}
	
	var id = getCurrentTimestamp();	
	var dialog = new DialogObject(id, 'Confirm', null, [noButton, yesButton], true);
	dialog.setFixedPosition(true);
	dialog.setStatus(message);
	dialog.show();
}

// Specific Dialog Functions

function showLoginDialog(url)
{
	var login = function()
	{
		dialog.setStatus('Please wait...');
		
		if(usernameField.value == usernameField.defaultValue)
		{
			dialog.setErrorStatus('Please enter your username');
			usernameField.focus();
			return;
		}
		
		if(passwordField.value == passwordField.defaultValue)
		{
			dialog.setErrorStatus('Please enter your password');
			passwordField.focus();
			return;
		}
		
		var username = usernameField.value;
		var password = SHA256(passwordField.value);
		passwordField.value = '';
		
		submitButton.disabled = true;
		
		var ajax = new AjaxObject();
		ajax.callback = function(ajax)
		{
			if(!ajax.success)
			{
				submitButton.disabled = false;
				dialog.setErrorStatus(ajax.message);
				return;
			}
			
			dialog.setInfoStatus(ajax.message);
			dialog.hideTitle();
			dialog.hideBodyContent();
			dialog.hideButtonZone();
			
			setTimeout('doNav(\''+url+'\')', 1*SECOND);
		};
		ajax.update('action=login&username='+username+'&password='+password);
	};

	// username field
	var usernameField = document.createElement('input');
	usernameField.type = 'text';
	usernameField.width = '50px';
	usernameField.onEnterFn = function()
	{
		if(this.value != '')
		{
			passwordField.focus();
		}
	};
	registerListener('keypress', onEnter, usernameField);
	setupInputField(usernameField);
	
	// password field
	var passwordField = document.createElement('input');
	passwordField.type = 'password';
	passwordField.width = '50px';
	passwordField.onEnterFn = function()
	{
		login();
	};
	registerListener('keypress', onEnter, passwordField);
	setupInputField(passwordField);
	
	// form
	var form = document.createElement('form');
	form.style.textAlign = 'center';
	form.appendChild(usernameField);
	form.appendChild(document.createElement('br'));
	form.appendChild(passwordField);
	
	// submit button
	var submitButton = document.createElement('input');
	submitButton.type = 'button';
	submitButton.value = 'Login';
	submitButton.onclick = function()
	{
		login();
	};
	
	var id = 'login_dialog';
	var title = 'Login';
	var width = '250px';
	var dialog = new DialogObject(id, title, form, [submitButton], true, width);
	dialog.setFixedPosition(true);
	
	dialog.show();
	usernameField.focus();
}

function showFeedbackDialog()
{
	var id = 'feedback_dialog';
	var title = 'Feedback';
	
	var div = document.createElement('div');
	div.className = 'calign';
	var textarea = document.createElement('textarea');
	textarea.style.width = '250px';
	textarea.maxRows = 10;
	setupTextarea(textarea);
	div.appendChild(textarea);
	
	var submitButton = document.createElement('input');
	submitButton.type = 'button';
	submitButton.value = 'Send';
	submitButton.onclick = function()
	{
		if(textarea.value == '')
		{
			dialog.setErrorStatus('Please enter your feedback before sending');
			return;
		}
		
		dialog.clearStatus();
		textarea.disabled = true;
		var ajax = new AjaxObject();
		ajax.callback = function(ajax)
		{
			var dialog = ajax.getVariable('dialog');
			
			if(!ajax.success)
			{
				dialog.setErrorStatus(ajax.message);
				textarea.disabled = false;
				return;
			}
			
			dialog.setInfoStatus(ajax.message);
			dialog.hideTitle();
			dialog.hideBodyContent();
			dialog.hideButtonZone();
			DialogManager.closeDialog(dialog, 3*SECOND);
		};
		ajax.setVariable('dialog', dialog);
		ajax.update('action=send_feedback&feedback='+textarea.value);
	};
	
	var dialog = new DialogObject(id, title, div, [submitButton], false);
	dialog.setFixedPosition(true);
	dialog.show();
	textarea.focus();
}

function showPassChangeDialog()
{
	var changePassword = function(dialog)
	{
		var oldPassword = SHA256(oldField.value);
		var newPassword = SHA256(newField.value);
		var confirmPassword = SHA256(confirmField.value);
		
		oldField.value = '';
		newField.value = '';
		confirmField.value = '';
		
		if(!oldPassword || !newPassword || !confirmPassword)
		{
			dialog.setErrorStatus('Please complete all fields');
			return;
		}
		else if(newPassword != confirmPassword)
		{
			dialog.setErrorStatus('Passwords do not match');
			return;
		}
		
		var ajax = new AjaxObject();
		ajax.callback = function(ajax)
		{
			if(!ajax.success)
			{
				dialog.setErrorStatus(ajax.message);
				oldField.focus();
				return;
			}
			
			dialog.setInfoStatus(ajax.message);
			dialog.hideTitle();
			dialog.hideBodyContent();
			dialog.hideButtonZone();
			
			DialogManager.closeDialog(dialog, 1*SECOND);
		};
		ajax.update('action=change_password&old='+oldPassword+'&new='+newPassword+'&confirm='+confirmPassword);
	};

	var dBody = document.createElement('div');
	dBody.className = 'calign';
	
	var form = document.createElement('form');
	dBody.appendChild(form);
	
	var table = document.createElement('table');
	form.appendChild(table);
	var tbody = document.createElement('tbody');
	table.appendChild(tbody);
	
	var tr1 = document.createElement('tr');
	tbody.appendChild(tr1);
	var tr1_td1 = document.createElement('td');
	tr1_td1.align = 'right';
	tr1_td1.style.verticalAlign = 'middle';
	tr1_td1.style.paddingRight = '5px';
	tr1.appendChild(tr1_td1);
	var oldLabel = document.createElement('strong');
	oldLabel.appendChild(document.createTextNode('Old Password:'));
	tr1_td1.appendChild(oldLabel);
	var tr1_td2 = document.createElement('td');
	tr1_td2.align = 'left';
	tr1.appendChild(tr1_td2);
	var oldField = document.createElement('input');
	oldField.onEnterFn = function()
	{
		if(oldField.value != '')
		{
			newField.focus();
		}
	};
	registerListener('keypress', onEnter, oldField);
	setupInputField(oldField);
	oldField.type = 'password';
	tr1_td2.appendChild(oldField);
	
	var tr2 = document.createElement('tr');
	tbody.appendChild(tr2);
	var tr2_td1 = document.createElement('td');
	tr2_td1.align = 'right';
	tr2_td1.style.verticalAlign = 'middle';
	tr2_td1.style.paddingRight = '5px';
	tr2.appendChild(tr2_td1);
	var newLabel = document.createElement('strong');
	newLabel.appendChild(document.createTextNode('New Password:'));
	tr2_td1.appendChild(newLabel);
	var tr2_td2 = document.createElement('td');
	tr2_td2.align = 'left';
	tr2.appendChild(tr2_td2);
	var newField = document.createElement('input');
	newField.onEnterFn = function()
	{
		if(newField.value != '')
		{
			confirmField.focus();
		}
	};
	registerListener('keypress', onEnter, newField);
	setupInputField(newField);
	newField.type = 'password';
	tr2_td2.appendChild(newField);
	
	var tr3 = document.createElement('tr');
	tbody.appendChild(tr3);
	var tr3_td1 = document.createElement('td');
	tr3_td1.align = 'right';
	tr3_td1.style.verticalAlign = 'middle';
	tr3_td1.style.paddingRight = '5px';
	tr3.appendChild(tr3_td1);
	var confirmLabel = document.createElement('strong');
	confirmLabel.appendChild(document.createTextNode('Confirm New:'));
	tr3_td1.appendChild(confirmLabel);
	var tr3_td2 = document.createElement('td');
	tr3_td2.align = 'left';
	tr3.appendChild(tr3_td2);
	var confirmField = document.createElement('input');
	confirmField.onEnterFn = function()
	{
		changePassword();
	};
	registerListener('keypress', onEnter, confirmField);
	setupInputField(confirmField);
	confirmField.type = 'password';
	tr3_td2.appendChild(confirmField);
	
	// submit button
	var subtmitButton = document.createElement('input');
	subtmitButton.type = 'button';
	subtmitButton.value = 'Change Password';
	subtmitButton.onclick = function()
	{
		changePassword();
	};
	
	var id = 'pass_change_dialog';
	var title = 'Change Your Password';
	var dialog = new DialogObject(id, title, dBody, [subtmitButton], true);
	dialog.setFixedPosition(true);
	dialog.show();
	oldField.focus();
}

function showCalendarDialog(title, src)
{
	var id = 'calendar_dialog';

	var div = document.createElement('div');
	div.className = 'calign';
	var calendarFrame = document.createElement('iframe');
	calendarFrame.src = src;
	calendarFrame.style.width = '700px';
	calendarFrame.style.height = '500px';
	calendarFrame.frameBorder = 0;
	calendarFrame.style.scrolling = 'no';
	div.appendChild(calendarFrame);
	
	var width = '750px';
	var top = '50px';
	var dialog = new DialogObject(id, title, div, null, true, width, top);
	dialog.setFixedPosition(true);
	dialog.show();
}

function showUploadDialog(category, text)
{
	var div = document.createElement('div');
	
	var uploadButton = document.createElement('input');
	uploadButton.type = 'button';
	uploadButton.value = 'Upload';
	uploadButton.onclick = function()
	{
		var fileInput = document.getElementById('file'); //IE8
		if(fileInput.value == '')
		{
			dialog.setErrorStatus('Please select a file to upload');
			return;
		}
		
		dialog.setStatus('Uploading...');
		form.style.display = 'none';
		
		form.submit();
	};
	
	var id = 'upload_dialog';
	var title = 'Upload';
	var dialog = new DialogObject(id, title, div, [uploadButton], true);
	dialog.setFixedPosition(true);
	
	//IE8 renames 'enctype' attribute to 'encType' and 'name' to 'propdescname'
	div.innerHTML = '<form class="calign" id="upload_form" action="upload.php" target="upload_target" method="post" enctype="multipart/form-data"></form>';
	var form = document.getElementById('upload_form');
	/*
	var form = document.createElement('form');
	form.className = 'calign';
	form.id = 'upload_form';
	form.action = 'upload.php';
	form.target = 'upload_target';
	form.method = 'post';
	form.enctype = 'multipart/form-data';
	*/
	div.appendChild(form);
	dialog.setVariable('form', form);	
	
	var maxFileSize = document.createElement('input');
	maxFileSize.type = 'hidden';
	maxFileSize.name = 'MAX_FILE_SIZE';
	maxFileSize.value = '10485760'; // 10MB
	//form.appendChild(maxFileSize);
	form.innerHTML += '<input type="hidden" name="MAX_FILE_SIZE" value="10485760" />'; //IE8
	
	var fileInput = document.createElement('input');
	fileInput.type = 'file';
	fileInput.name = 'file';
	fileInput.id = 'file';
	//form.appendChild(fileInput);
	form.innerHTML += '<input type="file" name="file" id="file" />'; //IE8
	
	if(text)
	{
		var caption = document.createElement('p');
		caption.className = 'calign caption';
		caption.appendChild(document.createTextNode(text));
		form.appendChild(caption);
	}
	
	if(category == '*')
	{
		var categoryLabel = document.createElement('label');
		categoryLabel.appendChild(document.createTextNode('Category: '));
		form.appendChild(categoryLabel);
		
		var categorySelect = document.createElement('select');
		categorySelect.name = 'category';
		var categories = [
		'resource',
		'image'
		];
		categories.sort();
		for(var i = 0; i < categories.length; ++i)
		{
			var option = document.createElement('option');
			option.appendChild(document.createTextNode(categories[i]));
			categorySelect.appendChild(option);
		}
		form.appendChild(categorySelect);
	}
	else
	{
		var categoryInput = document.createElement('input');
		categoryInput.type = 'hidden';
		categoryInput.name = 'category';
		categoryInput.value = category;
		form.appendChild(categoryInput);
	}
	
	var uploadTarget = document.createElement('iframe');
	uploadTarget.id = 'upload_target';
	uploadTarget.name = 'upload_target';
	//form.appendChild(uploadTarget);
	form.innerHTML += '<iframe id="upload_target" name="upload_target" />'; //IE8
	
	dialog.show();
}

function showPublicationUploadDialog(category)
{
	var div = document.createElement('div');
	
	var uploadButton = document.createElement('input');
	uploadButton.type = 'button';
	uploadButton.value = 'Upload';
	uploadButton.onclick = function()
	{
		var titleInput = document.getElementById('file_title'); //IE8
		titleInput.value = titleInput.value.trim();
		if(titleInput.value == '')
		{
			dialog.setErrorStatus('Please enter a title for the publication');
			return;
		}
		var thumbInput = document.getElementById('file_thumb'); //IE8
		if(thumbInput.value == '')
		{
			dialog.setErrorStatus('Please select a thumbnail to upload');
			return;
		}
		var fileInput = document.getElementById('file'); //IE8
		if(fileInput.value == '')
		{
			dialog.setErrorStatus('Please select a publication to upload');
			return;
		}
		
		dialog.setStatus('Uploading...');
		form.style.display = 'none';
		
		form.submit();
	};
	
	var id = 'publication_upload_dialog';
	var title = 'Upload a Publication';
	var dialog = new DialogObject(id, title, div, [uploadButton], true, '350px');
	dialog.setFixedPosition(true);
	
	//IE8 renames 'enctype' attribute to 'encType' and 'name' to 'propdescname'
	div.innerHTML = '<form class="calign" id="publication_upload_form" action="upload_publication.php" target="upload_target" method="post" enctype="multipart/form-data"></form>';
	var form = document.getElementById('publication_upload_form');
	/*
	var form = document.createElement('form');
	form.className = 'calign';
	form.id = 'upload_form';
	form.action = 'upload.php';
	form.target = 'upload_target';
	form.method = 'post';
	form.enctype = 'multipart/form-data';
	*/
	div.appendChild(form);
	dialog.setVariable('form', form);	
	
	var maxFileSize = document.createElement('input');
	maxFileSize.type = 'hidden';
	maxFileSize.name = 'MAX_FILE_SIZE';
	maxFileSize.value = '10485760'; // 10MB
	//form.appendChild(maxFileSize);
	form.innerHTML += '<input type="hidden" name="MAX_FILE_SIZE" value="10485760" />'; //IE8

	var titleLabel = document.createElement('strong');
	titleLabel.style.display = 'block';
	titleLabel.appendChild(document.createTextNode('Title'));
	//form.appendChild(titleLabel);
	
	var titleInput = document.createElement('input');
	titleInput.type = 'text';
	titleInput.name = 'file_title';
	titleInput.id = 'file_title';
	titleInput.style.width = '215px';
	titleInput.defaultValue = 'Title';
	form.appendChild(titleInput);
	
	var caption = document.createElement('div');
	caption.className = 'caption calign';
	caption.appendChild(document.createTextNode('Usually the month of the publication'));
	form.appendChild(caption);
	
	var hr1 = document.createElement('div');
	hr1.className = 'hr_slim';
	hr1.style.marginTop = hr1.style.marginBottom = '5px';
	form.appendChild(hr1);
	
	var thumbLabel = document.createElement('strong');
	thumbLabel.style.display = 'block';
	thumbLabel.appendChild(document.createTextNode('Thumbnail'));
	form.appendChild(thumbLabel);
	/*
	var fileInput = document.createElement('input');
	fileInput.type = 'file';
	fileInput.name = 'file_thumb';
	fileInput.id = 'file_thumb';
	form.appendChild(fileInput);
	*/
	form.innerHTML += '<input type="file" name="file_thumb" id="file_thumb" />'; //IE8
	
	var tCaption = document.createElement('div');
	tCaption.className = 'caption calign';
	tCaption.appendChild(document.createTextNode('Image only (gif, jpg, png)'));
	form.appendChild(tCaption);
	
	var hr2 = document.createElement('div');
	hr2.className = 'hr_slim';
	hr2.style.marginTop = hr2.style.marginBottom = '5px';
	form.appendChild(hr2);

	var publicationLabel = document.createElement('strong');
	publicationLabel.style.display = 'block';
	publicationLabel.appendChild(document.createTextNode('Publication'));
	form.appendChild(publicationLabel);
	/*
	var fileInput = document.createElement('input');
	fileInput.type = 'file';
	fileInput.name = 'file';
	fileInput.id = 'file';
	form.appendChild(fileInput);
	*/
	form.innerHTML += '<input type="file" name="file" id="file" />'; //IE8
	
	var pCaption = document.createElement('div');
	pCaption.className = 'caption calign';
	pCaption.appendChild(document.createTextNode('PDF only'));
	form.appendChild(pCaption);
	
	var categoryInput = document.createElement('input');
	categoryInput.type = 'hidden';
	categoryInput.name = 'category';
	categoryInput.value = category;
	form.appendChild(categoryInput);
	
	/*
	var uploadTarget = document.createElement('iframe');
	thumbUploadTarget.id = 'upload_target';
	thumbUploadTarget.name = 'upload_target';
	form.appendChild(uploadTarget);
	*/
	form.innerHTML += '<iframe id="upload_target" name="upload_target" />'; //IE8
	
	dialog.show();
	setupInputField(document.getElementById('file_title')); //IE8 has to be here because of innerHTML calls
}

function showEventDialog(eventID)
{
	var info = document.createElement('p');
	info.className = 'lalign';
	info.appendChild(document.getElementById(eventID+'_info').cloneNode(true));
	info.style.marginBottom = '5px';
	
	//var textbox = new TextboxObject();
	
	var description = document.createElement('div');
	description.className = 'event_description';
	description.innerHTML = document.getElementById(eventID+'_description').innerHTML;
	//textbox.appendChild(description);
	
	var dBody = document.createElement('div');
	dBody.appendChild(info);
	//textbox.appendTo(dBody);
	dBody.appendChild(description);
	
	var id = eventID+'_event_dialog';
	var title = document.getElementById(eventID+'_title').firstChild.nodeValue;
	var width = '300px';
	var dialog = new DialogObject(id, title, dBody, null, false, width);
	dialog.setFixedPosition(true);
	
	dialog.show();
}

function showPDFDialog(title, src)
{
	var iframe = document.createElement('iframe');
	iframe.className = 'pdf';
	
	var id = 'pdf_dialog';
	var width = '800px';
	var top = '50px';
	var dialog = new DialogObject(id, title, iframe, null, true, width, top);
	dialog.setFixedPosition(true);
	dialog.show();
	iframe.src = src;
}

function showContactDialog(type)
{
	var form = document.createElement('form');
	form.className = 'calign';
	
	var nameField = document.createElement('input');
	nameField.id = 'name_field';
	nameField.type = 'text';
	nameField.defaultValue = 'Name';
	nameField.style.width = '200px';
	nameField.onEnterFn = function()
	{
		if(this.value != '')
		{
			affiliationField.focus();
		}
	};
	registerListener('keypress', onEnter, nameField);
	setupInputField(nameField);
	form.appendChild(nameField);
	
	var affiliationField = document.createElement('input');
	affiliationField.type = 'text';
	affiliationField.defaultValue = 'Affiliation';
	affiliationField.style.width = '200px';
	affiliationField.onEnterFn = function()
	{
		if(this.value != '')
		{
			emailField.focus();
		}
	};
	registerListener('keypress', onEnter, affiliationField);
	setupInputField(affiliationField);
	form.appendChild(document.createElement('br'));
	form.appendChild(affiliationField);
	
	var emailField = document.createElement('input');
	emailField.type = 'text';
	emailField.defaultValue = 'Your Email';
	emailField.style.width = '200px';
	emailField.onEnterFn = function()
	{
		if(this.value != '')
		{
			messageArea.focus();
		}
	};
	registerListener('keypress', onEnter, emailField);
	setupInputField(emailField);
	form.appendChild(document.createElement('br'));
	form.appendChild(emailField);
	
	var messageArea = document.createElement('textarea');
	messageArea.defaultValue = 'Message';
	messageArea.style.width = '200px';
	setupTextarea(messageArea);
	form.appendChild(document.createElement('br'));
	form.appendChild(messageArea);
	
	var submitButton = document.createElement('input');
	submitButton.type = 'button';
	submitButton.value = 'Submit';
	submitButton.onclick = function()
	{
		if(nameField.value == nameField.defaultValue || affiliationField.value == affiliationField.defaultValue || 
		   emailField.value == emailField.defaultValue || messageArea.value == messageArea.defaultValue)
		{
			dialog.setErrorStatus('Please complete all fields');
			return;
		}
		
		if(!validateEmail(emailField.value))
		{
			dialog.setErrorStatus('Invalid email address');
			emailField.select();
			return;
		}
		
		var ajax = new AjaxObject();
		ajax.callback = function(ajax)
		{
			if(!ajax.success)
			{
				dialog.setErrorStatus(ajax.message);
				return;
			}
			
			dialog.hideTitle();
			dialog.hideBodyContent();
			dialog.hideButtonZone();
			dialog.setInfoStatus(ajax.message);
			DialogManager.closeDialog(dialog, 3*SECOND);
		};
		
		var name = nameField.value;
		var affiliation = affiliationField.value;
		var email = emailField.value;
		var message = messageArea.value;
		
		ajax.update('action=contact&type='+type+'&name='+name+'&affiliation='+affiliation+'&email='+email+'&message='+message);
	};
	
	var id = type+'_dialog';
	var title = 'Contact Us';
	var dialog = new DialogObject(id, title, form, [submitButton]);
	dialog.setFixedPosition(true);
	dialog.show();
}

function showAddFellowDialog()
{
	function addFellow()
	{
		if(nameInput.value == nameInput.defaultValue)
		{
			dialog.setErrorStatus('Please enter the fellow\'s name');
			return;
		}
		
		var ajax = new AjaxObject();
		ajax.callback = function(ajax)
		{
			PanelManager.updatePanelObjectByName('fellow_list_panel');
			if(!ajax.success)
			{
				dialog.setErrorStatus(ajax.message);
				return;
			}
			
			dialog.close();
		};
		ajax.update('action=add_fellow&name='+nameInput.value);
	}
	
	var div = document.createElement('div');
	div.className = 'calign';
	var nameInput = document.createElement('input');
	nameInput.type = 'text';
	nameInput.defaultValue = 'Name';
	nameInput.style.width = '180px';
	setupInputField(nameInput);
	div.appendChild(nameInput);
	
	var createButton = document.createElement('input');
	createButton.type = 'button';
	createButton.value = 'Add';
	createButton.onclick = function()
	{
		addFellow();
	};
	
	var id = 'add_fellow_dialog';
	var title = 'Add a Fellow';
	var width = '250px';
	var dialog = new DialogObject(id, title, div, [createButton], false, width);
	dialog.setFixedPosition(true);
	dialog.show();
}

function showAddCompanyDialog()
{
	function addCompany()
	{
		if(nameInput.value == nameInput.defaultValue)
		{
			dialog.setErrorStatus('Please enter the company\'s name');
			return;
		}
		
		var ajax = new AjaxObject();
		ajax.callback = function(ajax)
		{
			PanelManager.updatePanelObjectByName('company_list_panel');
			if(!ajax.success)
			{
				dialog.setErrorStatus(ajax.message);
				return;
			}
			
			dialog.close();
		};
		ajax.update('action=add_company&name='+nameInput.value);
	}
	
	var div = document.createElement('div');
	div.className = 'calign';
	var nameInput = document.createElement('input');
	nameInput.type = 'text';
	nameInput.defaultValue = 'Name';
	nameInput.style.width = '180px';
	setupInputField(nameInput);
	div.appendChild(nameInput);
	
	var createButton = document.createElement('input');
	createButton.type = 'button';
	createButton.value = 'Add';
	createButton.onclick = function()
	{
		addCompany();
	};
	
	var id = 'add_fellow_dialog';
	var title = 'Add a Company';
	var width = '250px';
	var dialog = new DialogObject(id, title, div, [createButton], false, width);
	dialog.setFixedPosition(true);
	dialog.show();
}

function showResumeUploadDialog(fellowID)
{
	var div = document.createElement('div');
	
	var uploadButton = document.createElement('input');
	uploadButton.type = 'button';
	uploadButton.value = 'Upload';
	uploadButton.onclick = function()
	{
		var fileInput = document.getElementById('file'); //IE8
		if(fileInput.value == '')
		{
			dialog.setErrorStatus('Please select a file to upload');
			return;
		}
		
		dialog.setStatus('Uploading...');
		form.style.display = 'none';
		
		form.submit();
	};
	
	var id = 'resume_upload_dialog';
	var title = 'Resume Upload';
	var dialog = new DialogObject(id, title, div, [uploadButton], true);
	dialog.setFixedPosition(true);
	
	//IE8 renames 'enctype' attribute to 'encType' and 'name' to 'propdescname'
	div.innerHTML = '<form class="calign" id="resume_upload_form" action="upload_resume.php" target="upload_target" method="post" enctype="multipart/form-data"></form>';
	var form = document.getElementById('resume_upload_form');
	/*
	var form = document.createElement('form');
	form.className = 'calign';
	form.id = 'resume_upload_form';
	form.action = 'upload.php';
	form.target = 'upload_target';
	form.method = 'post';
	form.enctype = 'multipart/form-data';
	*/
	div.appendChild(form);
	dialog.setVariable('form', form);	
	
	/*
	var maxFileSize = document.createElement('input');
	maxFileSize.type = 'hidden';
	maxFileSize.name = 'MAX_FILE_SIZE';
	maxFileSize.value = '10485760'; // 10MB
	form.appendChild(maxFileSize);
	*/
	form.innerHTML += '<input type="hidden" name="MAX_FILE_SIZE" value="10485760" />'; //IE8
	
	form.innerHTML += '<input type="hidden" name="fellow_id" value="'+fellowID+'" />'; //IE8
	
	/*
	var fileInput = document.createElement('input');
	fileInput.type = 'file';
	fileInput.name = 'file';
	fileInput.id = 'file';
	form.appendChild(fileInput);
	*/
	form.innerHTML += '<input type="file" name="file" id="file" />'; //IE8
	
	/*
	var uploadTarget = document.createElement('iframe');
	uploadTarget.id = 'upload_target';
	uploadTarget.name = 'upload_target';
	form.appendChild(uploadTarget);
	*/
	form.innerHTML += '<iframe id="upload_target" name="upload_target" />'; //IE8
	
	dialog.show();
}

function showPhotoUploadDialog(fellowID)
{
	var div = document.createElement('div');
	
	var uploadButton = document.createElement('input');
	uploadButton.type = 'button';
	uploadButton.value = 'Upload';
	uploadButton.onclick = function()
	{
		var fileInput = document.getElementById('file'); //IE8
		if(fileInput.value == '')
		{
			dialog.setErrorStatus('Please select a file to upload');
			return;
		}
		
		dialog.setStatus('Uploading...');
		form.style.display = 'none';
		
		form.submit();
	};
	
	var id = 'photo_upload_dialog';
	var title = 'Photo Upload';
	var dialog = new DialogObject(id, title, div, [uploadButton], true);
	dialog.setFixedPosition(true);
	
	div.innerHTML = '<form class="calign" id="photo_upload_form" action="upload_photo.php" target="upload_target" method="post" enctype="multipart/form-data"></form>';
	var form = document.getElementById('photo_upload_form');
	div.appendChild(form);
	dialog.setVariable('form', form);	
	
	form.innerHTML += '<input type="hidden" name="MAX_FILE_SIZE" value="10485760" />';
	form.innerHTML += '<input type="hidden" name="fellow_id" value="'+fellowID+'" />';
	form.innerHTML += '<input type="file" name="file" id="file" />';
	form.innerHTML += '<iframe id="upload_target" name="upload_target" />';
	
	dialog.show();
}

function showLogoUploadDialog(companyID)
{
	var div = document.createElement('div');
	
	var uploadButton = document.createElement('input');
	uploadButton.type = 'button';
	uploadButton.value = 'Upload';
	uploadButton.onclick = function()
	{
		var fileInput = document.getElementById('file'); //IE8
		if(fileInput.value == '')
		{
			dialog.setErrorStatus('Please select a file to upload');
			return;
		}
		
		dialog.setStatus('Uploading...');
		form.style.display = 'none';
		
		form.submit();
	};
	
	var id = 'logo_upload_dialog';
	var title = 'Logo Upload';
	var dialog = new DialogObject(id, title, div, [uploadButton], true);
	dialog.setFixedPosition(true);
	
	div.innerHTML = '<form class="calign" id="logo_upload_form" action="upload_logo.php" target="upload_target" method="post" enctype="multipart/form-data"></form>';
	var form = document.getElementById('logo_upload_form');
	div.appendChild(form);
	dialog.setVariable('form', form);
	
	form.innerHTML += '<input type="hidden" name="MAX_FILE_SIZE" value="10485760" />';
	form.innerHTML += '<input type="hidden" name="company_id" value="'+companyID+'" />';
	form.innerHTML += '<input type="file" name="file" id="file" />';
	form.innerHTML += '<iframe id="upload_target" name="upload_target" />';
	
	dialog.show();
}

function showNewsLinkDialog()
{
	function addNewsLink()
	{
		dialog.setStatus('Please wait...');
		
		if(titleField.value == titleField.defaultValue)
		{
			dialog.setErrorStatus('Please enter a title for the link');
			titleField.focus();
			return;
		}
		if(urlField.value == urlField.defaultValue || !validateURL(urlField.value))
		{
			dialog.setErrorStatus('Please enter a valid url');
			urlField.focus();
			return;
		}
		
		addButton.disabled = true;
		
		var ajax = new AjaxObject();
		ajax.callback = function(ajax)
		{
			if(!ajax.success)
			{
				addButton.disabled = false;
				dialog.setErrorStatus(ajax.message);
				return;
			}
			
			dialog.close();
			PanelManager.updatePanelObjectByName('news_link_list_panel');
		};
		
		ajax.update('action=add_news_link&title='+titleField.value+'&url='+urlField.value);
	}
	
	var dBody = document.createElement('div');
	dBody.className = 'calign';
	
	var titleField = document.createElement('input');
	titleField.type = 'text';
	titleField.defaultValue = 'Title';
	setupInputField(titleField);
	dBody.appendChild(titleField);
	
	dBody.appendChild(document.createElement('br'));
	
	var urlField = document.createElement('input');
	urlField.type = 'text';
	urlField.defaultValue = 'Link';
	setupInputField(urlField);
	dBody.appendChild(urlField);
	
	var addButton = document.createElement('input');
	addButton.type = 'button';
	addButton.value = 'Add';
	addButton.onclick = function()
	{
		addNewsLink();
	};
	
	var id = 'news_link_dialog';
	var title = 'Add News Link';
	var width = '250px';
	var dialog = new DialogObject(id, title, dBody, [addButton], true, width);
	dialog.setFixedPosition(true);
	
	dialog.show();
}