var validate = new Object({
	inputs: new Array(),
	addInput: function(name,title,options) {
		var temp = {name: name,title: title,options: options};
		this.inputs.push(temp);
	},
	init: function(formId,_style,_class) {
		if (typeof formId == 'undefined') var formId = 'REX_FORM';		
		if (typeof _style=='undefined') var _style = 'style="color: red; padding: 5px; background-color: #dddddd;"'; else _style='style="'+_style+'"';
		if (typeof _class=='undefined') var _class= ''; else _class='class="'+_class+'"';
		
		this.form = $('#'+formId);
		this.form_action = this.form.attr('action');
		this.form.submit(function(){if (validate.checkform()) return true; else return false;});
		this.form.append('<div '+_style+' '+_class+' id="validate_msg"></div>');
		this.msg_container = $('#validate_msg');
	},
	clearMessages: function() {
		this.msg_container.empty();
	},
	insertMessage: function(msg) {
		this.msg_container.append(msg+'<br/>');
	},
	checkform: function() {
		try {
			tinyMCE.triggerSave();
		} catch (e) {}
		
		this.clearMessages();
		var valid = true;
		for(i=0; i<this.inputs.length; i++){
			var msg = "";
			var input = this.inputs[i];
			var element = $('*[name="'+input.name+'"]');
			var elValue = element.val();
			var elDisabled = element.attr('disabled');
			
			if (input.options.required && elValue=="" && !elDisabled) msg+="Dieses Feld darf nicht frei bleiben.";
			
			if (elValue!="" && !elDisabled) {
				switch(input.options.type) {
					case 'text': break;
					case 'number': if (!this.isNumber(elValue,input.options.min,input.options.max)) msg+="Bitte geben Sie eine Zahl ein."; break;
					case 'date': if (!this.isDate(elValue)) msg+="Bitte geben Sie ein gültiges Datum ein."; break;
					case 'email': if (!this.isEmail(elValue)) msg+="Bitte geben Sie ein gültige E-Mail-Adresse ein."; break;
					case 'radio': if (elValue=="") msg+="Bitte wählen Sie ein Option aus."; break;
					case 'time': if (!this.isTime(elValue)) msg+="Bitte geben Sie eine gültige Zeit ein."; break;
				}
			}
			
			if (msg!="") {
				this.insertMessage(input.title+': '+msg);
				valid = false;
			}
		}
		return valid;	
	},
	isDate: function(value) {
		// Datum im Format tt.mm.jjjj //
		var parts = value.split('.');
		if (parts.length==3) {
			if (parts[0].length==2 && parts[1].length==2 && parts[2].length==4 && validate.isNumber(parts[0],1,31) && validate.isNumber(parts[1],1,12) && validate.isNumber(parts[2],1000,9999)) {
				return true;
			} else return false;  
		} else return false;
	},
	isTime: function(value) {
		// Zeit im Format hh.mm //
		var parts = value.split('.');
		if (parts.length==2) {
			if (parts[0].length==2 && parts[1].length==2 && validate.isNumber(parts[0],0,23) && validate.isNumber(parts[1],0,59)) {
				return true;
			} else return false;  
		} else return false;
	},
	isNumber: function(str,min,max) {
	  for(var position=0; position<str.length; position++){
		var chr = str.charAt(position)
	        if  ( (chr < "0") || (chr > "9") ) 
	              return false;
	  }  
	  var n = Number(str);
	  if (n>=min && n<=max) return true; else return false;
	},
	isEmail: 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);
	}
});
