var block_geo_id = {0:'Country', 1:'Region', 2:'City'}; // id selektov, kotorye budut blokirovat'sya na vremya podgruzki. Eto nuzhno dlya togo, 4toby ne zapuskalos' bolee 1 podgruzki regionov i gorodov.
var regform = document.forms['regform'];
var button_submit = $('button_submit');
var break_script = false;
var _updateData_already_run = 0;
var not_redir_next_step = 0;
var req_reg = new MyJsHttpRequest();
var check_login_error = false;
var tryagain_timer = null;
var wait_time=20;
var time_left=0;
var _check_zip_code_timer = null;

function view_help_desc(desc_id)
{
    tab = $('table_content');
    div = tab.getElementsByTagName('div');
    for (i = 1; i < div.length; i++) {
        if (!check_login_error) {
            if (div[i].id.substr(0, 5) == 'desc_' && (!desc_id || div[i].id == 'desc_' + desc_id)) {
               div[i].style.display = 'block';
            } else if (div[i].id.substr(0, 4) == 'err_' && (!desc_id || div[i].id == 'err_' + desc_id))
               div[i].style.display = 'none';
        }
    }
}

function view_error_desc(err)
{
    tab = $('table_content');
    div = tab.getElementsByTagName('div');
    for (j in err) {
        err_desc = err[j];
        for (var i = 0; i < div.length; i++) {
            if (div[i].id == 'err_' + j) {
                $('desc_' + j).style.display = 'none';
                div[i].style.display = 'block';
                div[i].innerHTML = err_desc;
            }
        }
    }
}

function registration__main_show_error(fid, msg, not_break)
{
    if (!not_break) {
        break_script = true;
    }

    $('desc_' + fid) && ($('desc_' + fid).style.display = 'none');
    if ($('err_' + fid).style.display == 'none') {
        $('err_' + fid).style.display = '';
    }
    $('err_' + fid).innerHTML = msg;
}

function save_geodata()
{
    country_id = document.getElementById('Country').value;
    region_id = document.getElementById('City').value;
    city_id = document.getElementById('Region').value;
}

function return_geodata(control)
{
    block_geodata(block_geo_id, false);

    selected_option(document.getElementById('Country'), country_id);
    selected_option(document.getElementById('City'), region_id);
    selected_option(document.getElementById('Region'), city_id);

}

function close_geo_failed(control)
{
    if(tryagain_timer)
        clearTimeout(tryagain_timer);

    return_geodata(control);
    _dhtml_alert_close();
}

function try_again(control, id)
{
    clearTimeout(tryagain_timer);
    _dhtml_alert_close();

    if(control==1)
        change_country(id);
    else
        update_region(id);
}

function __process_geo_control(response)
{
    response = response.responseJS;
    if (response) {
        var block = {City: 0, Region: 0, Country: 0};
        if (response.regions) {
            geo_clear_selectbox('Region');
            if (response.region_id) {
                $('city_container').style.display = 'none';
                $('region_container').style.display = '';
                geo_create_options(response.cities, 'Region');
                geo_create_options(response.regions, 'City');
                if (response.city_id) {
                    block['Region'] = 1;
                }
            }
            else
            {
                geo_create_options(response.regions, 'City');
                $('city_container').style.display = '';
                $('region_container').style.display = 'none';
            }
        } else if (response.cities) {
            geo_create_options(response.cities, 'Region');
            $('region_container').style.display = '';
            if (response.city_id) {
                block['Region'] = 1;
            }
        }

        if (response.city_id) {
            selected_option($('Region'), response.city_id);
        }
        if(response.region_id) {
            selected_option($('City'), response.region_id);
        }

        save_geodata();
        block_geodata(block_geo_id, false, block);
        _hide_loading();
    }
}

function change_country(country_id)
{
    if(country_id == usa_id || country_id == canada_id)
    {
        $('zip_code_container').style.display = '';
        $('city_container').style.display = 'none';
        $('region_container').style.display = 'none';
    }
    else if(country_id == '' || country_id == 0)
    {
        $('zip_code_container').style.display = 'none';
        $('city_container').style.display = 'none';
        $('region_container').style.display = 'none';
    }
    else
    {
        $('zip_code_container').style.display = 'none';
        _show_loading({timeout:60000, js_func:'geo_failed', func_params:[1, country_id]});
        block_geodata(block_geo_id, true);
        request_module('registration:geo_load', {act: 'get_regions', id: country_id}, {receiver: __process_geo_control});
    }
    $('Zip_Code').value = '';
    registration__main_onchange();
    button_submit.disabled = false;
}

function update_region(region_id)
{
    if(document.getElementById('city_container').style.display == '')
    {
        if(region_id > 0)
        {
            _show_loading({timeout:60000, js_func:'geo_failed', func_params:[2, region_id]});
            block_geodata(block_geo_id, true);
            request_module('registration:geo_load', {act: 'get_cities', id: region_id}, {receiver: __process_geo_control});
            registration__main_onchange();
        }
        else
            document.getElementById('region_container').style.display = 'none';
    }
}

function check_zip_code(go)
{
    if (typeof go == 'undefined') {
        if (_check_zip_code_timer) {
            clearTimeout(_check_zip_code_timer);
        }
        _check_zip_code_timer = setTimeout('check_zip_code(true)', 500);
        return;
    }

    var zip_code = document.regform.zip_code.value;
    if (!zip_code) {
        view_help_desc('zip_code');
        return false;
    }

    var receiver = function(response)
    {
        response = response.responseJS;
        if (response && response.error == 0)
        {
            check_zip_code_error = false;
            view_help_desc('zip_code');
            button_submit.disabled = false;
        }
        else
        {
            check_zip_code_error = true;
            view_error_desc(response.error);
            button_submit.disabled = true;
        }
    }
    request_module('registration:main', {act: 'check_zip', zip: zip_code, cid: document.regform.country.value}, {receiver: receiver});
}

function try_again_tick(control, id)
{
    if(time_left > 1) {
        time_left--;
        $('try_again_button').value = _LANG.registration.try_again + ' (' + time_left + ')';
        tryagain_timer = setTimeout('try_again_tick(' + control + ', ' + id + ')', 1000);
    } else {
        try_again(control, id);
    }
}

function block_geodata(obj_id, fl, not_block)
{
    for (i in obj_id)
    {
        var id_el = obj_id[i];
        var el = $(id_el);
        if (el)
        {
            if (not_block)
            {
                el.disabled = !not_block[id_el] ? fl : !fl;
            }
            else
                el.disabled = fl;
        }

    }
}
