	var Questionaire = function(){

		var aValidationFunctions = []
		var aValidationContainers = []
		var classOnError = "required"
		var flushContainers = function()
		{
			aValidationContainers = []
		}

		var markErrorIdentifiers = function()
		{
			for( var i = 0; i < aValidationContainers.length; i++ ){
				var a = aValidationContainers[i].getIdentifiers()
				for ( var l = 0; l < a.length; l++){
					getEle(a[l]).className += getEle(a[l]).className == '' ? classOnError : ' ' + classOnError
				}
			}
		}

		var unmarkErrorIdentifiers = function ()
		{
			for( var i = 0; i < aValidationContainers.length; i++ ){
				var a = aValidationContainers[i].getIdentifiers()
				for ( var l = 0; l < a.length; l++){
					var tmp = getEle(a[l]).className.toString()
					tmp = tmp.replace(classOnError, '')
					getEle(a[l]).className = tmp
				}
			}
		}

		var getContainerErrors = function()
		{
			var aMessages = []
			for( var i = 0; i < aValidationContainers.length; i++ ){
				var msg = aValidationContainers[i].getMessages()
				for ( var num = 0; num < msg.length; num++){
					aMessages[aMessages.length] = msg[num]
				}
			}
			return aMessages
		}

		return {
			addValidation: function( f )
			{
				aValidationFunctions[aValidationFunctions.length] = f
			},

			submit: function()
			{
				unmarkErrorIdentifiers()
				flushContainers()
				for( var f = 0; f < aValidationFunctions.length; f++){
					var container = new Questionaire.errorContainer()
					// call validation function which return instance of Questionaire.errorContainer
					tmp = aValidationFunctions[f](container)
					if ( typeof(tmp) == 'object' && tmp.hasErrors() ){
						aValidationContainers[aValidationContainers.length]	= tmp
					}
				}
				if( aValidationContainers.length > 0 ) {
					markErrorIdentifiers()
					var sAlert = 'Nedenstående fejl er fundet i dine indtastninger:\n\n'
					sAlert += getContainerErrors().join('\n')
					sAlert += '\n\nDe steder der ikke er udfyldt korrekt er markeret med rødt.'
					alert( sAlert)
					return false
				} else {
					return true
				}
			}


		}
	}()

	Questionaire.errorContainer = function()
	{
		var e = { messages: [], identifiers: [] }

		this.add = function(sIdentifier, sMessage)
		{
			if ( typeof(sIdentifier) == "object" ) {
				for ( i = 0; i < sIdentifier.length; i++ ){
					this.addIdentifier(sIdentifier[i])
				}
			} else {
				this.addIdentifier(sIdentifier)
			}
			this.addMessage(sMessage)
		}

		this.addMessage = function( s )
		{
			e.messages[e.messages.length] = s
		}

		this.addIdentifier = function(s)
		{
			if ( getEle(s) ){
				e.identifiers[e.identifiers.length] = s
			} else {
				alert(s + ' was not in dom')
			}
		}

		this.hasErrors = function()
		{
			return e.messages.length > 0 || e.identifiers.length > 0
		}

		this.getIdentifiers = function()
		{
			return e.identifiers
		}

		this.getMessages = function()
		{
			return e.messages
		}
	}