    var snames=[];
    var names=[];
    var pnames=[];
    function dataReady(data) {
	alert('hello');
    }
    function updateLists() {
        var v = $("sfield").value;
        if (v!="") {
            var fsnames = snames.filter(function(n) { return n.name.contains(v); });
            var fnames = names.filter(function(n) { return n.name.contains(v); });
            var fpnames = pnames.filter(function(n) { return n.name.contains(v); });
            generateList($("fam"), fsnames);
            generateList($("nam"), fnames);
            generateList($("pat"), fpnames);
        } else {
            generateList($("fam"), snames);
            generateList($("nam"), names);
            generateList($("pat"), pnames);
        }
        $("sfield").focus();
    }
    function updateExtendedLists() {
    	var v = $("sfield").value;
    	if (v!="") {
    	    var fsnames = snames.filter(function(n) { return n.name.contains(v); });
    	    var fnames = names.filter(function(n) { return n.name.contains(v); });
    	    var fpnames = pnames.filter(function(n) { return n.name.contains(v); });
    	    generateExtendedList($("fam"), fsnames);
    	    generateExtendedList($("nam"), fnames);
    	    generateExtendedList($("pat"), fpnames);
    	} else {
    	    generateExtendedList($("fam"), snames);
    	    generateExtendedList($("nam"), names);
    	    generateExtendedList($("pat"), pnames);
    	}
        $("sfield").focus();
    }
    window.addEvent('domready', function() {
    	$("sfield").addEvent("keydown", function(event) {
    	    event = new Event(event);
    	    if (event.code==13) $("search").focus();
    	});
    	var buttons = (new Element("div")).addClass("buttons").setProperty("id", "buttons");
    	$$("body").adopt(buttons);
    	buttons.adopt((new Element("img")).addClass("button").setProperty("src", "images/add.gif"));
    	buttons.adopt((new Element("img")).addClass("button").setProperty("src", "images/block.gif"));
    	buttons.adopt((new Element("img")).addClass("button").setProperty("src", "images/remove.gif"));
    	loadNew();
    });
    function loadNew() {
    	JsHttpRequest.query("admin.php", { task:"list" },
    	    function(result, errors) {
        		if (result) {
        		    snames = result.snames;
        		    names = result.names;
        		    pnames = result.pnames;
    		        $("extendedPanel").setStyle("display", "none");        		    
        		    $("post1").removeEvents().addEvent('click', post);
        		    $("post2").removeEvents().addEvent('click', post);
                    $("search").removeEvents().addEvent('click', updateLists);
                	$("label").setText("Вновь добавленные");
            	    $("changeView").setText("Полный список имен").removeEvents().addEvent("click", fullView);
        		    updateLists();
        		}
        	},
        	true
        );
    }
    function fullView() {
    	JsHttpRequest.query("admin.php", { task:"listAll" },
    	    function(result, errors) {
        		if (result) {
        		    snames = result.snames;
        		    names = result.names;
        		    pnames = result.pnames;
        		    $("extendedPanel").setStyle("display", "block");
        		    $("post1").removeEvents().addEvent('click', postExtended);
        		    $("post2").removeEvents().addEvent('click', postExtended);
                    $("search").removeEvents().addEvent('click', updateExtendedLists);        		    
        		    $("label").setText("Полный список имен");
        		    $("changeView").setText("Перейти к вновь добавленным").removeEvents().addEvent("click", loadNew);
        		    updateExtendedLists();
        		}
    	    },
    	    true
        );
    }
    
    function generateExtendedList(el, names) {
    	el.empty();
    	var letter_old;
    	var letter;
    	var letterEl = null;
    	$("buttons").setStyle("display", "none");
    	names.each(function(n) {
    	    letter = n.name.charAt(0);
    	    if (letter!=letter_old) {
        		letter_old = letter;
        		letterEl = (new Element("div")).addClass("letter");
        		letterEl.adopt((new Element("div")).addClass("dropcap").setText(letter));
        		if (letterEl) el.adopt(letterEl);
    	    }
    	    var nameLine = (new Element("div")).addClass("nameLine").setText(n.name);
    	    if (letterEl) {
    	        (new Element("input")).setProperty("type", "checkbox").addClass("checkbox").injectTop(nameLine);
                letterEl.adopt(nameLine);
            }
    	    applyStyle(nameLine);
    	});
    	if (letterEl) el.adopt(letterEl);
    }

    function generateList(el, names) {
    	el.empty();
    	var letter_old;
    	var letter;
    	var letterEl = null;
    	$("buttons").setStyle("display", "none");
    	names.each(function(n) {
    	    letter = n.name.charAt(0);
    	    if (letter!=letter_old) {
        		letter_old = letter;
        		letterEl = (new Element("div")).addClass("letter");
        		letterEl.adopt((new Element("div")).addClass("dropcap").setText(letter));
        		if (letterEl) el.adopt(letterEl);
    	    }
    	    var nameLine = (new Element("div")).addClass("nameLine").setText(n.name);
    	    if (letterEl) letterEl.adopt(nameLine);
    	    applyStyle(nameLine);
    
    	    nameLine.addEvent('mouseenter', function(event) {
        		event = new Event(event);
        		var el = event.target;
        		$("buttons").setStyles({
        		    display: "block",
        		    top: el.getTop() + "px",
        		    left: el.getLeft() + "px"
        		});
        		$("buttons").getChildren()[0].removeEvents().addEvent('click', function(event) {
        		    el.removeClass("blocked");
        		    el.removeClass("removed");
        		    el.toggleClass("accepted");
        		    updateArray(el);
        		});
        		$("buttons").getChildren()[1].removeEvents().addEvent('click', function(event) {
        		    el.removeClass("accepted");
        		    el.removeClass("removed");
        		    el.toggleClass("blocked");
        		    updateArray(el);
        		});
        		$("buttons").getChildren()[2].removeEvents().addEvent('click', function(event) {
        		    el.removeClass("accepted");
        		    el.removeClass("blocked");
        		    el.toggleClass("removed");
        		    updateArray(el);
        		});
    	    });
    	});
    	if (letterEl) el.adopt(letterEl);
    }
    function applyStyle(el) {
	if (el.getParent().getParent().hasClass("families")) arr = snames;
	else if (el.getParent().getParent().hasClass("names")) arr = names;
	else if (el.getParent().getParent().hasClass("patronyms")) arr = pnames;
	var text = el.getText();
	for (var i=0;i<arr.length;i++) {
	    if (arr[i].name==text) {
		if (arr[i].correct==2) el.addClass("blocked");
		else if (arr[i].correct == 1) el.addClass("accepted");
		else if (arr[i].correct == 3) el.addClass("removed");
		break;
	    }
	};
    }
    function updateArray(el) {
	if (el.getParent().getParent().hasClass("families")) arr = snames;
	else if (el.getParent().getParent().hasClass("names")) arr = names;
	else if (el.getParent().getParent().hasClass("patronyms")) arr = pnames;
	var text = el.getText();
	for (var i=0;i<arr.length;i++) {
	    if (arr[i].name==text) {
		if (el.hasClass("blocked")) arr[i].correct = 2;
		else if (el.hasClass("accepted")) arr[i].correct = 1;
		else if (el.hasClass("removed")) arr[i].correct = 3;
		else arr[i].correct = 0;
		break;
	    }
	};
    }
    		    
    function regroup(arr) {
	var block = [];
	var accept = [];
	var remove = [];
	arr.each(function(n) {
	    switch(n.correct) {
		case 1: accept.push(n.name); break;
		case 2: block.push(n.name); break;
		case 3: remove.push(n.name); break;
	    }
	});
	return { accept: accept, block: block, remove: remove };
    }
    
    function post() {
	var sn = regroup(snames);
	var nn = regroup(names);
	var pn = regroup(pnames);
/*	$("debug").innerHTML = "Фамилии:<br>добавить:<br>"+sn.add+"<br>заблокировать:<br>"+sn.block+"<br>удалить:<br>"+sn.remove;
	$("debug").innerHTML += "<br><br>Имена:<br>добавить:<br>"+nn.add+"<br>заблокировать:<br>"+nn.block+"<br>удалить:<br>"+nn.remove;
	$("debug").innerHTML += "<br><br>Отчества:<br>добавить:<br>"+pn.add+"<br>заблокировать:<br>"+pn.block+"<br>удалить:<br>"+pn.remove;*/

	JsHttpRequest.query("admin.php", {
		task:"modify",
		aname: nn.accept,
		bname: nn.block,
		rname: nn.remove,
		asname: sn.accept,
		bsname: sn.block,
		rsname: sn.remove,
		apname: pn.accept,
		bpname: pn.block,
		rpname: pn.remove
	    },
	    function(result, errors) {
		if (result) {
		    snames = result.snames;
		    names = result.names;
		    pnames = result.pnames;
		    updateLists();
		}
	    },
	    true
        );
    }
    
    function getListChecked() {
        var fsnames = [];
        var fnames = [];
        var fpnames = [];

        $$("input").each(function(el) {
            if (el.hasClass("checkbox") && el.checked) {
                var t = el.getParent().getParent().getParent().className;
                switch(t) {
                    case "names": fnames.push(el.getParent().getText()); break;
                    case "families": fsnames.push(el.getParent().getText()); break;
                    case "patronyms": fpnames.push(el.getParent().getText()); break;
                }
            }
        });
        return { snames: fsnames, names: fnames, pnames: fpnames };         
    }
    function postExtended() {
        var nn = getListChecked();
        if (nn.length==0) return;
        req = {task:"modifyExt"};
        if ($("s_accept").checked) {
            req["aname"] = nn.names;
            req["asname"] = nn.snames;
            req["apname"] = nn.pnames;
        } else if ($("s_uncheck").checked) {
            req["uname"] = nn.names;
            req["usname"] = nn.snames;
            req["upname"] = nn.pnames;
        } else if ($("s_block").checked) {
            req["bname"] = nn.names;
            req["bsname"] = nn.snames;
            req["bpname"] = nn.pnames;
        } else if ($("s_remove").checked) {
            req["rname"] = nn.names;
            req["rsname"] = nn.snames;
            req["rpname"] = nn.pnames;
        }
    	JsHttpRequest.query("admin.php", req,
    	    function(result, errors) {
        		if (result) {
        		    snames = result.snames;
        		    names = result.names;
        		    pnames = result.pnames;
        		    updateExtendedLists();
        		}
    	    },
    	    true
        );
    }    

