var MWFormular = {
	checkFields: null,
	baseMsg: '',

	setup: function (msg, fields) {
		this.checkFields = fields;
		this.baseMsg = msg;
	},

	formValidate: function () {
		var res = this.formValidateValuesSubmit(this.baseMsg, this.checkFields);
		return res;
	},

	validateDate: function (dateString) {
		var dateValues = this.dateStringToNumberArray(dateString);
		if (!dateValues) return false;

		if ((dateValues[0] < 1) || (dateValues[0] > 31)) return false;
		if ((dateValues[1] < 1) || (dateValues[1] > 12)) return false;
		if ((dateValues[2] < 1970) || (dateValues[2] > 2069)) return false;

		return true;
	},

	dateStringToNumberArray: function (dateString) {
		var dateStrings = dateString.split('.');
		if (dateStrings.length != 3) return false;

		var dateValues = new Array();
		for (var i = 0; i < 3; i++) {
			dateValues[i] = Number(dateStrings[i])
			if (isNaN(dateValues[i])) return false;
		}

		// basic 2 digit year conversion (00 - 69 = 19xx, 70 - 99 = 20xx) like MySQL do ;-)
		if ((dateValues[2] >= 70) && (dateValues[2] <= 99)) dateValues[2] += 1900;
		if ((dateValues[2] >= 0) && (dateValues[2] <= 69)) dateValues[2] += 2000;

		return dateValues;
	},

	validateTime: function (timeString) {
		var regEx = /^([0-9]{1}|[0-2]{1}[0-9]{1}):[0-5]{1}[0-9]{1}$/;
		var checkRes = timeString.match(regEx)

		return checkRes;
	},

	validateEmail: function (testString) {
		var regEx = /^([\w]+)(.[\w]+)*@([\w\.\-]+)(\.[\w]{2,3}){1}$/;
		var checkRes = testString.match(regEx)

		return checkRes;
	},

	validateUrl: function (testString) {
		var regEx = /^(http:\/\/|https:\/\/|ftp:\/\/){1}([\w\.\-]+)(\.[\w]{2,3}){1}$/;
		var checkRes = testString.match(regEx)

		return checkRes;
	},

	validateInteger: function (testString) {
		var regEx = /^[0-9]+$/;
		var checkRes = testString.match(regEx)

		return checkRes;
	},

	validateNumber: function (testString) {
		var regEx = /^[0-9]+,{0,1}[0-9]+$/;
		var checkRes = testString.match(regEx)

		return checkRes;
	},

	trimString: function (s) {
		var reFirst = /^\s/;
		var reLast = /\s$/;
		var e;

		// trim leading whitespace
		e = s.match(reFirst);
		while (e) {
			s = s.replace(reFirst, '');
			e = s.match(reFirst);
		}

		// trim trailing whitespace
		e = s.match(reLast);
		while (e) {
			s = s.replace(reLast, '');
			e = s.match(reLast);
		}

		return s;
	},

	trimStrings: function (a) {
		for (var i = 0; i < a.length; i++) {
			a[i] = this.trimString(a[i]);
		}

		return a;
	},

	formValidateValuesSubmit: function (baseMsg, fieldsArray) {
		var validateRes = true;
		var fieldId, fieldType, fieldMsg;
		var alertMsg = '';
		var t, f, v;

		for (var i = 0; i < fieldsArray.length; i++) {
			t = fieldsArray[i].split('|');
			fieldId = this.trimString(t[0]);
			fieldType = this.trimString(t[1]);
			fieldMsg = this.trimString(t[2]);

			f = document.getElementById(fieldId);
			v = (f) ? this.trimString(f.value) : false;

			switch (fieldType) {
			case 'text':
				if (v == '') {
					alertMsg = alertMsg + fieldMsg + "\n";
					validateRes = false;
				}
				break;
			case 'int':
				if (!this.validateInteger(v)) {
					alertMsg = alertMsg + fieldMsg + "\n";
					validateRes = false;
				}
				break;
			case 'float':
				if (!this.validateNumber(v)) {
					alertMsg = alertMsg + fieldMsg + "\n";
					validateRes = false;
				}
				break;
			case 'email':
				if (!this.validateEmail(v)) {
					alertMsg = alertMsg + fieldMsg + "\n";
					validateRes = false;
				}
				break;
			case 'url':
				if (!this.validateUrl(v)) {
					alertMsg = alertMsg + fieldMsg + "\n";
					validateRes = false;
				}
				break;
			case 'select':
				if (f.options[0].selected) {
					alertMsg = alertMsg + fieldMsg + "\n";
					validateRes = false;
				}
				break;
			case 'checkarray':
				var formElements = document.forms['mw_formular'].elements;
				var oneChecked = false;
				elementsLoop: for (var o = 0; o < formElements.length; o++) {
					if (formElements[o].name == fieldId) {
						if (formElements[o].checked) {
							oneChecked = true;
							break elementsLoop;
						}
					}
				}
				if (!oneChecked) {
					alertMsg = alertMsg + fieldMsg + "\n";
					validateRes = false;
				}
				break;
			}
		}

		if (!validateRes) {
			alert(baseMsg + "\n" + alertMsg);
		}

		return validateRes;
	}
}

