/*
COPYRIGHT
dieser Code unterliegt dem Copyright der Kap Dion - Gesellschaft für Bankensoftware GmbH, Wien.
Sie dürfen ihn unter Beibehaltung dieses Copyright-Hinweises frei verwenden, anpassen und weiterentwickeln,
wenn Sie an geeigneter Stelle Ihrer Homepage auf unsere Webseite www.kapdion.com verlinken.


INPUT VALIDATION PACKAGE
uses Numeric Format Package

handles errors on forms


*/

function setFocus(elementName) {
	// wenn elementName keinen . mehr enthält nochmals mit notation document.formular.elementName.focus() probieren
	//document.getElementsByName(elementName)[0].value="";
	//document.getElementsByName(elementName)[0].focus();
	//document.getElementsByName(elementName)[0].select();
}

function displayErrorMessage(elementName,condition,CondNo){
	if (dataElement[elementName]==null) {
		// element does not exist, no display 
	} else {
		if (( condition["isAlert"]==null)||( condition["isAlert"]==false)) {
			// until now no alert displayed
			var newLine = createErrorLine(elementName);
			newLine.setAttribute("id",(elementName+"CondNo"+CondNo));
			var newCell = newLine.insertCell(0);
			newCell.setAttribute("colSpan",numberColumnsInputTable);
			var text = document.createTextNode(condition["message"]);
			newCell.style.color = messageColor[condition["severity"].toLowerCase()];
			newCell.appendChild(text);
			if (condition["severity"].toLowerCase()=="stop") {
				setFocus(elementName);
			}
		} else {
			// there is already an existing error message
			var errorCell = document.getElementById((elementName+"CondNo"+CondNo)).firstChild;
			
			var text = document.createTextNode(condition["message"]);
			errorCell.style.color = messageColor[condition["severity"].toLowerCase()];
			var replaced = errorCell.replaceChild(text,errorCell.firstChild);
			if (condition["severity"].toLowerCase()=="stop") {
				setFocus(elementName);
			}
		}
		condition["isAlert"]=true;
	}
}

function removeErrorMessage(elementName,condition,CondNo){
	// removes an error message, if one exists
	// alert(elementName+"="+dataElement[elementName]["type"]);
	if (dataElement[elementName]==null) {
		//alert("Element does not exist, do nothing!");
	} else {
		if (( condition["isAlert"]==null)||( condition["isAlert"]==false)) {
			//alert("No errormessage exists, which could be removed!");
		} else {
			//alert("look for element "+(elementName+"CondNo"+CondNo));
			var inputLine = document.getElementById((elementName+"CondNo"+CondNo));
			var lineNo = inputLine.rowIndex;
			//alert(inputLine.parentNode.nodeName);
			inputLine.parentNode.deleteRow((lineNo));
			condition["isAlert"]=false;
		}
	}
}




function checkContent(elementName) {
	if ((document.getElementsByName(elementName)[0]!=null)&&(dataElement[elementName]["type"].toLowerCase()!="string")) {
		// only existing and numeric inputfields  should be checked 
		var elementString="";
		//alert(elementName);
		
		elementString = document.getElementsByName(elementName)[0].value;
		//alert(elementName+"="+elementString);
		//elementString = document.input.elementName.value;
		var numericContent = 0;
		numericContent = parseToJavascriptVariable(elementString,numFormat[dataElement[elementName]["type"]],localization);
		//alert("numericContent="+numericContent);
		
		// test conditions
		var atLeastOneConditionIsMet = false;
		if (dataElement[elementName]["condition"]) {
			// there are conditons
			for(var no = 0; no < dataElement[elementName]["condition"].length; no++) {
				// go them through one by one
			 	//alert("condition="+no);
				var conditionIsMet = false;
				var isNotIgnored = (!((numericContent==0)&&(dataElement[elementName]["ignoreZero"])));
					//value is not an ignored zero
				switch(dataElement[elementName]["condition"][no]["type"]) {
 						case "*":
 							conditionIsMet = true;
 							break;
 						case ">=":
							if (isNotIgnored &&(numericContent >= dataElement[elementName]["condition"][no]["value"])) conditionIsMet = true;
 							break;
 						case "<":
 							if (isNotIgnored &&(numericContent < dataElement[elementName]["condition"][no]["value"])) conditionIsMet = true;
 							break;
 						case "<=":
 							if (isNotIgnored &&(numericContent <= dataElement[elementName]["condition"][no]["value"])) conditionIsMet = true;
 							break; 						
 						case "=":
 							if (isNotIgnored &&(numericContent == dataElement[elementName]["condition"][no]["value"])) conditionIsMet = true;
 							break;
 						case "==":
 							if (isNotIgnored &&(numericContent == dataElement[elementName]["condition"][no]["value"])) conditionIsMet = true;
 							break;
 						case "!=":
 							if (isNotIgnored &&(numericContent != dataElement[elementName]["condition"][no]["value"])) conditionIsMet = true;
 							break;
 						case "<":
 							if (isNotIgnored &&(numericContent < dataElement[elementName]["condition"][no]["value"])) conditionIsMet = true;
 							break;
 						default:
 							// default is ">" interpetation
 							if (isNotIgnored &&(numericContent > dataElement[elementName]["condition"][no]["value"])) conditionIsMet = true;
 						break;
					
				}	
				if (conditionIsMet) {
					displayErrorMessage(elementName,dataElement[elementName]["condition"][no],no);
					atLeastOneConditionIsMet = true;
				} else {
					//alert("Condition is not met, remove message!");
					removeErrorMessage(elementName,dataElement[elementName]["condition"][no],no);
				}
			}  // for conditions
		}
		if (! atLeastOneConditionIsMet) {
			// no messages at all
			//alert("no messages at all: "+numericContent);
			elementString = toNumericFormat(numericContent,numFormat[dataElement[elementName]["type"]],localization);
			//alert("new local form="+elementString);
			document.getElementsByName(elementName)[0].value= elementString;
			//alert("Update content");
		}		
	}
}

function checkInput(elementName){
	//alert(elementName);	
	if (checkInput.arguments.length == 1) {
		
		// wenn eine Variable übergeben wird, prüfe ob ein Element dieses Namens existiert, 
		// sonst prüfe alle der Reihe nach
		if ((dataElement[elementName] == null)||(document.getElementsByName(elementName)[0]==null)) {
		
				//alert(" element "+ elementName + " has no UI data or does not exist at all.");
			
				for (var element in dataElement) {
					checkContent(element);
			 }
		} else {
			//alert(" UI data for element " + elementName +" exists , test this element");
			checkContent(elementName);
		}
	} else {
		//alert(" zero or more than one argument ");
		// wenn keine oder mehrere Variablen übergeben werden, überprüfe alle Elemente der Reihe nach
		for (var element in dataElement) {
			checkContent(element);
		}
	}
}	

function isError(element) {
		var isError = false;
		i = 0;
		while (( dataElement[element]["condition"][i] != null)&&(i<100)) {
			//alert(element+ " " + dataElement[element]["condition"][i]["isAlert"] + ", " + dataElement[element]["condition"][i]["severity"]);
			if (( dataElement[element]["condition"][i]["isAlert"]!=null)&&( dataElement[element]["condition"][i]["isAlert"]==true) &&( dataElement[element]["condition"][i]["severity"].toUpperCase()=="STOP")) {
				isError = true;
			}
			i++;
		}
		return isError;
}

function isSubmitable() {
	// returns true, if not error message of severity type "stop" is on
	var isSubmitable = true;
	for (var element in dataElement) {
		if (isError(element)) { isSubmitable =  false; }
	}
	return isSubmitable;
}
		
