YackTrack.Account = new YAHOO.widget.Dialog("ytAccount", { 
		effect: {effect: YAHOO.widget.ContainerEffect.FADE, duration: 0.25},
		postmethod: "async", 
		hideaftersubmit: false, 
		fixedcenter: true,
		modal: true,
		close: false,
		visible: false,
		draggable: false }
	);
YackTrack.Account.userData = {};
YackTrack.Account.setHeader("Edit Account");
YackTrack.Account.formId = 'ytAccountForm';
YackTrack.Account.handleSubmit = function() {
	YackTrack.Util.removeAllErrors([
		'user_email', 'display_name', 'user_timezone',
		'defaultEmailFmt', 'defaultQueryNotification', 'defaultBlogNotification' 
	]);
	YackTrack.Util.removeFormError(YackTrack.Account.formId);
	this.submit();
};
YackTrack.Account.handleCancel = function() {
	this.cancel();
};
YackTrack.Account.validate = function() {
	var valid = true;
	var data = this.getData();
	if (!validations["required"](data.user_email)) {
		YackTrack.Util.addError('user_email', 'You must enter a valid email address.');
		valid = false;
	}
	if (!validations["email"](data.user_email)) {
		YackTrack.Util.addError('user_email', 'You must enter a valid email address.');
		valid = false;
	}
	if (!validations["required"](data.display_name)) {
		YackTrack.Util.addError('display_name', 'You must enter a display name.');
		valid = false;
	}
	if (!validations["required"](data.user_timezone)) {
		YackTrack.Util.addError('user_timezone', 'You must select a time zone.');
		valid = false;
	}
	if (!validations["required"](data.defaultQueryNotification)) {
		YackTrack.Util.addError('defaultQueryNotification', 'You must select a default query notification timing.');
		valid = false;
	}
	if (!validations["required"](data.defaultBlogNotification)) {
		YackTrack.Util.addError('defaultBlogNotification', 'You must select a default blog notification timing.');
		valid = false;
	}
	if (!validations["required"](data.defaultEmailFmt)) {
		YackTrack.Util.addError('defaultEmailFmt', 'You must select a default email format.');
		valid = false;
	}
	return valid;
};
YackTrack.Account.callback.success = function(o) {
	var ok = false;
	var msg = "";
	try {
		var resp = YAHOO.lang.JSON.parse(o.responseText);
		ok = resp.success;
		msg = resp.message;
	} catch (e) { 
		YackTrack.Util.addFormError(YackTrack.Account.formId, e);
	}
	if (ok) {
		YackTrack.Account.destroy();
		// TODO: do we need to reload the page after editing the account?
		// window.location.reload();
	} else {
		YackTrack.Util.addFormError(YackTrack.Account.formId, msg);
	}
};
YackTrack.Account.callback.failure = function(o) {
	YackTrack.Util.addFormError(YackTrack.Account.formId, o.responseText);
};
YackTrack.Account.cfg.queueProperty("buttons", [ 
			{ text: "Save", handler: YackTrack.Account.handleSubmit, isDefault: true },
			{ text: "Cancel", handler: YackTrack.Account.handleCancel } 
		]);
YackTrack.Account.cfg.queueProperty("keylisteners", [
		new YAHOO.util.KeyListener(document, { keys:27 },  							
			{ fn: YackTrack.Account.handleCancel,
			scope: YackTrack.Account,
			correctScope: true } ),
		new YAHOO.util.KeyListener(document, { keys:13 },  							
			{ fn: YackTrack.Account.handleSubmit,
			scope: YackTrack.Account,
			correctScope: true } )
	]);
YackTrack.Account.handleSuccess = function(o) {
	var resp = YAHOO.lang.JSON.parse(o.responseText);
	if (resp.success) {
		YackTrack.Account.userData = resp.userInfo;
	} else {
		YackTrack.Util.addFormError(YackTrack.Account.formId, resp.message);
	}
	YackTrack.dataReady.fire(); 
	YackTrack.dataReady.unsubscribeAll();
}
YackTrack.Account.handleFailure = function(o) {
	YackTrack.Util.addFormError(YackTrack.Account.formId, o.responseText);
}
YackTrack.Account.getDialogData = function() {
	var callback = { 
		success: YackTrack.Account.handleSuccess, 
		failure: YackTrack.Account.handleFailure, 
		scope: this
	}; 
	var url = "ajaxPanel?panel=editaccount&mode=data";
	YAHOO.util.Connect.asyncRequest('GET', url, callback, null);
};
YackTrack.Account.getForm = function() {
	var html = "<form id='" + YackTrack.Account.formId + "' name='" + YackTrack.Account.formId + "' action='ajaxPanel' method='post'>\n" +
		"<input id='original_email' name='original_email' value='" + YackTrack.Account.userData.user_email + "' type='hidden' />\n" +
		"<label for='display_name' class='ytLabel'>Name*</label>\n" +
		"<br />\n" +
		"<input id='display_name' name='display_name' value='" + YackTrack.Account.userData.display_name + "' class='txt' type='text' size='20' />\n" +
		"<br /><br />\n" +
		"<label for='user_email' class='ytLabel'>Email*</label>\n" +
		"<br />\n" +
		"<input id='user_email' name='user_email' value='" + YackTrack.Account.userData.user_email + "' class='txt' type='text' size='20' />\n" +
		"<br /><br />\n" +
		"<label for='user_timezone' class='ytLabel'>Time Zone*</label>\n" +
		"<br />\n" +
		YackTrack.Account.getTimeZoneHtml(YackTrack.Account.userData.user_timezone) +
		"<br /><br />\n" +
		"<label for='defaultEmailFmt' class='ytLabel'>Default Email Format*</label>\n" +
		"<br />\n" +
		"<select id='defaultEmailFmt' name='defaultEmailFmt' class='required'>\n";
	if (YackTrack.Account.userData.defaultEmailFmt == 'TEXT') {
		html += "<option selected='selected' value='TEXT'>\nTEXT\n</option>\n" +
			"<option value='HTML'>\nHTML\n</option>\n";
	} else {
		html += "<option value='TEXT'>\nTEXT\n</option>\n" +
			"<option selected='selected' value='HTML'>\nHTML\n</option>\n";
	}
	html += "\n</select>\n" +
		"<br /><br />\n" +
		"<label for='defaultQueryNotification' class='ytLabel'>Default Query Notification*</label>\n" +
		"<br />\n" +
		"<select id='defaultQueryNotification' name='defaultQueryNotification' class='required'>\n" +
		YackTrack.Account.getTimingOptions(YackTrack.Account.userData.defaultQueryNotification) +
		"\n</select>\n" +
		"<br /><br />\n" +
		"<label for='defaultBlogNotification' class='ytLabel'>Default Blog Post Notification*</label>\n" +
		"<br />\n" +
		"<select id='defaultBlogNotification' name='defaultBlogNotification' class='required'>\n" +
		YackTrack.Account.getTimingOptions(YackTrack.Account.userData.defaultBlogNotification) +
		"\n</select>\n" +
		"<br /><br />\n" +
		"<input id='mode' name='mode' value='exec' type='hidden' />\n" +
		"<input id='fromUrl' name='fromUrl' value='' type='hidden' />\n" +
		"<input id='panel' name='panel' value='editaccount' type='hidden' />\n" +
		"</form>\n";
	return html;
}
YackTrack.Account.getTimingOptions = function(selectedText) {
	var html = "";
	if (selectedText == 'NONE') {
		html += "<option selected='selected' value='NONE'>\nNONE\n</option>\n";
	} else {
		html += "<option value='NONE'>\nNONE\n</option>\n";
	}
	if (selectedText == 'DAILY') {
		html += "<option selected='selected' value='DAILY'>\nDAILY\n</option>\n";
	} else {
		html += "<option value='DAILY'>\nDAILY\n</option>\n";
	}
	if (selectedText == 'INSTANT') {
		html += "<option selected='selected' value='INSTANT'>\nINSTANT\n</option>\n";
	} else {
		html += "<option value='INSTANT'>\nINSTANT\n</option>\n";
	}
	return html;
}
	
YackTrack.Account.getTimeZoneHtml = function(tz) {
	// TODO: loop through an array of values and compare each to tz and output options
	return "<select id='user_timezone' name='user_timezone' class='required'>\n" +
		"<option value='GMT-11:00'>\nGMT-11:00\n</option>\n" +
		"<option value='GMT-10:00'>\nGMT-10:00\n</option>\n" +
		"<option value='GMT-09:30'>\nGMT-09:30\n</option>\n" +
		"<option value='GMT-09:00'>\nGMT-09:00\n</option>\n" +
		"<option value='GMT-08:00'>\nGMT-08:00\n</option>\n" +
		"<option value='GMT-07:00'>\nGMT-07:00\n</option>\n" +
		"<option value='GMT-06:00'>\nGMT-06:00\n</option>\n" +
		"<option selected='selected' value='GMT-05:00'>\nGMT-05:00\n</option>\n" +
		"<option value='GMT-04:30'>\nGMT-04:30\n</option>\n" +
		"<option value='GMT-04:00'>\nGMT-04:00\n</option>\n" +
		"<option value='GMT-03:30'>\nGMT-03:30\n</option>\n" +
		"<option value='GMT-03:00'>\nGMT-03:00\n</option>\n" +
		"<option value='GMT-02:00'>\nGMT-02:00\n</option>\n" +
		"<option value='GMT-01:00'>\nGMT-01:00\n</option>\n" +
		"<option value='GMT+00:00'>\nGMT+00:00\n</option>\n" +
		"<option value='GMT+01:00'>\nGMT+01:00\n</option>\n" +
		"<option value='GMT+02:00'>\nGMT+02:00\n</option>\n" +
		"<option value='GMT+03:00'>\nGMT+03:00\n</option>\n" +
		"<option value='GMT+03:30'>\nGMT+03:30\n</option>\n" +
		"<option value='GMT+04:00'>\nGMT+04:00\n</option>\n" +
		"<option value='GMT+04:30'>\nGMT+04:30\n</option>\n" +
		"<option value='GMT+05:00'>\nGMT+05:00\n</option>\n" +
		"<option value='GMT+05:30'>\nGMT+05:30\n</option>\n" +
		"<option value='GMT+06:00'>\nGMT+06:00\n</option>\n" +
		"<option value='GMT+06:30'>\nGMT+06:30\n</option>\n" +
		"<option value='GMT+07:00'>\nGMT+07:00\n</option>\n" +
		"<option value='GMT+08:00'>\nGMT+08:00\n</option>\n" +
		"<option value='GMT+09:00'>\nGMT+09:00\n</option>\n" +
		"<option value='GMT+09:30'>\nGMT+09:30\n</option>\n" +
		"<option value='GMT+10:00'>\nGMT+10:00\n</option>\n" +
		"<option value='GMT+11:00'>\nGMT+11:00\n</option>\n" +
		"<option value='GMT+11:30'>\nGMT+11:30\n</option>\n" +
		"<option value='GMT+12:00'>\nGMT+12:00\n</option>\n" +
		"<option value='GMT+13:00'>\nGMT+13:00\n</option>\n" +
		"<option value='GMT+14:00'>\nGMT+14:00\n</option>\n" +
		"\n</select>\n";
}
