var time_step_out = 80;
var time_step_in = 24;
var default_max_height = 23;
var cp_submit = 0;
var cpanel_http = '.jino.ru:8080/cpanel';
var cpanel_https = '.jino.ru:8443/cpanel';
var cpanel = 'http://sys.jino.ru/login.phtml';
var webmail_http = '.jino.ru:8080/webmail/';
var webmail_https = '.jino.ru:8443/webmail/';

var d_messages = new Array();
var objects = new Array();
var max_height = new Array();

var busy = new Array();
var tasks = new Array();

//chkpass                   id_parent    type        message
d_messages['chkpass_error']         = ['sbi_cp', 'sbi_error', 'Ошибка на сервере'];
d_messages['chkpass_no_login']         = ['sbi_cp', 'sbi_error', 'Вы не ввели логин'];
d_messages['chkpass_invalid_login']     = ['sbi_cp', 'sbi_error', 'Недопустимый логин'];
d_messages['chkpass_no_password']     = ['sbi_cp', 'sbi_error', 'Вы не ввели пароль'];
d_messages['chkpass_invalid_password']     = ['sbi_cp', 'sbi_error', 'Недопустимый пароль'];
d_messages['chkpass_login_too_short']    = ['sbi_cp', 'sbi_error', 'Логин слишком короткий'];
d_messages['chkpass_login_too_long']     = ['sbi_cp', 'sbi_error', 'Логин слишком длинный'];
d_messages['chkpass_pass_too_short']     = ['sbi_cp', 'sbi_error', 'Пароль слишком короткий'];
d_messages['chkpass_pass_too_long']     = ['sbi_cp', 'sbi_error', 'Пароль слишком длинный'];
d_messages['chkpass_reserved']         = ['sbi_cp', 'sbi_error', 'Недопустимый логин'];
d_messages['chkpass_free']         = ['sbi_cp', 'sbi_error', 'Такого пользователя нет'];
//d_messages['chkpass_auth_fail']     = ['sbi_cp', 'sbi_error', 'Неверный пароль. <a href="" onclick="return forget_onclick();">Забыли?</a>'];
d_messages['chkpass_auth_fail']     = ['sbi_cp', 'sbi_error', 'Неверный пароль. <a href="/resetpassword.html">Забыли?</a>'];
d_messages['chkpass_reqpass']         = ['sbi_cp', 'sbi_error', '<h4>Восстановление пароля</h4><p>Ваш логин: <strong>{login}</strong></p><p><label for="reqpass_email">Введите свой E-mail:</label></p><p><input class="it" id="reqpass_email" />&#160;<button onclick="return reqpass_ok();">OK</button></p>', 111];
d_messages['chkpass_reqpass_success']     = ['sbi_cp', 'sbi_error', '<h4>Восстановление пароля</h4><p>Ваш логин: <strong>{login}</strong></p><p>Новый пароль отправлен на указанный E-mail</p><button onclick="return reqpass_close();">Закрыть</button></p>', 111];
d_messages['chkpass_reqpass_error']     = ['sbi_cp', 'sbi_error', '<h4>Восстановление пароля</h4><p>Ваш логин: <strong>{login}</strong></p><p>Ошибка. Пожалуйста, обратитесь в службу техподдержки</p><p><button onclick="return reqpass_close();">Закрыть</button></p>', 111];
d_messages['chkpass_reqpass_already_sent'] = ['sbi_cp', 'sbi_error', '<h4>Восстановление пароля</h4><p>Ваш логин: <strong>{login}</strong></p><p>Уже было отправлено&#160;<button onclick="return reqpass_close();">Закрыть</button></p>', 111];
d_messages['chkpass_reqpass_wrong_email']  = ['sbi_cp', 'sbi_error', '<h4>Восстановление пароля</h4><p>Ваш логин: <strong>{login}</strong></p><p>Неправильный e-mail&#160;<button onclick="return reqpass_close();">Закрыть</button></p>', 111];

//chkdomain
d_messages['chkdomain_not_entered']     = ['sbi_rd', 'sbi_error', 'Доменное имя не введено'];
d_messages['chkdomain_too_short']     = ['sbi_rd', 'sbi_error', 'Доменное имя слишком короткое'];
d_messages['chkdomain_too_long']     = ['sbi_rd', 'sbi_error', 'Доменное имя слишком длинное'];
d_messages['chkdomain_invalid']     = ['sbi_rd', 'sbi_error', 'Недопустимые символы'];
d_messages['chkdomain_reserved']     = ['sbi_rd', 'sbi_error', 'Домен занят (<a href="#" onclick="return main_whois_onclick(\'{domain}\');">кем?</a>)'];
d_messages['chkdomain_free']         = ['sbi_rd', 'sbi_notice', 'Домен свободен'];
d_messages['chkdomain_delegated']     = ['sbi_rd', 'sbi_error', 'Домен занят'];
d_messages['chkdomain_error']         = ['sbi_rd', 'sbi_problem', 'Недоступно (<a href="/support/faq/domains-general/whois-error.html#whois-error">почему?</a>)'];

//chkmail
d_messages['chkmail_error']         = ['sbi_em', 'sbi_error', 'Ошибка на сервере'];

d_messages['chkmail_no_email']          = ['sbi_em', 'sbi_error', 'Введите e-mail'];
d_messages['chkmail_invalid_email']     = ['sbi_em', 'sbi_error', 'Недопустимый e-mail'];
d_messages['chkmail_no_password']       = ['sbi_em', 'sbi_error', 'Введите пароль'];
d_messages['chkmail_invalid_password']  = ['sbi_em', 'sbi_error', 'Недопустимый пароль'];
d_messages['chkmail_email_too_short']    = ['sbi_em', 'sbi_error', 'E-mail слишком короткий'];
d_messages['chkmail_email_too_long']     = ['sbi_em', 'sbi_error', 'E-mail слишком длинный'];
d_messages['chkmail_pass_too_short']     = ['sbi_em', 'sbi_error', 'Пароль слишком короткий'];
d_messages['chkmail_pass_too_long']     = ['sbi_em', 'sbi_error', 'Пароль слишком длинный'];

d_messages['chkmail_domain_not_found']     = ['sbi_em', 'sbi_error', 'Домен не найден'];
d_messages['chkmail_auth_fail']     = ['sbi_em', 'sbi_error', 'Неверный пароль.'];

function URLEncode(url) //Function to encode URL.
{
    // The Javascript escape and unescape functions do not correspond
    // with what browsers actually do...
    var SAFECHARS = "0123456789" + // Numeric
        "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + // Alphabetic
        "abcdefghijklmnopqrstuvwxyz" +
        "-_.!~*'()"; // RFC2396 Mark characters
    var HEX = "0123456789ABCDEF";

    var plaintext = url;
    var encoded = "";
    for (var i = 0; i < plaintext.length; i++ ) {
        var ch = plaintext.charAt(i);
        if (ch == " ") {
            encoded += "+"; // x-www-urlencoded, rather than %20
        } else if (SAFECHARS.indexOf(ch) != -1) {
            encoded += ch;
        } else {
            var charCode = ch.charCodeAt(0);
            if (charCode > 255) {
                alert( "Unicode Character '"
                        + ch
                        + "' cannot be encoded using standard URL encoding.\n" +
                        "(URL encoding only supports 8-bit characters.)\n" +
                        "A space (+) will be substituted." );
                encoded += "+";
            } else {
                encoded += "%";
                encoded += HEX.charAt((charCode >> 4) & 0xF);
                encoded += HEX.charAt(charCode & 0xF);
            }
        }
    }

    return encoded;
};

function main_chkpass_submit() {
    if (cp_submit) return true;
    var login = document.getElementById('cp_login').value;
    var password = document.getElementById('cp_password').value;

    var prev_obj_id;

//------------------------
    var messages = document.getElementById('sbi_cp').childNodes;
    for(i in messages) {
        if(messages[i].tagName == 'DIV' && messages[i].style.display == 'block') {
            prev_obj_id = messages[i].id;
            break;
        }
    }

//------------------------
    if(prev_obj_id) set_sliding_in(prev_obj_id);
    if(!chkpass_validate(login, password)) return false;
    else AjaxRequest('/index2.php', 'ajax=main_auth&login=' + URLEncode(login) + '&password=' + URLEncode(password), main_chkpass_handler, null, 'ind');
    
    return false;
}

function chkpass_validate(login, password) {
    var login_exp = /^[a-z\d][a-z\d\-]{0,14}[a-z\d]$/;
    var pass_exp = /^[\x21-\x7E]{4,16}$/;
    if(login.length == 0) {
        set_sliding_out('chkpass_no_login');
        return false;
    }
    if(login.length < 2) {
        set_sliding_out('chkpass_login_too_short');
        return false;
    }
    if(login.length > 16) {
        set_sliding_out('chkpass_login_too_long');
        return false;
    }
    if(password.length == 0) {
        set_sliding_out('chkpass_no_password');
        return false;
    }
    if(password.length < 4) {
        set_sliding_out('chkpass_pass_too_short');
        return false;
    }
    if(password.length > 16) {
        set_sliding_out('chkpass_pass_too_long');
        return false;
    }
    if(login.search(login_exp) == -1) {
        set_sliding_out('chkpass_invalid_login');
        return false;
    }
    if(password.search(pass_exp) == -1) {
        set_sliding_out('chkpass_invalid_password');
        return false;
    }

    return true;
}

function main_chkpass_handler(xml) {
    var status = xml.getElementsByTagName("Result")[0].getAttribute("Status");
    var login = xml.getElementsByTagName("Result")[0].getAttribute("Login");
    var obj_id = 'chkpass_';
    
    // Status = error | invalid login | invalid password | reserved | free | auth ok | auth fail
    if(status == 'error') obj_id += 'error';
    else if(status == 'invalid login') obj_id += 'invalid_login';
    else if(status == 'invalid password') obj_id += 'invalid_password';
    else if(status == 'reserved') obj_id += 'reserved';
    else if(status == 'free') obj_id += 'free';
    else if(status == 'auth ok') {
        var form = document.getElementById('sbi_cp_form');
        var cp_https = document.getElementById('cp_https').checked;
        if(cp_https) form.action = 'https://' + login + cpanel_https;
        else form.action = 'http://' + login + cpanel_http;
        cp_submit = 1;
        track_action('/sidebar/cpanel/login_success.html');
        return form.submit();
    }
    else if(status == 'auth fail') obj_id += 'auth_fail';

    track_action('/sidebar/cpanel/login_error.html');
    set_sliding_out(obj_id);
}

function forget_onclick() {
    set_sliding_in('chkpass_auth_fail');
    set_sliding_out('chkpass_reqpass');
    
    return false;
}

function main_chkdomain_submit() {
    var domain2 = document.getElementById('rd_domain').value;
    var domain = domain2 + document.getElementById('rd_zone').value;

    var prev_obj_id;
//------------------------
    var messages = document.getElementById('sbi_rd').childNodes;
    for(i in messages) {
    if(messages[i].tagName == 'DIV' && messages[i].style.display == 'block') {
        prev_obj_id = messages[i].id;
        break;
    }
    }
//------------------------
    if(prev_obj_id) set_sliding_in(prev_obj_id);
    if(!domain_validate(domain2)) return false;
    AjaxRequest('/index2.php', 'ajax=domain_chkdomain&domain=' + encodeURI(domain), main_chkdomain_handler, null, 'ind');
    return false;
}

function domain_validate(domain2) {
    var domain_exp = /^[a-zа-я0-9][a-zа-я0-9\-]{0,61}[a-zа-я0-9]$/i;
    if(domain2.length == 0) {
    set_sliding_out('chkdomain_not_entered');
        return false;
    }
    if(domain2.length < 2) {
    set_sliding_out('chkdomain_too_short');
        return false;
    }
    if(domain2.length > 63) {
    set_sliding_out('chkdomain_too_long');
        return false;
    }
    if(domain2.search(domain_exp) == -1) {
    set_sliding_out('chkdomain_invalid');
        return false;
    }

    return true;
}

function main_chkdomain_handler(xml) {
    var status = xml.getElementsByTagName("Result")[0].getAttribute("Status");
    var domain = xml.getElementsByTagName("Result")[0].getAttribute("Domain");
    
    if(status == 'reserved') {
        set_sliding_out("chkdomain_reserved", domain);
        track_action('/sidebar/whois/domain_reserved.html');
    }
    if(status == 'free') {
        set_sliding_out("chkdomain_free");
        track_action('/sidebar/whois/domain_free.html');
    }
    if(status == 'delegated') {
        set_sliding_out("chkdomain_delegated");
        track_action('/sidebar/whois/domain_delegated.html');
    }
    if(status == 'error') {
        set_sliding_out("chkdomain_error");
        track_action('/sidebar/whois/domain_error.html');
    }
}

function main_chkmail_submit() {
    //if (document.getElementById('sbi_em_form').action != '') return true;
    var mailbox = document.getElementById('em_mailbox').value;
    var password = document.getElementById('em_password').value;

    var prev_obj_id;
//------------------------
    var messages = document.getElementById('sbi_em').childNodes;
    for (i in messages) {
        if (messages[i].tagName == 'DIV' && messages[i].style.display == 'block') {
            prev_obj_id = messages[i].id;
            break;
        }
    }
//------------------------

    if (prev_obj_id) set_sliding_in(prev_obj_id);
    if (!chkmail_validate(mailbox, password)) return false;
    AjaxRequest('/index2.php', 'ajax=main_chkmail&email=' + URLEncode(mailbox) + '&password=' + URLEncode(password), main_chkmail_handler, null, 'ind');
    return false;
}

function chkmail_validate(email, password) {
    var email_exp = /^[a-z\d\_\-\.\@]{1,64}$/;
    var pass_exp = /^[\x21-\x7E]{4,16}$/;
    if(email.length == 0) {
        set_sliding_out('chkmail_no_email');
        return false;
    }
    if(email.length < 1) {
        set_sliding_out('chkmail_email_too_short');
        return false;
    }
    if(email.length > 64) {
        set_sliding_out('chkmail_email_too_long');
        return false;
    }
    if(email.search(email_exp) == -1) {
        set_sliding_out('chkmail_invalid_email');
        return false;
    }
    if(password.length == 0) {
        set_sliding_out('chkmail_no_password');
        return false;
    }
    if(password.length < 4) {
        set_sliding_out('chkmail_pass_too_short');
        return false;
    }
    if(password.length > 16) {
        set_sliding_out('chkmail_pass_too_long');
        return false;
    }
    if(password.search(pass_exp) == -1) {
        set_sliding_out('chkmail_invalid_password123');
        return false;
    }


    return true;
}

function main_chkmail_handler(xml) {
    var status = xml.getElementsByTagName("Result")[0].getAttribute("Status");
    var login = xml.getElementsByTagName("Result")[0].getAttribute("Login");
    var obj_id = 'chkmail_';

    // Status = error | invalid email | invalid password | unsupported | domain not found | auth ok | auth fail
    if(status == 'error') obj_id += 'error';
    else if(status == 'invalid email') obj_id += 'invalid_email';
    else if(status == 'invalid password') obj_id += 'invalid_password';
    else if(status == 'domain not found') obj_id += 'domain_not_found';
    else if(status == 'auth ok' || status == 'unsupported') {
        var form = document.getElementById('sbi_em_form');
        var em_https = document.getElementById('em_https').checked;
        if(em_https) form.action = 'https://' + login + webmail_https;
        else form.action = 'http://' + login + webmail_http;
    track_action('/sidebar/webmail/login_success.html');
    form.submit();
    return;
    }
    else if(status == 'auth fail') obj_id += 'auth_fail';
    
    track_action('/sidebar/webmail/login_error.html');
    set_sliding_out(obj_id);
}

function test() { alert('test'); }

function set_sliding_in(obj_id) {
    if (obj_id) {
        busy[d_messages[obj_id][0]] = 1;
        sliding(time_step_in, obj_id, (d_messages[obj_id][3] ? d_messages[obj_id][3] : default_max_height));
    }
}

function set_sliding_out(obj_id, domain) {
    var parent_id = d_messages[obj_id][0];

    if (!document.getElementById(obj_id) && d_messages[obj_id]) {
        var parent = document.getElementById(d_messages[obj_id][0]);
        var div = document.createElement('div');
        div.id = obj_id;
        div.className = d_messages[obj_id][1];
        var content = '<div id="' + obj_id + '_text" class="sbi_text">';
        
        if (domain) content += d_messages[obj_id][2].replace(/{domain}/i, domain);
        else if (obj_id == 'chkpass_reqpass') {
            var login = document.getElementById('cp_login').value;
            content += d_messages[obj_id][2].replace(/{login}/i, login);
        }
        else content += d_messages[obj_id][2];
        content += '</div>';
        
        div.innerHTML = content;
        
        parent.appendChild(div);

        objects[obj_id] = document.getElementById(obj_id);
        objects[obj_id + '_text'] = document.getElementById(obj_id + '_text');
    }
    else if(domain) objects[obj_id + '_text'].innerHTML = d_messages[obj_id][2].replace(/{domain}/i, domain);
    else if(obj_id == 'chkpass_reqpass') {
        var login = document.getElementById('cp_login').value;
        objects[obj_id + '_text'].innerHTML = d_messages[obj_id][2].replace(/{login}/i, login);
    }

    if(busy[parent_id]) tasks[parent_id] = obj_id;
    else {
        busy[parent_id] = 1;
        objects[obj_id].style.display = 'block';
        sliding_out(time_step_out , obj_id, 0);
    }
}

function sliding_out(time_step, obj_id, height) {
    var obj = objects[obj_id];
    var obj_text = objects[obj_id + '_text'];
    var m_height = (d_messages[obj_id][3] ? d_messages[obj_id][3] : default_max_height);
    height += 4;
    if (height < m_height) {
    if(height > m_height*2/3) time_step += 12;
        obj.style.height = height + 'px';
    obj_text.style.marginTop = - m_height + height + 0 + "px";
        setTimeout('void sliding_out('+ time_step + ', "' + obj_id + '",' + height + ');', time_step);
    } else {
    obj.style.height = m_height + 'px';
    obj_text.style.marginTop = '0px';
    }
    
    return;
}

function sliding(time_step, obj_id, height) {
    if (height > 0 && obj_id != null && obj_id != 'undefined') {
        var obj = objects[obj_id];
        var obj_text = objects[obj_id + '_text'];
        height -= 4;
        if(height <= 0) {
            height = 0;
            obj.style.display = 'none';
        }
        obj.style.height = height + 'px';
        obj_text.style.marginTop = - (d_messages[obj_id][3] ? d_messages[obj_id][3] : default_max_height) + height + "px";
        setTimeout('void sliding('+ time_step + ', "' + obj_id + '", ' + height + ');', time_step);
    }
    
    else {
        busy[d_messages[obj_id][0]] = 0;
        if(tasks[d_messages[obj_id][0]] != null) {
            busy[d_messages[obj_id][0]] = 1;
            var obj_id_new = tasks[d_messages[obj_id][0]];
            tasks[d_messages[obj_id][0]] = null;
            objects[obj_id_new].style.display = 'block';
            sliding_out(time_step_out , obj_id_new, 0);
        }
    }
    
    return;
}

function main_whois_onclick(domain) {
    var win = window.open('/whois.php?domain=' + encodeURI(domain), null, 'width=400,height=500,status=yes,toolbar=no,menubar=no,location=no,scrollbars=yes,resizable=yes');
    win.focus();

    return false;
}

function reqpass_ok() {
    var email = document.getElementById('reqpass_email').value;
    var login = document.getElementById('cp_login').value;
    AjaxRequest('/index2.php', 'ajax=main_resetpassword&login=' + login + '&email=' + email, reqpass_handler, null, 'ind');
}

function reqpass_handler(xml) {
        var status = xml.getElementsByTagName("Result")[0].getAttribute("Status");
    if (status == 'success') var obj_id = 'chkpass_reqpass_' + status;
    else if (status == 'error') var obj_id = 'chkpass_reqpass_' + status;
    else if (status == 'already sent') var obj_id = 'chkpass_reqpass_already_sent';
    else if (status == 'wrong email') var obj_id = 'chkpass_reqpass_wrong_email';

    if(!document.getElementById(obj_id) && d_messages[obj_id]) {
        var parent = document.getElementById(d_messages[obj_id][0]);
        var div = document.createElement('div');
        div.id = obj_id;
        div.className = d_messages[obj_id][1];
        var content = '<div id="' + obj_id + '_text" class="sbi_text">';
        var login = document.getElementById('cp_login').value;
        content += d_messages[obj_id][2].replace(/{login}/i, login);
        content += '</div>';

        div.innerHTML = content;

        parent.appendChild(div);

        objects[obj_id] = document.getElementById(obj_id);
        objects[obj_id + '_text'] = document.getElementById(obj_id + '_text');
    }
    else {
        var login = document.getElementById('cp_login').value;
        objects[obj_id + '_text'].innerHTML = d_messages[obj_id][2].replace(/{login}/i, login);
    }


    objects['chkpass_reqpass'].style.display = 'none';
    objects[obj_id].style.height = d_messages[obj_id][3] + 'px';
    objects[obj_id + '_text'].style.marginTop = '0px';
    objects[obj_id].style.display = 'block';
}

function reqpass_close() {
    set_sliding_in('chkpass_reqpass_close');
}
