/* Revision: $Id: forms.js 4527 2009-04-20 21:08:20Z uri $ */

function formIsNumeric(str) {
	var digits = '0123456789';
	for (i = 0; i < str.length; i++) {
		currentChar = str.charAt(i);
		if (digits.indexOf(currentChar) == -1) {
			return false;
		}
	}

	return true;
}

function formEnforceNumber(event, element) {
	if (event.which) {
		return formIsNumeric(String.fromCharCode(event.which));
	} else {
		return formIsNumeric(String.fromCharCode(event.keyCode));
	}
}

function formValidateDateDay(element) {
	var re = new RegExp("^([012]?[0-9]|3[01]|)$");
	if (!re.test(element.value)) {
		element.focus();
		element.className = 'FormInvalidValue';
		return false;
	}

	element.className = "TextInput";
	return true;
}

function formValidateDateMonth(element) {
	var re = new RegExp("^(0?[1-9]|1[012]|)$");
	if (!re.test(element.value)) {
		element.focus();
		element.className = 'FormInvalidValue';
		return false;
	}

	element.className = "TextInput";
	return true;
}

function formValidateDateYear(element) {
	var re = new RegExp("^(1[89][0-9]{2}|20[0-9]{2}|)$");
	if (!re.test(element.value)) {
		element.focus();
		element.className = 'FormInvalidValue';
		return false;
	}

	element.className = "TextInput";
	return true;
}

function pimpFormValidate(formObj, mandatoryFields) {
	var hadError = false;
	for (var i = 0; i < mandatoryFields.length; i++) {
		var fieldObj = formObj[mandatoryFields[i]];
		if (fieldObj.value.trim().length == 0) {
			if (!hadError) {
				fieldObj.focus();
			}
			fieldObj.className = "Error";
			hadError = true;
			var nextObj = fieldObj.nextSibling;
			if (!nextObj || !nextObj.className || nextObj.className != "ErrorIcon") {
				nextObj = document.createElement("SPAN");
				nextObj.className = "ErrorIcon";
				nextObj.title = "שדה זה אינו יכול להיות ריק";
				fieldObj.parentNode.insertBefore(nextObj, fieldObj.nextSibling);
				fieldObj.onchange = function() {
					if (this.value.trim().length > 0) {
						if (this.nextSibling && this.nextSibling.className == "ErrorIcon") {
							this.parentNode.removeChild(this.nextSibling);
							this.className = "";
						}
					}
				}
			}
		}
	}
	if (hadError) {
		alert("לא ניתן לשלוח את הטופס: עליך למלא את כל השדות המסומנים");
		return false;
	}
	
	return true;
}

function pimpFormObjectPickerCallback(docElement, selectedObjectId, prefix, level) {
	if (docElement.childNodes.length == 0) {
		return; /* No child elements */
	}
	var newSelect = document.createElement("SELECT");
	var prevSelect = document.getElementById(prefix + "_sel" + level);
	newSelect.id = prefix + "_sel" + (level + 1);
	prevSelect.parentNode.insertBefore(newSelect, prevSelect.nextSibling);
	newSelect.options[0] = new Option("", selectedObjectId, false, false);
	for (var i = 0; i < docElement.childNodes.length; i++) {
		var childNode = docElement.childNodes[i];
		if (childNode.nodeType == 1) {
			var optionText = pimpXmlInnerText(childNode);
			if (!optionText) {
				optionText = "(ללא שם)";
			}
			var newOption = new Option(optionText, childNode.getAttribute("id"), false, false);
			newSelect.options[newSelect.options.length] = newOption;
		}
	}
	newSelect.onchange = function () {
		pimpFormSelectObject(newSelect, level + 1);
	}
}

function pimpFormSelectObject(obj, level) {
	var prefixIndex = obj.id.lastIndexOf('_');
	var prefix = obj.id.substr(0, prefixIndex);
	var currentLevel = level + 1;
	var subSelect = null;
	document.getElementById(prefix + '_input').value = obj.value;
	do {
		subSelect = document.getElementById(prefix + "_sel" + (currentLevel));
		if (subSelect) {
			subSelect.parentNode.removeChild(subSelect);
			currentLevel += 1;
		}
	} while (subSelect);
	if (obj.selectedIndex == 0) {
		return;
	}
	pimpAjax("ObjectPicker/" + obj.value,
		function(xmlDoc) {
			pimpFormObjectPickerCallback(xmlDoc, obj.value, prefix, level);
		});
}

var g_pimpFormSubmitted = false;

function pimpFormOnSubmit(form) {
	if (g_pimpFormSubmitted) {
		return false;
	}
	
	var inputs = form.getElementsByTagName("input");
	for (var i = 0; i < inputs.length; i++) {
		if (inputs[i].type.toLowerCase() == "submit") {
			inputs[i].disabled = true;
		}
	}
	
	g_pimpFormSubmitted = true;
	return true;
}
