/**
 * @author Victor Grischenko <victor.grischenko@gmail.com>
 * @since 03.06.2008
 */

init();

function init() {
    $('#top_cities').change(onSelectTopSitesCitiesChange);
    $('#top_request').submit(checkTopRequestForm);
    $('#top_code').submit(checkTopCodeForm);
    $('#top_add_participant').submit(checkTopAddParticipantForm);
    $('#top_auth').submit(checkTopAuthForm);

    // При закрытии страницы активируем все формы для нормальной работы кнопки "Назад"
    $(document).unload(function () {
        $('form').each(function () {
            enableForm(this);
        });
    });

     // Форма поиска по городам
    var isPressed = false;
    $('#search_and_add .normal')
        .mouseup(function(){
            var $this = $(this);
            $this.toggleClass('normal').toggleClass('pressed');
            if ( '' == $this.attr('rel') ) {
                // Это отправка формы
                var $suggest = $('#suggest');
                if ( $suggest.val() == 'название города' || $suggest.val() == '' ) {
                    $suggest.focus();
                }
                else {
                    $this.parents('form').submit();
                }
            }
            else {
                location.href = $this.attr('rel');
            }
            isPressed = false;
        })
        .mousedown(function(){
          $(this).toggleClass('normal').toggleClass('pressed');
          isPressed = $(this);
        });

    $('#search_and_add .normal').mouseout(function(){
        if ( isPressed ) {
            var curButton = isPressed;
            curButton.toggleClass('normal').toggleClass('pressed');
            isPressed = false;
        }
    });

    $('#suggest').autocomplete('/proxy/ajax/cities-suggest.html', {emptyValue: 'название города'});

    $('#search_city_frm').submit(function() {
        var rel = $('div.normal', this).attr('rel');
        if ( '' != rel ) {
            location.href = rel;
            return false;
        }
    });

};

function enableForm(frm) {
    $('input, textarea, select', frm).attr('disabled', '');
};

function clearErrors(frm) {
    $('div.with_error_message div.message', frm).remove();
    $('div.error table.labels, table.checkboxes, div.checkboxes, div.error select, div.error input, div.error textarea', frm).unwrap('div.error');
    $('td.error', frm).removeClass('error');
    firstInvalidField = undefined;
};

function addError(el, msg, markTd) {
    var wrapEl = undefined;
    if ( 'undefined' == typeof(firstInvalidField) ) {
        firstInvalidField = el;
    }
    $(el).parents('table.labels, table.checkboxes, div.checkboxes').each(function () {
        wrapEl = this;
    });

    if ( undefined == wrapEl ) {
        wrapEl = el;
    }

    if ( undefined == msg ) {
        $(wrapEl).wrap('<div class="error"></div>');
    }
    else {
        $(wrapEl).wrap('<div class="error with_error_message"></div>');
        $(wrapEl).before($('<div class="message">'+htmlspecialchars(msg)+'</div>'));
    }

    if ( markTd ) {
        $(wrapEl).parents('td').addClass('error');
    }
};

function htmlspecialchars(str) {
    str = str.replace(/&/g, '&amp;');
    str = str.replace(/</g, '&lt;');
    str = str.replace(/>/g, '&gt;');
    str = str.replace(/"/g, '&quot;');
    return str;
};

function onSelectTopSitesCitiesChange() {
    console.log('cganged');
    var $city = $('#top_cities').find('option:selected').val();

    if ( $city ) {
        location.href = "/"+$city+"/";
    } else {
        location.href = "/";
    }

};

function checkTopRequestForm() {
    var frm = this;
    clearErrors(frm);
    
    if ( !frm['country'].value ) {
        addError(frm['country'], 'Выберите страну');
        return false;
    }
    if ( !frm['city'].value ) {
        addError(frm['city'], 'Укажите город');
        return false;
    }
    if ( !frm['agency'].value ) {
        addError(frm['agency'], 'Укажите название агентства');
        return false;
    }
    if ( !frm['url'].value ) {
        addError(frm['url'], 'Укажите адрес вашего сайта');
        return false;
    }
    if ( !frm['email'].value ) {
        addError(frm['email'], 'Укажите ваш e-mail');
        return false;
    }
    if ( !frm['email'].value.match(/^[a-z0-9_\-\.]+@([a-z0-9_\-]+\.)+[a-z]{2,5}$/i) ) {
        addError(frm['email'], 'Недопустимый формат E-mail');
        return false;
    }
    if ( !frm['rules'].checked ) {
        addError($(frm['rules']).parent(), 'Регистрация в рейтинге возможна, если вы ознакомились с правилами и соглашаетесь с ними');
        return false;
    }
    return true;
}

function checkTopCodeForm() {

    var frm = this;
    clearErrors(frm);
    
    if ( !frm['country'].value ) {
        addError(frm['country'], 'Выберите страну');
        return false;
    }
    if ( !frm['profile_id'].value ) {
        addError(frm['profile_id'], 'Укажите ID профайла');
        return false;
    }

    return true;
}

function checkTopAddParticipantForm() {

    var frm = this;
    clearErrors(frm);
    
    if ( !frm['country_en'].value ) {
        addError(frm['country_en'], 'Выберите страну');
        return false;
    }
    if ( !frm['profile_id'].value ) {
        addError(frm['profile_id'], 'Укажите ID профайла');
        return false;
    }
    if ( !frm['title'].value ) {
        addError(frm['title'], 'Укажите название участника рейтинга');
        return false;
    }
    if ( !frm['url'].value ) {
        addError(frm['url'], 'Укажите URL сайта участника рейтинга');
        return false;
    }
    if ( !frm['city_ru'].value ) {
        addError(frm['city_ru'], 'Укажите русскоязычное название города участника рейтинга');
        return false;
    }
    if ( !frm['city_en'].value ) {
        addError(frm['city_en'], 'Укажите англоязычное название города участника рейтинга');
        return false;
    }
    if ( !frm['charset'].value ) {
        addError(frm['charset'], 'Укажите кодировку сайта участника рейтинга');
        return false;
    }

    return true;
} // end of function checkTopAddParticipantForm

function checkTopAuthForm() {
    var frm = this;
    clearErrors(frm);
    
    if ( !frm['email'].value ) {
        addError(frm['email'], 'Укажите ваш e-mail');
        return false;
    }
    if ( !frm['password'].value ) {
        addError(frm['password'], 'Укажите пароль');
        return false;
    }

    return true;
} // end of function checkTopAuthForm
