/**
 * Общие функции JavaScript для сайта
 */

/**
 * Включает/отключает все флажки в форме form в зависимости от значения checked_status (0|1)
 */
function selectAllCheckboxes(form, checked_status)
{
    for(i=0; i<form.elements.length; i++)
    {
        if (form.elements[i].type=='checkbox')
        {
            form.elements[i].checked = checked_status;
        }
    }
}

/**
 * Скрывает/показывает DIV id
 */
function showhideDiv(id)
{
	if (document.getElementById) { // DOM3 = IE5, NS6
		document.getElementById(id).style.display = document.getElementById(id).style.display=='block' ? 'none' : 'block';
	}
	else {
		if (document.layers) { // Netscape 4
			document.id.display = document.id.display=='block' ? 'none' : 'block';
		}
		else { // IE 4
			document.all.id.style.display = document.all.id.style.display=='block' ? 'none' : 'block';
		}
	}
}

/**
 * Показывает DIV с идентификтором id
 */
function showDiv(id)
{
	if (document.getElementById) { // DOM3 = IE5, NS6
		document.getElementById(id).style.display = 'block';
	}
	else {
		if (document.layers) { // Netscape 4
			document.id.display = 'block';
		}
		else { // IE 4
			document.all.id.style.display = 'block';
		}
	}
}

/**
 * Скрывает DIV с идентификтором id
 */
function hideDiv(id)
{
	if (document.getElementById) { // DOM3 = IE5, NS6
		document.getElementById(id).style.display = 'none';
	}
	else {
		if (document.layers) { // Netscape 4
			document.id.display = 'none';
		}
		else { // IE 4
			document.all.id.style.display = 'none';
		}
	}
}

/**
 * Очищает список SELECT от предыдущих значений
 */
function clearSelect(obj)
{
    for(i=obj.options.length-1; i>=0; i--)
        if (!obj.options.remove)
            obj.options[i] = null;
        else
            obj.options.remove(i);
    obj.options.length = 0;
}

/**
 * Формирует выпадающий список SELECT для slave_id в зависимости от выбранного значения в главном списке master_id.
 * Использует функцию jsonMakeRequest() из simpleajax.js.
 *
 * @param   master_id   integer             ид главного списка
 * @param   slave_id    integer             ид подчиненного списка
 * @param   url         string              адрес для выполнения ajax-запроса, который возвращает данные в JSON-формате
 * @param   idname      string              название переменной $id, которая ожидается на сервере в скрипте url
 * @param   default_obj object              данные для первого элемента в списке после обработки запроса с сервера: {v:$value, text:$text}
 * @return  boolean
 */
function getSelectListByAjax(master_id, slave_id, url, idname, default_obj)
{
    if (typeof(jsonMakeRequest)!='function') 
    {
        alert('simpleajax.js is required!');
        return false;
    }
    
    if (typeof(default_obj)!='object')
    {
        alert("Parameter 'default_obj' must be an object {'v':value, 'text':text}");
        return false;
    }
    
    if (masterObj=document.getElementById(master_id))
    {
        var selected = masterObj.options[masterObj.options.selectedIndex].value;
        
        var slaveObj = document.getElementById(slave_id);
        
        if (!slaveObj)
        {
            alert("Slave object '"+slave_id+"' is undefined");
            return false;
        }
        
        clearSelect(slaveObj);

        var json_text = jsonMakeRequest(url+'&'+idname+'='+selected);
        
        if (json_text!='') {
            var r = eval('('+json_text+')');

            slaveObj.options.add(new Option(default_obj.text, default_obj.v));

            for(var i in r)
                slaveObj.options.add(new Option(r[i], i));
            slaveObj.disabled = false;
        }
    }
    else 
    {
        alert("Master object '"+master_id+"' is undefined");
        return false;
    }
    
    return true;
}
