var autofillTimer;
var autofillFieldId;
var autofillTargetId;

var selectPairOptions = new Object();


function setupAutoFill(elem, target)
{
    if (!elem) return;
    
    if (autofillTimer) window.clearTimeout(autofillTimer);
    autofillTimer = window.setTimeout('autofill()', 1000);
    autofillFieldId = elem.id;
    autofillTargetId = target;
}

function autofill()
{
    if (!autofillFieldId) return;
    if (!autofillTargetId) return;
    var fld = document.getElementById(autofillFieldId);
    var sel = document.getElementById(autofillTargetId);
    
    if (!fld || !sel) return;

    for (var i=0; i<sel.options.length; i++)
    {
        if (fld.value && sel.options[i].text.indexOf(fld.value) != -1)
        {
            sel.options[i].selected = true;
        }
        else
        {
            sel.options[i].selected = false;
        }
    }
}

function copySelected(source, target)
{
    var src = document.getElementById(source);
    var dst = document.getElementById(target);
    
    if (!src || !dst) return;
    
    for (var i=0; i<src.options.length; i++)
    {
        if (src.options[i].selected && !optionExistByValue(target, src.options[i].value))
        {
            var opt = new Option();
            opt.value = src.options[i].value;
            opt.text = src.options[i].text;
            dst.options.add(opt);
        }
    }
}

function copyAll(source, target)
{
    var src = document.getElementById(source);
    var dst = document.getElementById(target);
    
    if (!src || !dst) return;
    
    for (var i=0; i<src.options.length; i++)
    {
        if (!optionExistByValue(target, src.options[i].value))
        {
            var opt = new Option();
            opt.value = src.options[i].value;
            opt.text = src.options[i].text;
            dst.options.add(opt);
        }
    }
}

function removeAll(id)
{
    var elem = document.getElementById(id);
    if (!elem) return;
    
    while (elem.options.length)
    {
        elem.remove(elem.options.length-1);
    }
}

function removeSelected(id)
{
    var elem = document.getElementById(id);
    if (!elem) return;
    
    var opts = new Array();
    for (var i=0; i<elem.options.length; i++)
    {
        if (elem.options[i].selected) opts[opts.length] = elem.options[i].value;
    }
    
    if (opts.length)
    {
        for (i=0; i<opts.length; i++)
        {
            removeOptionByValue(id, opts[i]);
        }
    }
}

function removeOptionByValue(id, value)
{
    var elem = document.getElementById(id);
    if (!elem) return;
    
    for (var i=0; i<elem.options.length; i++)
    {
        if (elem.options[i].value == value)
        {
            elem.remove(i);
        }
    }
}


function optionExistByValue(id, value)
{
    var elem = document.getElementById(id);
    if (!elem) return;
    for (var i=0; i<elem.options.length; i++)
    {
        if (elem.options[i].value == value) return true;
    }
    return false;
}

function appendOptionByArray(elem, arr)
{
    var value = arr[1];
    var text = arr[0];
    if (!optionExistByValue(elem.id, value))
    {
        var opt = new Option();
        opt.value = value;
        opt.text = text;
        opt.selected = true;
        elem.options.add(opt);
    }
}

function selectAll(id)
{
    var elem = document.getElementById(id);
    if (!elem) return;
    
    for (var i=0; i<elem.options.length; i++)
    {
        elem.options[i].selected = true;
    }
}

function setCatSelectsOptions(elem)
{
    if (!elem) return;
    var id = elem.id;
    var cid = elem.id.replace("parent", "child");
    var child = document.getElementById(cid);

    if (elem.getAttribute('hide') == 1)
    {
        elem.style['visibility'] = "hidden";
    }
    if (!selectPairOptions[cid])
    {
        selectPairOptions[cid] = selectStoreOptions(child);
        selectPairOptions[cid+"_value"] = child.value;
    }
    
    if (!elem.value || elem.value==0) 
    {
        child.style['visibility'] = "hidden";
    }
    else
    {
        
        if (elem.getAttribute('hide') != 1)
        {
            child.style['visibility'] = "visible";
        }
        else
        {
            child.style['visibility'] = "hidden";
        }
        selectRestoreOptions(child, 'cat_parent', elem.value);
    }
}

function selectStoreOptions(elem)
{
    if (!elem) return;
    
    var opts = new Array();
    
    for (var i=0; i<elem.options.length; i++)
    {
        opts[opts.length] = {'value': elem.options[i].value, 'text': elem.options[i].text, 'cat_parent': elem.options[i].getAttribute('cat_parent')};
    }
    return opts;
}

function selectRestoreOptions(elem, param, val)
{
    if (!elem) return;

    while (elem.options.length)
    {
        elem.remove(0);
    }
    var ind = 0;
    var index = 0;
    for (var i=0; i<selectPairOptions[elem.id].length; i++)
    {
        if (selectPairOptions[elem.id][i][param] == val || selectPairOptions[elem.id][i].value == 0)
        {
            var opt = document.createElement("option");
            opt.value = selectPairOptions[elem.id][i].value;
            opt.text = selectPairOptions[elem.id][i].text;
            elem.options.add(opt);
            if (opt.value == selectPairOptions[elem.id+"_value"]) index = ind;
            ind++;
        }
    }
    setTimeout(function(){elem.selectedIndex=index}, 1);
}

function fillSelect(elem, options, selected, def)
{
  var index =0;
  var ind = 1;
  if (!elem || elem.tagName != "SELECT")
  {
    return false;
  }
  removeAll(elem.id);
  if (def)
  {
    var opt = new Option();
    opt.text = "--Выберите--";
    opt.value = 0;
    elem.options.add(opt);
  }
  for (var i in options)
  {
    var opt = new Option();
    opt.value = options[i].value;
    opt.text = options[i].text;
    if (selected)
    {
        if (opt.value == selected)
        {
          index = ind;
        }
    }
    ind++;
    elem.options.add(opt);
  }
  if (selected)
  {
    setTimeout(function(){elem.selectedIndex=index}, 1);
  }
}

function makeSublist(parent,child,isSubselectOptional,childVal)
{
	$("body").append("<select style='display:none' id='"+parent+child+"'></select>");
	$('#'+parent+child).html($("#"+child+" option"));

		var parentValue = $('#'+parent).attr('value');
		$('#'+child).html($("#"+parent+child+" .sub_"+parentValue).clone());

	childVal = (typeof childVal == "undefined")? "" : childVal ;
	$("#"+child+' option[@value="'+ childVal +'"]').attr('selected','selected');

	$('#'+parent).change(
		function()
		{
			var parentValue = $('#'+parent).attr('value');
			$('#'+child).html($("#"+parent+child+" .sub_"+parentValue).clone());
			if(isSubselectOptional) $('#'+child).prepend("<option value='none'> -- Select -- </option>");
			$('#'+child).trigger("change");
                        $('#'+child).focus();
		}
	);
}