// pole przechowuj±ce obiekt który ma otrzymać focus po potwierdzeniu komunikatu
var objFieldFocus = null;

			
					
function isValidForm(formObj) {
	// reset pola
	objFieldFocus = null;

	// przepisanie danych z iframe edytorka do textarea
	updateEditorLinkedFields();
	
	// podstawowe, zbiorcze i zawsze sprawdzane na poczatku validatory
	var RequiredFieldValidatorMessage = "";
	for (i=0; i<fieldName.length; i++) {
		switch (fieldType[i]) {

			case "RequiredFieldValidator":
				obj = findObj(fieldName[i]);
				value = getFieldValue(obj);
				if (value == "") {
					RequiredFieldValidatorMessage += fieldTitle[i] + "<br>";
					setFieldErrorClass(obj, i);
					setFieldFocus(obj, i);
				} else {
					setFieldErrorClass(obj, i, true);
				}
			break;

			case "ArrayRequiredFieldValidator":
				value = "";
				for (a=0; a<fieldFormat[i]; a++) {
					obj = findObj(fieldName[i]+"["+a+"]");
					value += getFieldValue(obj);
				}
				if (value == "") {
					RequiredFieldValidatorMessage += fieldTitle[i] + "<br>";
				}
			break;

			default:
			break;

		}
	}
	if (RequiredFieldValidatorMessage.length != 0) {
		showMessageBox(RequiredFieldValidatorHeader[0], RequiredFieldValidatorHeader[1] + RequiredFieldValidatorMessage, 'alert', '', 'setFieldFocus(objFieldFocus)');
		return false;
	}	
	
	// pozostałe validatory (kolejno¶ć wg wprowadzania)
	for (var i = 0; i < fieldName.length; i++) {
		switch (fieldType[i]) {

			case "CompareValidator":
				obj1 = findObj(fieldName[i]);
				value1 = getFieldValue(obj1);
				obj2 = findObj(fieldToCompareName[i]);
				value2 = getFieldValue(obj2);

				if (!(eval("value1 " + fieldFormat[i] + " value2"))) {
					setFieldErrorClass(obj1, i);
					setFieldErrorClass(obj2, i);
					clearFieldValue(obj2, i);
					setFieldFocus(obj2, i);
					showMessageBox(fieldTitle[i], fieldSubTitle[i], 'alert', '', 'setFieldFocus(objFieldFocus)');
					return false;
				} else {
					setFieldErrorClass(obj1, i, true);
					setFieldErrorClass(obj2, i, true);
				}
			break;

			case "RangeValidator":
				obj = findObj(fieldName[i]);
				value = getFieldValue(obj);
				RangeValidator = 0;

				switch (fieldFormat[i]) {
					case "int":
					case "integer":
						value = value.replace(',', '.');
						value = parseInt(value, 10);
						if (fieldParam1[i] && fieldParam2[i] && (value < parseInt(fieldParam1[i]) || value > parseInt(fieldParam2[i]))) {
							RangeValidator = 1;
						} else if (fieldParam1[i] && !fieldParam2[i] && value < parseInt(fieldParam1[i])) {
							RangeValidator = 1;
						} else if (!fieldParam1[i] && fieldParam2[i] && value > parseInt(fieldParam2[i])) {
							RangeValidator = 1;
						}
					break;
					
					case "float":
						value = value.replace(',', '.');
						value = parseFloat(value, 10);
						if (fieldParam1[i] && fieldParam2[i] && (value < parseFloat(fieldParam1[i]) || value > parseFloat(fieldParam2[i]))) {
							RangeValidator = 1;
						} else if (fieldParam1[i] && !fieldParam2[i] && value < parseFloat(fieldParam1[i])) {
							RangeValidator = 1;
						} else if (!fieldParam1[i] && fieldParam2[i] && value > parseFloat(fieldParam2[i])) {
							RangeValidator = 1;
						}
					break;
					
					case "string":
						if (fieldParam1[i] && fieldParam2[i] && (value < fieldParam1[i] || value > fieldParam2[i])) {
							RangeValidator = 1;
						} else if (fieldParam1[i] && !fieldParam2[i] && value < fieldParam1[i]) {
							RangeValidator = 1;
						} else if (!fieldParam1[i] && fieldParam2[i] && value > fieldParam2[i]) {
							RangeValidator = 1;
						}
					break;

					case "date":
						value = getPLDate(value);
						if (fieldParam1[i] && fieldParam2[i] && (value < getPLDate(fieldParam1[i]) || value > getPLDate(fieldParam2[i]))) {
							RangeValidator = 1;
						} else if (fieldParam1[i] && !fieldParam2[i] && value < getPLDate(fieldParam1[i])) {
							RangeValidator = 1;
						} else if (!fieldParam1[i] && fieldParam2[i] && value > getPLDate(fieldParam2[i])) {
							RangeValidator = 1;
						}
					break;

					default:
					break;
				}				

				if (RangeValidator) {
					setFieldErrorClass(obj, i);
					clearFieldValue(obj, i);
					setFieldFocus(obj, i);
					showMessageBox(fieldTitle[i], fieldSubTitle[i], 'alert', '', 'setFieldFocus(objFieldFocus)');
					return false;
				} else {
					setFieldErrorClass(obj, i, true);
				}
			break;

			case "RegularExpressionValidator":
				obj = findObj(fieldName[i]);
				value = getFieldValue(obj);
				RegularExpressionValidator = 0;

				switch (fieldFormat[i]) {
					case "int":
					case "integer":
						exp = /^\s*[-\+]?\d+\s*$/;
						if(value != '')
						{
							if (value.match(exp) == null) {
								RegularExpressionValidator = 1;
							}
							value = parseInt(value, 10);
							if (isNaN(value)) {
								RegularExpressionValidator = 1;
							}
						}
					break;

	
					case "float":
						/*
						value = value.replace(',', '.');
						exp = /^[\.0-9]{1,9}/;
						if (value.match(exp) == null) {
							RegularExpressionValidator = 1;
						}
						value = parseFloat(value);
						if (isNaN(value)) {
							RegularExpressionValidator = 1;
						}
						*/
						value = value.replace(',', '.');
						exp = new RegExp("^\\s*([-\\+])?(\\d+)?(\\.(\\d+))?\\s*$");
						m = value.match(exp);
						if (m == null) {
							RegularExpressionValidator = 1;
						} else {
							cleanInput = (m[1] != undefined ? m[1] : "") + (m[2].length>0 ? m[2] : "0") + "." + m[4];
							num = parseFloat(cleanInput);
							if ((isNaN(num) ? null : num) == null) {
								RegularExpressionValidator = 1;
							}     
						}
					break;
					

					case "date":
						exp = /^\d{2}-\d{2}-\d{4}$/;
						if (value.match(exp) == null) {
							RegularExpressionValidator = 1;
						}
					break;

					default:
						exp = eval(fieldFormat[i]);
						if (value.match(exp) == null) {
							RegularExpressionValidator = 1;
						}
					break;
				}

				if (RegularExpressionValidator) {
					setFieldErrorClass(obj, i);
					clearFieldValue(obj, i);
					setFieldFocus(obj, i);
					showMessageBox(fieldTitle[i], fieldSubTitle[i], 'alert', '', 'setFieldFocus(objFieldFocus)');
					return false;
				} else {
					setFieldErrorClass(obj, i, true);
				}
			break;

			case "CustomValidator":
				if (fieldParam1[i]) {
					return eval(fieldParam1[i]);
				}
			break;

			default:
			break;

		}
	}

	// domy¶lna akcja
	return true;

}

function getFieldValue(obj) {
	value = "";
	if (obj) {
		switch (obj.type) {
			case "select-one":
			case "select-multiple":
				if (obj.selectedIndex != -1 || obj.options[obj.selectedIndex].value != "") {
					value = obj.options[obj.selectedIndex].value;
				}
			break;
			case "hidden":
			case "text":
			case "textarea":
				if (obj.value != "" || obj.value != null) {
					value = obj.value;
				}
			break;
			case "checkbox":
				if (obj.checked) {
					value = obj.value;
				}
			break;
			default:
			break;
		}
	}
	return value;
}

// resetuje warto¶ć elementu
function clearFieldValue(obj, i) {
	if (obj && fieldReset[i]) {
		switch (obj.type) {
			case "select-one":
			case "select-multiple":
				obj.selectedIndex = -1;
			break;
			case "text":
			case "textarea":
				obj.value = "";
			break;
			case "checkbox":
				obj.checked = false;
			break;
			default:
			break;
		}
	}
}

// ustawia lub czy¶ci styl elementu
function setFieldErrorClass(obj, i, clearClass) {
	if (!clearClass && obj && fieldErrorClass[i]) {
		obj.className = fieldErrorClass[i];
	} else if (clearClass) {
		obj.className = "";
	}
}

// ustawia focus na elemencie, wersja dla validatora oraz MessageBox'a
function setFieldFocus(obj, i) {
	if (obj && fieldFocus[i] && !objFieldFocus) {
		objFieldFocus = obj;
	} else if (obj && !i) {
		try {
			obj.focus();
		} catch(e) {
		}
	}
}

// zwraca datę na podstawie podanego ci±gu znaków
function getPLDate(data) {
	return new Date(data.substring(10,6),data.substring(5,3)-1,data.substring(2,0));
}

// przepisuje wartosc z iframe edytora do textarea
function updateEditorLinkedFields() {
	for (var x=0; x<window.frames.length; x++) {
		if (typeof(window.frames[x].FCK) != 'undefined')
			window.frames[x].FCK.UpdateLinkedField();
	}
}