// имя формы, с которой функции работают по умолчанию
var mainForm="mainStatForm";

/* функции работы с элементами формы */
function doesElementExist(elementName, formName) 
{
	var fn = (formName) ? formName : mainForm;
	var exist=(document.forms[fn].elements[elementName]) ? true : false;
	return exist;
}

function disableChangeElement(elementName, formName) 
{
	var fn = (formName) ? formName : mainForm;
	document.forms[fn].elements[elementName].disabled = true;
}

function enableChangeElement(elementName, formName) 
{
	var fn = (formName) ? formName : mainForm;
	document.forms[fn].elements[elementName].disabled = false;
}

function disableSeveralElems(argv, selectedOptionId, saveVarFields) 
{
	for (i=0; i<argv.length; i++) {
		disableChangeElement(argv[i]);
		setElementProperty(argv[i], 'options(\''+selectedOptionId+'\').selected', true);
		if (saveVarFields) {
		    if (doesElementExist(saveVarFields[i]))
			setElementProperty(saveVarFields[i], 'value', selectedOptionId);
		}
	}	
}

function enableSeveralElems(argv) 
{
	for (i=0; i<argv.length; i++)
		enableChangeElement(argv[i]);
}

function disableAndEnableElemOnChangeSelect(selectName, selectedIndex, disableOnOptions, enableOnOptions, disabledElem, selOptionOnDisableID, selOptionOnEnableID, formName) 
{
	var fn = (formName) ? formName : mainForm;
	selId = getElementProperty(selectName, 'options['+selectedIndex+'].id', fn);
	if (document.forms[fn].elements[disabledElem].disabled) {
		if (searchInArray(enableOnOptions, selId)!=-1) {
			enableChangeElement(disabledElem, fn);
			selectOption(disabledElem, selOptionOnEnableID, fn);
		}	
	}
	else {
		if (searchInArray(disableOnOptions, selId)!=-1) {
			selectOption(disabledElem, selOptionOnDisableID, fn);
			disableChangeElement(disabledElem, fn);
		}	
	}
}

function visibElemsOnChangeSelect(elemName, undisplayOnOptions, displayOnOptions, chElems, chElemsClassNames, formName) 
{
	var fn = (formName) ? formName : mainForm;
	selId = getSelectedOptionId(elemName, fn);
	if (searchInArray(displayOnOptions, selId)!=-1) {
		for (i=0; i<chElems.length; i++) {
			document.getElementById(chElems[i]).className=chElemsClassNames[i];
			if (doesElementExist(chElems[i], fn))
				enableChangeElement(chElems[i], fn);
		}	
		return;
	}
	if (searchInArray(undisplayOnOptions, selId)!=-1) {
		for (i=0; i<chElems.length; i++) {
			document.getElementById(chElems[i]).className=chElemsClassNames[i]+'Invis';
			if (doesElementExist(chElems[i], fn))
				disableChangeElement(chElems[i], fn);
		}	
	}
}

function focusElement(elementName, formName) 
{
	var fn = (formName) ? formName : mainForm;
	document.forms[fn].elements[elementName].focus();
}

function checkboxClear(elementName, formName) {
	var fn = (formName) ? formName : mainForm;
	document.forms[fn].elements[elementName].checked = false;
}

function checkboxSet(elementName, formName) {
	var fn = (formName) ? formName : mainForm;
	document.forms[fn].elements[elementName].checked = true;
}

function checkboxGet(elementName, formName) {
	var fn = (formName) ? formName : mainForm;
	return document.forms[fn].elements[elementName].checked;
}

function getElementValue(elementName, formName) 
{
	var fn = (formName) ? formName : mainForm;
	return document.forms[fn].elements[elementName].value;
}

function setElementValue(elementName, newValue, formName) 
{
	var fn = (formName) ? formName : mainForm;
	document.forms[fn].elements[elementName].value = newValue;
}

function clearInputElementValue(elementName, formName) 
{
	var fn = (formName) ? formName : mainForm;
	document.forms[fn].elements[elementName].value = "";
}

function getElementProperty(elementName, propertyName, formName) 
{
	var fn = (formName) ? formName : mainForm;
	return eval ('document.forms[fn].elements[elementName].'+propertyName);
}

function setElementProperty(elementName, propertyName, propertyValue, formName) 
{
    var fn = (formName) ? formName : mainForm;
    if (document.forms[fn].elements[elementName])
        eval ('document.forms[fn].elements[elementName].'+propertyName+'='+propertyValue);
}

function getSelectedOptionId(elementName, formName) 
{
	var fn = (formName) ? formName : mainForm;
	var selectedInd = getElementProperty(elementName, 'selectedIndex', fn);
	return getElementProperty(elementName, 'options['+selectedInd+'].id', fn);
}

function getSelectedOptionText(elementName, formName) 
{
	var fn = (formName) ? formName : mainForm;
	var selectedInd = getElementProperty(elementName, 'selectedIndex', fn);
	return getElementProperty(elementName, 'options['+selectedInd+'].innerHTML', fn);
}

function selectedOptionIdInsteadText(elementName, formName) 
{
    var fn = (formName) ? formName : mainForm;
    var selectedInd = getElementProperty(elementName, 'selectedIndex', fn);
    var selectedId = getSelectedOptionId(elementName, formName);
    setElementProperty(elementName, 'options['+selectedInd+'].innerHTML', "'"+getSelectedOptionId(elementName, formName)+"'", fn);
}

function selectOption(elementName, optionID, formName) 
{
    var fn = (formName) ? formName : mainForm;
    if (doesElementExist(elementName, fn) && document.forms[fn].elements[elementName].options(optionID))
        setElementProperty(elementName, 'options(\''+optionID+'\').selected', true, fn);
}

function removeItemFromSelect(selectName, index, formName) 
{
	var fn = (formName) ? formName : mainForm;
	document.forms[fn].elements[selectName].options.remove(index);
}

function removeAllFromSelect(selectName, formName) 
{
	var fn = (formName) ? formName : mainForm;
	var length=document.forms[fn].elements[selectName].options.length;
    while (length>0) {
		document.forms[fn].elements[selectName].options.remove(0);
		length=document.forms[fn].elements[selectName].options.length;
	}	
}

function addItemToSelect(selectName, id, text, index, formName, value) 
{
	var fn = (formName) ? formName : mainForm;
	var inValue = (value) ? value : "";
	var insIndex = (index) ? index : document.forms[fn].elements[selectName].options.length;
	newOption = document.createElement("OPTION");
	document.forms[fn].elements[selectName].options.add(newOption, insIndex);
	document.forms[fn].elements[selectName].options[insIndex].id=id;
	document.forms[fn].elements[selectName].options[insIndex].text=text;
	document.forms[fn].elements[selectName].options[insIndex].value=inValue;
}

function isSelectedIdInArray(selectElement, valuesArray, formName) 
{
	var fn = (formName) ? formName : mainForm;
	var selId=getSelectedOptionId(selectElement, fn);
	var index=searchInArray(valuesArray, selId);
	if (index==-1) return false;
	else return true;
}

function controlInputForSelect(textInputName, selectName, disableOnOptions, formName) 
{
	var fn = (formName) ? formName : mainForm;
	if (isSelectedIdInArray(selectName, disableOnOptions, fn)) {
		clearInputElementValue(textInputName, fn);
		disableChangeElement(textInputName, fn);
	}
	else	{
		enableChangeElement(textInputName, fn);
		focusElement(textInputName, fn);
	}
}                                                                                                                                    

function chActionArg(argName, argPrependSymbol, oldArgFmt, newArgValue, formName) 
{
	if (document.forms[formName]) {
		oldRegExp = eval("/(."+argName+"=["+oldArgFmt+"]*)/");
		document.forms[formName].action = document.forms[formName].action.replace(oldRegExp, '')+argPrependSymbol+argName+"="+newArgValue;
		return true;
	}
	else
		return false;
}

