// Для использования библиотеки требуется jquery.js, jquery.ajax.js (я - автор)
testAjaxFieldFontSize = 10;
// Проверить одно поле
function testAjaxField(input,testType,successMessage,wrap_err,wrap_succ,successOperation)
{
        if (successOperation == undefined) successOperation = function(msg){};
        
        if (successMessage == undefined || successMessage == null )
        {
                successMessage = '';
        }
        
        if (wrap_succ == undefined || wrap_succ == null)
        {
                wrap_succ = '<p class="ajaxError" style="color:rgb(0,180,0); float:left;"></p>';
        }
        
        if (wrap_err == undefined || wrap_err == null)
        {
                wrap_err = '<p class="ajaxError" style="color:rgb(255,0,0); float:left;"></p>';
        }
        
        var param = {
                'type':'POST',
                'url':'/!ajax/ajax.test.field.php'
        };
        
        if ($(input).attr('type') == 'checkbox')
        {
                var inputChecked = $(input);
                if (inputChecked[0].checked == false)
                {
                        var val = 0;
                } else {
                        var val = 1;
                }
        } else {
                var val = $(input).attr('value');
        }
        
        var data = {
                'type':testType,
                'value':val
        };
        var success = function(msg)
        {
                if ($(input).parent().find('p.ajaxError').attr('class') != undefined)
                        $(input).parent().find('p.ajaxError').html('&nbsp;');
                
                $(input).parent().parent().find('p.under').remove();
                
                if (msg != 'loadUserType')
                {
                        if (msg == 1)
                        {
                                if (successMessage != '')
                                {
                                        if ($(input).parent().find('p.ajaxError').attr('class') != undefined)
                                                var elem = $(input).parent().find('p.ajaxError');
                                        else 
                                                var elem = $(wrap_succ);
                                        elem.css('font-size',testAjaxFieldFontSize+'px');
                                        elem.html(successMessage);
                                        
                                } else {
                                        var elem = '';
                                }
                                                                
                                successOperation(msg);
                        } else {
                                if ($(input).parent().find('p.ajaxError').attr('class') != undefined)
                                        var elem = $(input).parent().find('p.ajaxError');
                                else
                                        var elem = $(wrap_err);
                                
                                elem.css('font-size',testAjaxFieldFontSize+'px');
                                elem.html(msg);                        
                        }
                        
                        if ($(input).parent().find('p.ajaxError').attr('class') != undefined)
                        {} else {
                                $(input).parent().append(elem);
                                $(input).parent().append('<div style="clear:both"></div>');
                        }
                } else {
                        if ($('#confirmEmailPassword').attr('id') == undefined)
                        {       
                                elem = $('<div></div>');
                                elem.css({
                                        'float':'left',
                                        'height':'auto'
                                });
                                var inputPassword = $('<input type="password" id="confirmEmailPassword" onchange="testAjaxFieldEmailComfirm(this,\'EMAILCONFIRM=\'+$(\'#email\').attr(\'value\'));" />');
                                inputPassword.css({
                                        'width':'100px',
                                        'height':'20px',
                                        'background':'#ffffff',
                                        'border':'solid #aaaaaa 1px',
                                        'font-size':'10px'
                                });
                                var message = $(wrap_err);
                                message.css('font-size',testAjaxFieldFontSize+'px');
                                message.html('Пользователь с таким email уже сущетсвует. Введите пароль чтобы продолжить регистрацию.');
                                elem.html(inputPassword);
                                elem.prepend(message);
                                elem.prepend('<br />');
                                $(input).parent().append(elem);
                                $(input).parent().append('<div style="clear:both"></div>');
                        }
                }
        }
        var stream = ajax(param,success,data);
        
        return stream;
}
// Проверить список полей
function testAjaxFieldFull(fieldArray, func)
{
        if (func == undefined) func = function(msg){return false;}
        
        var key;
        var streamList = [];
        
        for (key in fieldArray)
        {
                streamList[key] = testAjaxField(fieldArray[key][0],fieldArray[key][1]);
        }
        
        // Если это супермегалогин
        if ($('#confirmEmailPassword').attr('id') != undefined)
        {
                streamList['confirmEmailPassword'] = testAjaxField('#confirmEmailPassword','EMAILCONFIRM='+$('#email').attr('value'));
                delete(streamList['email']);
        }
                
        var interval = setInterval(function(){
                var res = true;
                for (key in streamList)
                {
                        
                        // Если не успел создаться поток
                        if (jqueryAjaxStream[streamList[key]] == undefined && key != 'indexOf')
                        {
                                res = false;
                                break;
                        }
                        // Если еще не готово решение
                        if (jqueryAjaxStream[streamList[key]] == false)
                        {
                                res = false;
                                break;
                        }
                        // Если результат не равен 1 значит поле неверное
                        if (jqueryAjaxStream[streamList[key]] != 1 && key != 'indexOf')
                        {
                                res = 'error';
                                break;
                        }
                }
                                
                if (res != false)
                {
                        func(res);
                        clearInterval(interval);
                }
        },100);
}
function testAjaxFieldEmailComfirm(input,testType,successMessage,wrap_err,wrap_succ)
{
        if (successMessage == undefined)
        {
                successMessage = 'поле заполнено верно';
        }
        
        if (wrap_succ == undefined)
        {
                wrap_succ = '<p class="ajaxError" style="color:rgb(0,180,0); float:left;"></p>';
        }
        
        if (wrap_err == undefined)
        {
                wrap_err = '<p class="ajaxError" style="color:rgb(255,0,0); float:left;"></p>';
        }
        
        var param = {
                'type':'POST',
                'url':'/!ajax/ajax.test.field.php'
        };
        
        if ($(input).attr('type') == 'checkbox')
        {
                if (($(input).attr('checked') == false) || ($(input).attr('checked') == undefined))
                {
                        var val = 0;
                } else {
                        var val = 1;
                }
        } else {
                var val = $(input).attr('value');
        }
        
        var data = {
                'type':testType,
                'value':val
        };
        var success = function(msg)
        {
                $(input).parent().find('p.ajaxError').remove();
                
                if (msg != 'loadUserType')
                {
                        if (msg == 1)
                        {
                                yakypilLoadRegInfo();
                        } else {
                                $('#first_name').attr('value','').attr('disabled',false);
                                $('#last_name').attr('value','').attr('disabled',false);
                                $('#phone').attr('value','').attr('disabled',false);
                                $('#password').attr('value','').attr('disabled',false);
                                $('#email').unbind('keydown');
                                
                                var elem = $(wrap_err);
                                elem.css('font-size',testAjaxFieldFontSize+'px');
                                elem.html(msg);                        
                        }
                        
                        if (elem)
                        {
                                $(input).parent().append(elem);
                                $(input).parent().append('<div style="clear:both"></div>');
                        }
                } 
        }
        var stream = ajax(param,success,data);
        
        return stream;
}
function yakypilLoadRegInfo()
{      
        var param = {
                'type':'POST',
                'url':'/!ajax/ajax.test.field.php'
        };
        
        var data = {
                'type':'GETREGINFO',
                'value':$('#email').attr('value')
        };
        
        var success = function (msg)
        {
                var data = [];
                var keystring = '';
                
                while (msg.indexOf(';') != -1)
                {
                        keystring = msg.substr(0,msg.indexOf(';'));
                        msg = msg.substr(msg.indexOf(';')+1,msg.length);
                        
                        data[keystring.substr(0,keystring.indexOf('='))] = keystring.substr(keystring.indexOf('=')+1,keystring.strlen);
                }
                
                if (data['last_name']) $('#last_name').attr('value',data['last_name']).attr('disabled',true);
                if (data['first_name']) $('#first_name').attr('value',data['first_name']).attr('disabled',true);
                if (data['phone']) $('#phone').attr('value',data['phone']).attr('disabled',true);
                
                $('#password').attr('value',$('#confirmEmailPassword').attr('value'));                
                $('#password').attr('disabled',true);                
                $('#email').bind('keydown',function(){return false});
        }
        
        var stream = ajax(param,success,data);
        
        return stream;
}
