YAHOO.namespace("musicglue.FormValidation");
YAHOO.musicglue.FormValidation.Messaging = Class.create();
YAHOO.musicglue.FormValidation.Messaging.prototype = {
    initialize : function (errorsListContainer, validationMessageDelegate) {
        this.errorsList = document.createElement('ul');
        this.errorsListContainer = $(errorsListContainer);
        this.errorsListContainer.appendChild(this.errorsList);
        this.errorsListContainer.hide();
        this.validationMessageDelegate = validationMessageDelegate;
    },
    createAdvice : function(id, defaultErrorMessage, target) {
		// Don't know what happened here, new Element() now throws exception? So using document.createElement instead.
		// var newItem = new Element('li', {'id': id}).update(this.getErrorMessage(id, defaultErrorMessage, target));

		var newItem = $(document.createElement('li'));
		newItem.id = id;
		newItem.update(this.getErrorMessage(id, defaultErrorMessage, target));
		
		this.errorsList.appendChild(newItem);
        this.errorsListContainer.show();
    },
    getErrorMessage : function(id, defaultErrorMessage) {
        try { 
            var message = this.validationMessageDelegate(id);
            return message != null ? message : defaultErrorMessage;
        }
        catch(ex) { 
            return defaultErrorMessage; 
        }
    },
    hideErrorsList : function() {
        this.errorsListContainer.hide();
    }
}

YAHOO.musicglue.FormValidation.CreateAdvice = function(id, defaultErrorMessage, target) {
    formValidationMessaging.createAdvice(id, defaultErrorMessage, target);
}

YAHOO.musicglue.FormValidation.FormValidate = function(validationSucceeded, form) {
	if (validationSucceeded)
		formValidationMessaging.hideErrorsList();
}

YAHOO.musicglue.FormValidation.ElementValidated = function(passed, element) {
	element = $(element);
    var label = element.previous('label');
    
    if (label != undefined) {
		if (!passed) {
			label.addClassName('invalid');
			if (YAHOO.musicglue.AdvancedSections) {
				YAHOO.musicglue.AdvancedSections.ensureVisible(element);
			}
		} else {
			label.removeClassName('invalid');
		}
    }
}
