/**
 * @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
		],
		
		formValidationClass: "insymaFormValidation",
		validationTag: "strong",
		validationTagClass: "validation",
		validationFalseClass: "notvalid",
		
		ThanksUrlVar: "thanks",
		ThanksContainerId: "thanks",
		hideClass: "hide"
	},
	init:function() {
		var formConfig = insymaFormValidation.config;
		var formContainer = insymaUtil.elmByClass("div", formConfig.formValidationClass);
		//var forms = insymaUtil.elmByClass("form", formConfig.formValidationClass);
		for (var i = 0; i < formContainer.length; i++) {
			var conForm = formContainer[i].getElementsByTagName("form")[0];
			//forms[i].onsubmit = function() {
			if (typeof(conForm) != 'undefined' && conForm != null) {
				conForm.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);
