lm_php5_Form = Class.create();

lm_php5_Form.HELP_CLASS             = 'overlay helpMsg';
lm_php5_Form.HELP_TOGGLE_ID_PREFIX  = 'helpT';
lm_php5_Form.HELP_MSG_ID_PREFIX     = 'help';
lm_php5_Form.SHOW_HELP_CLASS = lm_php5_Form.HELP_CLASS + ' show';
lm_php5_Form.HIDE_HELP_CLASS = lm_php5_Form.HELP_CLASS + ' hide';

lm_php5_Form.registerHelp = function(elementId) {
	if (lm_php5_Util.isArray(elementId)) {
		for (var i = 0; i < elementId.length; i++) {
			lm_php5_Form.initHelp(elementId[i]);
		}
	} else {
		lm_php5_Form.initHelp(elementId);
	}
}

lm_php5_Form.registerMsgs = function(elementId) {
	if (lm_php5_Util.isArray(elementId)) {
		for (var i = 0; i < elementId.length; i++) {
			lm_php5_Form.initMsg(elementId[i]);
		}
	} else {
		lm_php5_Form.initMsg(elementId);
	}
}

lm_php5_Form.initHelp = function(fieldId) {
	var field = $(fieldId);
	if (field) {
		// Toggle
		var span = $(lm_php5_Form.HELP_TOGGLE_ID_PREFIX + fieldId);
		if (span) {
			var a = $(span.getElementsByTagName('a')[0]);
			if (a) {
				Event.observe(a, 'click', lm_php5_Form.toggleHelp.bindAsEventListener(this, fieldId));
			}
		}
		
		// Msg
		var div = $(lm_php5_Form.HELP_MSG_ID_PREFIX + fieldId);
		if (div) {
			div.className = lm_php5_Form.HIDE_HELP_CLASS; // Hide
			var as = div.getElementsByTagName('a');
			var a = $(as[as.length-1]);
			if (a) {
				Event.observe(a, 'click', lm_php5_Form.toggleHelp.bindAsEventListener(this, fieldId, true));			
				Event.observe(a, 'click', lm_php5_Form.jumpToField.bindAsEventListener(this, fieldId));
			}
		}
	}
}

lm_php5_Form.initMsg = function(fieldId) {
	var fieldLink = $('m' + fieldId);
	if (fieldLink) {
		Event.observe(fieldLink, 'click', lm_php5_Form.jumpToField.bindAsEventListener(this, fieldId));
	}
}

/**
 * Zeigt oder versteckt (je nach Zustand) eine Hilfemeldung.
 */
lm_php5_Form.toggleHelp = function(event, fieldId, dontStop) {
	var msg = $(lm_php5_Form.HELP_MSG_ID_PREFIX + fieldId);
	if (msg) {
		if (msg.className == lm_php5_Form.SHOW_HELP_CLASS || msg.className == lm_php5_Form.HELP_CLASS) { // hide
			msg.className = lm_php5_Form.HIDE_HELP_CLASS;
		} else { // show
			msg.className = lm_php5_Form.SHOW_HELP_CLASS;
			
			// Hole erstes p-Element und setze focus
			var elem = msg.getElementsByTagName("p")[0];
			if (elem) {
				elem.tabIndex = -1;
				elem.focus();
			}
			
		}
		if (!dontStop) {
			Event.stop(event);
		}
		return false;
	}
	return true;
}

/**
 * Setzt den Fokus auf das Feld Feld mit der entsprechenden ID.
 */
lm_php5_Form.jumpToField = function(event, id) {
	var field = $(id);
	if (field) {	
		field.focus();
		Event.stop(event);
		return false;
	}
	
	return true;
}
