var EFIO_SERVER = "http://efio.org.ru/fio_suggest.php";

function SurnameSuggestions() {}
SurnameSuggestions.prototype.requestSuggestions = function(autoControl, bTypeAhead) {
    var oThis = this;
    var sendValue = autoControl.textbox.value;
    var req = { task: "suggest", sname: sendValue };

    JsHttpRequest.query(
        EFIO_SERVER, req, function(result, errors) {
    		if (result) {
    	        if (autoControl.textbox.value == sendValue) {
                    autoControl.autosuggest(result.snames[sendValue], bTypeAhead);
                }
            }		
	    },
	    false
	);
}
SurnameSuggestions.prototype.fieldToString = function(s) { return s; }

function NameSuggestions() {}
NameSuggestions.prototype.requestSuggestions = function(autoControl, bTypeAhead) {
    var oThis = this;
    var sendValue = autoControl.textbox.value;
    var req = { task: "suggest", name: sendValue };

    JsHttpRequest.query(
        EFIO_SERVER, req, function(result, errors) {
    		if (result) {
    	        if (autoControl.textbox.value == sendValue) {
                    autoControl.autosuggest(result.names[sendValue], bTypeAhead);
                }
            }		
	    },
	    false
	);
}
NameSuggestions.prototype.fieldToString = function(s) { return s; }

function PatronymSuggestions() {}
PatronymSuggestions.prototype.requestSuggestions = function(autoControl, bTypeAhead) {
    var oThis = this;
    var sendValue = autoControl.textbox.value;
    var req = { task: "suggest", pname: sendValue };

    JsHttpRequest.query(
        EFIO_SERVER, req, function(result, errors) {
    		if (result) {
    	        if (autoControl.textbox.value == sendValue) {
                    autoControl.autosuggest(result.pnames[sendValue], bTypeAhead);
                }
            }		
	    },
	    false
	);
}
PatronymSuggestions.prototype.fieldToString = function(s) { return s; }

function FioGroup() {
    this.inputs = [];
    this.titles = [];
    this.correct = null;
}
FioGroup.prototype.hideNextInputs = function(c) {}
FioGroup.prototype.showNextInput = function(c) {}
FioGroup.prototype.check = function() {
    var oThis = this;
    var req = {
        task:"blocked",
        sname: this.inputs[0].textbox.value,
        name: this.inputs[1].textbox.value,
        pname: this.inputs[2].textbox.value
    };
    JsHttpRequest.query(
    	EFIO_SERVER, req,
    	function(result, errors) {
	    oThis.correct = 2;  // идет проверка..
    	    var err = false;
    	    if (result) {
   	        	if (result.snames[req.sname]) {
                   err = true;
                   oThis.inputs[0].textbox.className = "blocked";                   
                } else oThis.inputs[0].textbox.className = "";
   	        	if (result.names[req.name]) {
                   err = true;
                   oThis.inputs[1].textbox.className = "blocked";
                } else oThis.inputs[1].textbox.className = "";
   	        	if (result.pnames[req.pname]) {
                   err = true;
                   oThis.inputs[2].textbox.className = "blocked";
                } else oThis.inputs[2].textbox.className = "";
            }
    		if (err) oThis.correct = 0;
    		else {
    		    FioGroup.addNames(req.sname, req.name, req.pname);
		    oThis.correct = 1;
    		}
    	},
    	false
    );
}
FioGroup.addNames = function(sname, name, pname) {
    JsHttpRequest.query(
    	EFIO_SERVER, {
    	    task:"add",
            sname:sname,
    	    name:name,
    	    pname:pname
    	},
    	function(result, errors) {
    	    if (result) {}
    	},
    	true
    );
}
FioGroup.prototype.add = function(c) {
    this.inputs.push(c);
    c.group = this;
}
FioGroup.prototype.focusNext = function(c) {
    var p = this.inputs.indexOf(c);
    if (p<this.inputs.length-1) {
        this.inputs[p+1].textbox.focus();
    }
}
FioGroup.prototype.setFilter = function(filter) {
    this.filter = filter;
}

