/**
 * @author MURA
 * @copyright insyma AG
 * @projectDescription insyma JavaScript Library FormValidation Module
 * @version 1.0 
 * 
 */
insymaFormValidation = {
	config:{
		// Alle Klassennamen für LI-Tags
		validationClasses: [
			"validate", 		// für normale Validierung
			"validateRadio", 	// für Radiobuttons
			"validateMail", 	// für E-Mail-Feld
			"validateDecimal", 	// für Dezimalzahlen
			"validatePhone", 	// für Telefonnummer
			"validateCurrency",	// für Währung
			"validateDigits", 	// für positive Ganzzahlen
			"validateIntegers" 	// für positive und negative Ganzzahlen
		],
		// Alle Validierungstexte
		validationTexts: [
			"Bitte füllen Sie das Feld [label] aus!",					// für normale Validierung
			"Bitte wählen Sie eines der Felder [label] aus!",			// für Radiobuttons
			"Bitte geben Sie eine korrekte E-Mail an!",					// für E-Mail-Feld
			"Das Feld [label] darf nur aus Dezimalzahlen bestehen!",	// für Dezimalzahlen
			"Bitte geben Sie eine korrekte Nummer an!",					// für Telefonnummer
			"Bitte geben Sie eine korrekte Währung an!",				// für Währung
			"Das Feld [label] darf nur aus positiven Zahlen bestehen!",	// für positive Ganzzahlen
			"Das Feld [label] darf nur aus Zahlen bestehen!"			// für positive und negative Ganzzahlen
		],
		
		validationTag: "strong",
		validationTagClass: "validation",
		validationFalseClass: "notvalid",
		
		ThanksUrlVar: "thanks",
		ThanksContainerId: "thanks",
		hideClass: "hide"
	},
	init:function() {
		var formConfig = insymaFormValidation.config;
		var forms = document.getElementsByTagName("form");
		for (var i = 0; i < forms.length; i++) {
			forms[i].onsubmit = function() {
				var valElms = this.getElementsByTagName("li");
				var valid = true;
				for (var x = 0; x < valElms.length; x++) {
					var valFields = valElms[x].getElementsByTagName("input");
					var valLabel = valElms[x].getElementsByTagName("label")[0];
					var valTags = valElms[x].getElementsByTagName(formConfig.validationTag);
					for (var z = 0; z < valTags.length; z++) {
						if (insymaUtil.cssjs("check", valTags[z], formConfig.validationTagClass)) {
							valElms[x].removeChild(valTags[z]);
						}
					}
					insymaUtil.cssjs("remove", valElms[x], formConfig.validationFalseClass);
					if(valFields.length == 0) {
						continue;
					} else if (valFields.length > 1 && insymaUtil.cssjs("check", valElms[x], formConfig.validationClasses[1])) {
						if (!insymaFormValidation.validateRadio(valFields, valFields.length)) {
							var valText = formConfig.validationTexts[1].replace("[label]", insymaUtil.getText(valLabel));
							insymaUtil.createElm(formConfig.validationTag, {className: formConfig.validationTagClass}, valText, valElms[x]);
							insymaUtil.cssjs("add", valElms[x], formConfig.validationFalseClass);
							valid = false;
						} 
					} else {
						var valField = valFields[0];
						for (var y = 0; y < formConfig.validationClasses.length; y++) {
							if (insymaUtil.cssjs("check", valElms[x], formConfig.validationClasses[y])) {
								if (valField.value == "") {
									var valText = formConfig.validationTexts[0].replace("[label]", insymaUtil.getText(valLabel));
									insymaUtil.createElm(formConfig.validationTag, {className: formConfig.validationTagClass}, valText, valElms[x]);
									insymaUtil.cssjs("add", valElms[x], formConfig.validationFalseClass);
									valid = false;
									break;
								} else {
									var fieldValid = true;
									switch(y) {
										case 2:
											fieldValid = insymaFormValidation.validateEmail(valField);
											break;
										case 3:
											fieldValid = insymaFormValidation.validateDecimal(valField);
											break;
										case 4:
											fieldValid = insymaFormValidation.validatePhone(valField);
											break;
										case 5:
											fieldValid = insymaFormValidation.validateCurrency(valField);
											break;
										case 6:
											fieldValid = insymaFormValidation.validateDigits(valField);
											break;
										case 7:
											fieldValid = insymaFormValidation.validateIntegers(valField);
											break;
									}
									if(!fieldValid) {
										var valText = formConfig.validationTexts[y].replace("[label]", insymaUtil.getText(valLabel));
										insymaUtil.createElm(formConfig.validationTag, {className: formConfig.validationTagClass}, valText, valElms[x]);
										insymaUtil.cssjs("add", valElms[x], formConfig.validationFalseClass);
										valid = false;
									}
									break;
								}
							}
						}
					}
				}
				return valid;
			}
		}
		if (insymaUtil.getQuerystring(insymaFormValidation.config.ThanksUrlVar) != false) {
			var thankMessage = document.getElementById(insymaFormValidation.config.ThanksContainerId)
			try {
				insymaUtil.cssjs("remove", thankMessage, insymaFormValidation.config.hideClass);				
			} catch(e){	
			}
		}
	},
	validateEmail:function(field) {
		if (field.value != ""){
			return(/^([a-zA-Z0-9_\-\&\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/i.test(field.value));
		} else { 
			return true;
		}
	},
	validateDigits:function(field) {
		field.value = field.value.replace(/\s/g, "");
		return(/^\d*$/i.test(field.value));
	},

	validateIntegers:function(field) {
		return(/^[-+]?\d*$/i.test(field.value));
	},

	validateDecimal:function(field) {
		return(/^[-+]?[\d+(\.\d{1,2})?]*$/i.test(field.value));
	},

	validatePhone:function(field) {
		if (field.value != ""){
			field.value = field.value.replace(/[\(\)\.\'\-,]/g, " ");
			return(/^[+]?\d+[\s]?[\d+]?[\s]?[\d+]?[\s]?[\d+]?[\s]?[\d+]?[\s]?[\d+]?[\s]?$/i.test(field.value));
		} else { return(true);}
	},

	validateCurrency:function(field) {
		return(/^[-+]?[\d+(\.\d{0,2})?]*$/i.test(field.value));
	},

	validateRadio:function(field,fieldCount) {
		var isOK = false;
		for (i=0;i<fieldCount;i++){
			if (field[i].checked==true){
				isOK = true;
				break;
			}
		}
		return isOK;
	}
};
insymaUtil.addEvent(window,'load',insymaFormValidation.init,false);
