var form = {

	errors: false,
	fields: false,
	action:false,
	lang: 'de',
	disabled: false,
	callback: false,
	params: false,
	
	errorcodes: {
		'de' : {
			'#001' : 'Bitte füllen Sie alle Pflichtfelder aus!',
			'#002' : 'Bitte geben Sie eine korrekte E-Mail Adresse an!',
			'#003' : 'Vielen Dank für Ihre Nachricht! Wir werden diese so schnell wie möglich bearbeiten und uns dann umgehend bei Ihnen melden',
			'#004' : 'Beim Versand der E-Mail ist ein Fehler aufgetreten. Bitte versuchen Sie es doch noch einmal. Danke!'
		}, 
		'en' : {
			'#001' : 'Please fill out every required field.',
			'#002' : 'Please specify a correct email address.',
			'#003' : '',
			'#004' : ''
		}
	},
	
	config: {
		requiredClass: 'required',
		failedClass: 'failed',
		responseTarget: 'form_userresponse'
	},
	
	validate: function(formid, callback, params) {
	
		if(this.errors.length > 0) {
			this.resetErrors();
		}
		
		if(params) {
			this.params = params;
		} else {
			this.params = false;
		}
		
		if(callback) {
			this.callback = callback;
		} else {
			this.callback = false;
		}
	
		this.fields = new Array();
		this.errors = new Array();
	
		this.findRequired(formid);
		
		for(i = 0; i< this.fields.length; i++) {
			this.checkValue(i);
		}
				
		return this.send(formid);
		
	},
	
	findRequired: function(formid) {
		
		$('#'+formid+' .'+this.config.requiredClass).each(function() {
			var field = new Object();
				field._self = $(this);
				field.id = $(this).attr('id');
				field.name = $(this).attr('name');
				field.value = $(this).val();
				field.tag = $(this).context.tagName
				field.type = $(this).context.type
				
			form.fields.push(field);
		});
	},
	
	checkValue: function(index) {
	
		if(this.fields[index].value == '') {
			this.errors.push(this.fields[index]._self);
		}
	},
	
	checkmail: function(s) {
		var a = false;
		var res = false;
		
		if(typeof(RegExp) == 'function') {
			var b = new RegExp('abc');
			if(b.test('abc') == true){a = true;}
		}
		
		if(a == true) {
			reg = new RegExp('^([a-zA-Z0-9\\-\\.\\_]+)'+
			                 '(\\@)([a-zA-Z0-9\\-\\.]+)'+
			                 '(\\.)([a-zA-Z]{2,4})$');
			res = (reg.test(s));
		} else {
			res = (s.search('@') >= 1 &&
			       s.lastIndexOf('.') > s.search('@') &&
			       s.lastIndexOf('.') >= s.length-5)
		}
		
		return(res);
	},
	
	markField: function(htmlObject) {
		htmlObject.addClass(this.config.failedClass);
	},
	
	removeMark: function(htmlObject) {
		htmlObject.removeClass(this.config.failedClass);
	},
	
	resetErrors: function() {
		for(i = 0; i<this.errors.length; i++) {
			this.removeMark(this.errors[i]);
		}
	},
	
	resetValues: function(formid) {
		$('#'+formid).find('input:not(#submit)').val('');
		$('#'+formid).find('textarea').val('');
	},
	
	success: function(formid) {
		this.resetValues(formid);
		$('#'+formid).find('.'+this.config.responseTarget).removeClass('error');
		$('#'+formid).find('.'+this.config.responseTarget).addClass('success');
		$('#'+formid).find('.'+this.config.responseTarget).html(
			this.errorcodes[this.lang]['#003']
		);
	},
	
	fail: function(formid) {
		$('#'+formid).find('.'+this.config.responseTarget).removeClass('success');
		$('#'+formid).find('.'+this.config.responseTarget).addClass('error');
		$('#'+formid).find('.'+this.config.responseTarget).html(
			this.errorcodes[this.lang]['#004']
		);
	},
	
	disableSendButton: function() {
		this.disabled = true;
	},
	
	enableSendButton: function() {
		this.disabled = false;
	},
	
	send: function(formid) {
		
		if(this.errors.length > 0) {
			for(i = 0; i<this.errors.length; i++) {
				 this.markField(this.errors[i]);
			}
			
			$('#'+formid).find('.'+this.config.responseTarget).removeClass('success');
			$('#'+formid).find('.'+this.config.responseTarget).addClass('error');
			$('#'+formid).find('.'+this.config.responseTarget).html(
				this.errorcodes[this.lang]['#001']
			);
			
			return false;
				
		} else {			
			//xajax_submitform(xajax.getFormValues(formid));
			if(this.disabled != true) {
				this.disableSendButton();
				
				if(typeof(this.callback) == 'function') {
					this.callback(this.params);
				}
				
				//xajax_sendForm(xajax.getFormValues(formid));			
				return true;
			}
		}
	}
}
