// ----------------------------------------------------------------------------------
// metody pozwalające na wpisywanie do komponentu formularza
// pod warunkiem że ...

// dla text field (sprawdza checkbox)
function checkLockWithCheckbox(formName, checkBoxName, componentName) {
	checkBox = document.forms[formName][checkBoxName];
	component = document.forms[formName][componentName];
	if(!checkBox.checked) {
		component.blur();  
		checkBox.focus(); 
	}
}

// dla text field (sprawdza combobox)
function checkLockWithCombobox1(formName, comboBoxName, accessValue, componentName) {
	comboBox = document.forms[formName][comboBoxName];
	component = document.forms[formName][componentName];
	if(!(comboBox.options[comboBox.selectedIndex].text == accessValue )) {
		component.blur();  
		comboBox.focus(); 
	}
}

// dla text field (sprawdza combobox - wiele wartości)
function checkLockWithCombobox3(formName, comboBoxName, accessValue, componentName) {
	comboBox = document.forms[formName][comboBoxName];
	component = document.forms[formName][componentName];
	access = false;
	for (i = 0; i < accessValue.length; i++)
		if(comboBox.options[comboBox.selectedIndex].text == accessValue[i]) access = true;
	if (access == false) {
		component.blur();  
		comboBox.focus(); 
	}
}

// dla combobox (sprawdza combobox)
function checkLockWithCombobox2(formName, comboBoxName, accessValue, componentName) {
	comboBox = document.forms[formName][comboBoxName];
	component = document.forms[formName][componentName];
	if(!(comboBox.options[comboBox.selectedIndex].text == accessValue )) {
		component.blur();  
		comboBox.focus(); 
		for(i = 0 ;i < component.options.length; i++) component.options[i].selected = false;
		component.options.selectedIndex = -1;
	}
}

// ----------------------------------------------------------------------------------
// metody czyszczące elementy formularza pod warunkiem że ...

// czyści pole tekstowe (sprawdza checkbox)
function clearFieldWithCheck1(formName, checkBoxName, componentName) {
	checkBox = document.forms[formName][checkBoxName];
	component = document.forms[formName][componentName];
	if(!checkBox.checked) {
		component.value = "";  
	}
}

// czyści pole tekstowe (sprawdza combobox)
function clearFieldWithCheck2(formName, comboBoxName, correctValue, componentName) {
	comboBox = document.forms[formName][comboBoxName];
	component = document.forms[formName][componentName];
	if(!(comboBox.options[comboBox.selectedIndex].text == correctValue )) {
		component.value = "";  
	}
}

// czyści pole tekstowe (sprawdza combobox dla kilku wartości)
function clearFieldWithCheck3(formName, comboBoxName, correctValue, componentName) {
	comboBox = document.forms[formName][comboBoxName];
	component = document.forms[formName][componentName];
	clear = true;
	for (i = 0; i < correctValue.length; i++)
		if(comboBox.options[comboBox.selectedIndex].text == correctValue[i]) clear = false;
	if (clear == true) component.value = "";  
}

// czyści combobox (sprawdza combobox)
function clearComboBoxWithCheck1(formName, comboBoxName, correctValue, componentName) {
	comboBox = document.forms[formName][comboBoxName];
	component = document.forms[formName][componentName];
	if(!(comboBox.options[comboBox.selectedIndex].text == correctValue )) {
		for(i = 0 ;i < component.options.length; i++) component.options[i].selected = false;  
	}
}

// ----------------------------------------------------------------------------------
// metody kopiujące zawartość jednego pola do drugiego

// kopiuje zawartość pola źródło do pola przeznaczenie w zależności od ustawionego checkbox-u
function copyContentWithCheck(formName, checkBoxName, sourceComponent, destComponent) {
	source = document.forms[formName][sourceComponent];
	dest = document.forms[formName][destComponent];
	checkBox = document.forms[formName][checkBoxName];
	if(checkBox.checked) {
		dest.value = source.value;
	}
}

// kopiuje zawartość pola źródło do pola przeznaczenie
function copyContent(formName, sourceComponent, destComponent) {
	source = document.forms[formName][sourceComponent];
	dest = document.forms[formName][destComponent];
	if (dest != null) dest.value = source.value;
}

// ----------------------------------------------------------------------------------
// metody sprawdzające poprawność zawartości pól

// sprawdza pola w zależności od typu i ustawień flagi "wymagane"
function validateField(formName, fieldName, fieldLabel, fieldType, required) {
	allElements = document.forms[formName].elements;
	for(j = 0; j < allElements.length; j++) {
		oneEl = allElements[j];
		if (oneEl.name == fieldName) {
			field = oneEl;
			break;
		}
	}
	retVal = true;
	if (fieldType == "txt") {
		if( required == 1 && field.value.length == 0) {
			alert("Pole " + fieldLabel + " jest wymagane."); 
			retVal = false;
		}
	}
	else if (fieldType == "numeric") {
		if( required == 1 && field.value.length == 0) {
			alert("Pole " + fieldLabel + " jest wymagane.");
			retVal = false;
		}
	}
	else if (fieldType == "date") {
		if( required == 1 && field.value.length == 0) {
			alert("Pole " + fieldLabel + " jest wymagane.");
			retVal = false;
		}
	}
	else if (fieldType == "time") {
		if( required == 1 && field.value.length == 0) {
			alert("Pole " + fieldLabel + " jest wymagane.");
			retVal = false;
		}
	}
	else if (fieldType == "list") {
		if( required == 1 && field.selectedIndex == -1) {
			alert("Należy wybrać jakiś element listy " + fieldLabel)
				retVal = false;
		}
	}
	return retVal;
}

// sprawdza pola o type w zależności od ustawień flagi "wymagane" i zawartości combobox-u
function validateFieldWithComboBoxCheck(formName, fieldName, comboBoxName, fieldLabel, fieldType, required, requiredWithValues) {
	comboBox = document.forms[formName][comboBoxName];
	retVal = true;
	requiredValue = false;
	for (i = 0; i < requiredWithValues.length; i++)
		if(comboBox.options[comboBox.selectedIndex].text == requiredWithValues[i]) requiredValue = true;
	if (requiredValue) retVal = validateField(formName, fieldName, fieldLabel, fieldType, required);
	return retVal;
}

// porównuje dwa pola liczbowe
function compareIntField(formName, fieldName1, fieldLabel1, compareSign, fieldName2, fieldLabel2) {
	field1 = document.forms[formName][fieldName1];
	field2 = document.forms[formName][fieldName2];
	if (compareSign == "<" && 
		parseInt(field1.value) < parseInt(field2.value)) return true;
	else
		alert("Wartość pola " + fieldLabel1 + " musi być mniejsza od wartości pola " + fieldLabel2);

	return false;
}

// sprawdza pole w zależności od typu, ustawień flagi "wymagane" oraz stanu checkbox-u
function conditionalValidateField(formName, fieldName, fieldLabel, fieldType, required, checkBoxName) {
	checkBox = document.forms[formName][checkBoxName];
	if (checkBox.checked) return validateField(formName, fieldName, fieldLabel, fieldType, required);
	return true;
}

// porównuje pola liczbowe w zależności od ustawionego checkbox-u
function conditionalCompareIntField(formName, fieldName1, fieldLabel1, compareSign, fieldName2, fieldLabel2,  checkBoxName) {
	checkBox = document.forms[formName][checkBoxName];
	if (checkBox.checked) return compareIntField(formName, fieldName1, fieldLabel1, compareSign, fieldName2, fieldLabel2);
	return true;
}

// sprawdza poprawność wartości pola liczbowego (całkowitego)
function checkIntField(formName, fieldName, fieldLabel, compareSign, value) {
	field = document.forms[formName][fieldName];
	if (compareSign == "<") {
		if (parseInt(field.value) < parseInt(value)) return true;
		else
			alert("Wartość pola " + fieldLabel + " musi być mniejsza niż " + value);
	}
	else if (compareSign == ">") {
		if (parseInt(field.value) > parseInt(value)) return true;
		else
			alert("Wartość pola " + fieldLabel + " musi być większa niż " + value);
	}
	else if (compareSign == ">=" || compareSign == "=>") {
		if (parseInt(field.value) >= parseInt(value)) return true;
		else
			alert("Wartość pola " + fieldLabel + " musi być większa lub równa liczbie " + value);
	}
	else if (compareSign == "<=" || compareSign == "=<") {
		if (parseInt(field.value) <= parseInt(value)) return true;
		else
			alert("Wartość pola " + fieldLabel + " musi być mniejsza lub równa liczbie " + value);
	}

	field.value = "";
	return false;
}

// sprawdza poprawność wartości pola liczbowego (zmiennoprzecikowego)
function checkDoubleField(formName, fieldName, fieldLabel, compareSign, value) {
	field = document.forms[formName][fieldName];
	if (compareSign == "<") {
		if (parseFloat(field.value) < parseDoble(value)) return true;
		else
			alert("Wartość pola " + fieldLabel + " musi być mniejsza niż " + value);
	}
	else if (compareSign == ">") {
		if (parseFloat(field.value) > parseFloat(value)) return true;
		else
			alert("Wartość pola " + fieldLabel + " musi być większa niż " + value);
	}
	else if (compareSign == ">=" || compareSign == "=>") {
		if (parseFloat(field.value) >= parseFloat(value)) return true;
		else
			alert("Wartość pola " + fieldLabel + " musi być większa lub równa liczbie " + value);
	}
	else if (compareSign == "<=" || compareSign == "=<") {
		if (parseFloat(field.value) <= parseFloat(value)) return true;
		else
			alert("Wartość pola " + fieldLabel + " musi być mniejsza lub równa liczbie " + value);
	}

	field.value = "";
	return false;
}

// sprawdza poprawność wartości pola liczbowego (całkowitego) w przedziale
function doubleCheckIntField(formName, fieldName, fieldLabel, compareSign1, value1, compareSign2, value2) {

	retVal = true;
	retVal = checkIntField(formName, fieldName, fieldLabel, compareSign1, value1);
	if (retVal == true)
		retVal = checkIntField(formName, fieldName, fieldLabel, compareSign2, value2);

	return retVal;
}

// sprawdza poprawność wartości pola liczbowego (zmiennoprzecinkowego) w przedziale
function doubleCheckDoubleField(formName, fieldName, fieldLabel, compareSign1, value1, compareSign2, value2) {

	retVal = true;
	retVal = checkDoubleField(formName, fieldName, fieldLabel, compareSign1, value1);
	if (retVal == true)
		retVal = checkDoubleField(formName, fieldName, fieldLabel, compareSign2, value2);

	return retVal;
}

// sprawdza pola w zależności od typu
function validateFieldOnLine(formName, fieldName, fieldType) {
	allElements = document.forms[formName].elements;
	for(j = 0; j < allElements.length; j++) {
		oneEl = allElements[j];
		if (oneEl.name == fieldName) {
			field = oneEl;
			break;
		}
	}
	var tableOfCorrectSign = new Array("1","2","3","4","5","6","7","8","9","0");
	if (fieldType == "price") {
		var coma = false;
		var afterComa = 0;
		var preLength = field.value.length;
		for (i = 0; i < field.value.length; i++) {
			var correct = false;
			for (j = 0; j < tableOfCorrectSign.length; j++)
				if (field.value.charAt(i) == tableOfCorrectSign[j]) correct = true;
			if (field.value.charAt(i) == "," && !coma) {
				correct = true;
				coma = true;
			}
			if (coma && correct) afterComa = afterComa + 1;
			if (!correct) {
				field.value = field.value.substring(0,i) + field.value.substring(i+1, field.value.length);
				i = i - 1;
			}
			if (afterComa == 3) {
				field.value = field.value.substring(0,i + 1);
				break;
			}
		}
		if (preLength > field.value.length) 
			alert("Pole cena zostało zmodyfikowane.\nSprawdź poprawność wprowadzonej ceny.\n" + 
				"Właściwy format 1234,00\nJeśli nie chcesz określić ceny wprowadź wartość 0.");
	}
	if (fieldType == "quantity") {
		var coma = false;
		var afterComa = 0;
		var preLength = field.value.length;
		for (i = 0; i < field.value.length; i++) {
			var correct = false;
			for (j = 0; j < tableOfCorrectSign.length; j++)
				if (field.value.charAt(i) == tableOfCorrectSign[j]) correct = true;
			if (field.value.charAt(i) == "," && !coma) {
				correct = true;
				coma = true;
			}
			if (coma && correct) afterComa = afterComa + 1;
			if (!correct) {
				field.value = field.value.substring(0,i) + field.value.substring(i+1, field.value.length);
				i = i - 1;
			}
			if (afterComa == 4) {
				field.value = field.value.substring(0,i + 1);
				break;
			}
		}
		if (preLength > field.value.length) 
			alert("Pole ilość zostało zmodyfikowane.\nSprawdź poprawność wprowadzonej ilości.\n" + 
				"Właściwy format to 1234,000\n.");
	}
}

// ----------------------------------------------------------------------------------
// inne metody

function selectAllInComboBoxWithCheck1(formName, comboBoxName, accessValue, componentName) {
	comboBox = document.forms[formName][comboBoxName];
	component = document.forms[formName][componentName];
	if(comboBox.options[comboBox.selectedIndex].text == accessValue )
		for(i = 0 ;i < component.options.length; i++) component.options[i].selected = true;  
}

function setHiddenField(formName, fieldName, value) {
	field = document.forms[formName][fieldName];
	field.value = value;
}


function validateCBIfIsSelected(formName, comboBoxName, comboBoxLabel, checkedComboBox, value) {
	comboBox = document.forms[formName][checkedComboBox];
	retVal = true;
	if (comboBox) {
		if(comboBox.options[comboBox.selectedIndex].text == value )
			retVal = validateField(formName, comboBoxName, comboBoxLabel, 'list', 1) ;
	}
	else retVal = validateField(formName, comboBoxName, comboBoxLabel, 'list', 1) ;

	return retVal;
} 

function validateTFIfIsSelected(formName, txtName, txtLabel, checkedComboBox, value) {
	comboBox = document.forms[formName][checkedComboBox];
	retVal = true;
	if (comboBox) {
		if(comboBox.options[comboBox.selectedIndex].text == value )
			retVal = validateField(formName, txtName, txtLabel, 'txt', 1) ;
	}
	else retVal = validateField(formName, txtName, txtLabel, 'txt', 1) ;

	return retVal;
} 

/**
 * Dodane przez apl - sepecyficzna metoda potrzebna dla giełdy
 */
function getSelectedSelectCommaValue(formName, fromSelect) {
	fromObject = document.forms[formName][fromSelect];
	len        = fromObject.length;
	val        = "";
	for (i = 0; i < len; i++) {
		if (fromObject.options[i].selected == true) {
			if (val != "") val += ", ";
			val += fromObject.options[i].value;
		}
	}
	return val;
}

/**
 * Dodane przez apl - sepecyficzna metoda potrzebna dla giełdy
 */
function submitSelectedSelect(formName, fromSelect, toText) {
	toObject = document.forms[formName][toText];
	toObject.value = getSelectedSelectCommaValue(formName, fromSelect);
	return true;
}

