/* Hash of hashes. type => { id => msg } */
var msgSliderTexts = new Hash({});
/* One slider per "type" (error or message) */
var msgSliders = new Hash({});

/* You make up and pass a unique 'id' to add errors/msgs. It will be used if you want to remove them */

function addError(id, errorMsg)
{
	addMsg('error', id, errorMsg);
}

function removeError(id)
{
	removeMsg('error', id);
}
function timedRemoveError(id, timeout)
{
	var func = 'removeError("' + id + '")';
	window.setTimeout(func, timeout);
}

function addMessage(id, errorMsg)
{
	addMsg('message', id, errorMsg);
}

function timedRemoveMessage(id, timeout)
{
	var func = 'removeMessage("' + id + '")';
	window.setTimeout(func,timeout);
}

function removeMessage(id)
{
	removeMsg('message', id);
}


/* The below functions are only used in this file. You shouldn't need to ever call them from a page. */

function showHideSlider(type)
{
	var slider = msgSliders.get(type);
	var texts = msgSliderTexts.get(type);
	if (! texts.getKeys().length) {
		slider.slideOut('vertical');
	} else {
		/* errorContainer or messageContainer, containing a... */
		/* errorText or messageText */
		var text_div_id = type + "Text";
		var text_div = $(text_div_id);
		var contents = "";
		var msgs = texts.getValues();
		for (var i = 0; i < msgs.length; i++) {
			if (i) {
				contents += "<br />";
			}
			contents +=  msgs[i];
		}
		text_div.set('html', contents);
		var container_div_id = type + "Container";
		slider.slideIn('vertical').chain(function() {
			$(container_div_id).highlight('#FFFF1A');
		});
	}
}

/* type should be 'message' or 'error' (to add other types, add similar divs in the page.html) */
function addMsg(type, id, msg)
{
	var texts = msgSliderTexts.get(type);
	if (!texts) {
		texts = new Hash({});
		msgSliderTexts.set(type, texts);
	}
	if (texts.has(id)) {
		return;
	} else {
		msgSliderTexts.get(type).set(id, msg);
		var slider = msgSliders.get(type);
		if (!slider) {
			/* errorContainer or messageContainer */
			var div_id = type + "Container";
			slider = new Fx.Slide(div_id).hide();
			msgSliders.set(type, slider);
			var container_div_id = type + "Container";
			$(container_div_id).setStyles({ display:"block", visibility:"visible" });
		}
		showHideSlider(type);
	}
}
function removeMsg(type, id)
{
	var texts = msgSliderTexts.get(type);
	if (texts && texts.has(id)) {
		msgSliderTexts.get(type).erase(id);
		showHideSlider(type);
	}
}

function checkFieldsComplete(fields) {
	var ok = true;
	for (var i=0; i < fields.length; i++) {
		var el = fields[i];
		if (! $(el).get('value')) {
			$(el).tween('background-color', '#FFA8A8');
			ok = false;
		} else {
			$(el).tween('background-color', '#FFF');
		}
	}
	if (! ok) {
		addError("incompleteForm", "Please fill out all fields.");
	}
	return ok;
}
