/**
 * Общеупотребительные функции
 * @author      Dmitry Bykadorov <dmitry.bykadorov@gmail.com>
 * @version     SVN: $Id: common.js 319 2009-08-14 11:20:29Z hudson $
 * 
 */

/**
 * Показать-скрыть объект (доп опции на главной)
 */
$.minmax = function (obj) {
    if ($('#minmax').attr('class') == 'min') {
        $('#minmax').addClass('max');
        $('#minmax').removeClass('min');
        $(obj).hide("slide", { direction: "up" }, 1000);
    } else {
        $('#minmax').addClass('min');
        $('#minmax').removeClass('max');
        $(obj).show("slide", { direction: "up" }, 1000);
    }
}

/**
 * Показать flash сообщение
 *
 * @param (string) type может принимать значения ok | warn | err - от чего зависит стиль(цвет) flash сообщения
 * @param (string) message сообщение которое можно показать
 */
$.showFlash = function(type, message){
    var classname;
    
    // Прячем сообщение если что-то было показано
    $.hideFlash();
    
    switch(type){
        // Успешно
        case 'ok':
            classname = "notificationSuccess";
            imgname = "icon-success.jpg";
            break;
        // Предупреждение
        case 'warn':
            classname = "notificationWarning";
            imgname = "icon-warning.jpg";
            break;
        // Ошибка
        case 'err':
            classname = "notificationError";
            imgname = "icon-error.jpg";
            break;
    }
    // Поставить нужную иконку
    $("#flashIco").attr("src", "/img/common/" + imgname);
    // Показать flash message
    $("#flashMessage > p > #flashText").html(message);
    $("#flashMessage")
        .removeClass()
        .addClass(classname)
        .fadeIn("slow");
}

/** 
 * Скрыть flash сообщение 
 */
$.hideFlash = function(){
    $("#flashMessage").hide();
}

/**
 * Управление пользовательским блоком
 */
$.toggleUserBlock = function () {
    $("#userActionsDefault").toggle();
    $("#userActionsAuthenticated").toggle();
}

/**
 * Управление пользовательским блоком для поиска
 */
$.toggleUserSearchBlock = function () {
    $("#userSearchActionsDefault").toggle();
    $("#userSearchActionsAuthenticated").toggle();
}

/**
 * Форматирование результатов автокомплитера
 */
$.acFormat = function (row) {
    var location, type, country, flag;
    location   = row[0];
    type       = row[1];
    country    = row[2];
    flag       = row[3];
    country_id = row[4];

    var img_tag, text;
    
    switch( type ){
        case 'country':
            img_tag = "<img src='" + flag + "'>&nbsp;";
            text    = img_tag + row[0];
            break;
        default:
            if( country ) {
                img_tag = "<img src='" + flag + "'>&nbsp;";
                text    = img_tag + row[0] + ' (' + country + ')';
            } else {
                text = row[0];
            }
    }

    return "<a href='#'>" + text + "</a>";
}

/**
 * Callback на выбор элемента автокомплитера
 */
$.selectItem = function (li) {
    if (li.extra) {
        var location_type = li.extra[0];
        var country_id = li.extra[3];
        $("#location_type").val( location_type );
        $("#country_id").val( country_id );
    }
}

/**
 * Обнуление location_type при изменении location
 */
$.locationChange = function() {
    // На каждое ручное изменение очищаем location_type
    $("#location_type").val("custom");
    $("#country_id").val("");
}

/**
 * Замена бэкграунда локации на главной
 */
$.locationBg = function() {
    if($("#location").val() == ""){
        // Возвращаем картинку "ГДЕ?" если инпут пустой
        $("#location").css("background-image", "url(/img/index/"+$.page_vars['culture']+"/empty_location.gif)");
    } else {
        // Убираем картинку "ГДЕ?" если она не убрана
        $("#location").css("background-image", "url(/img/index/filled_location.gif)");
    }
}

/**
 * Создание попап окна для различных нужд
 */
$.createModalDialog = function ( class_name ) {
    $('#commonPopUp').removeClass().addClass('popup').addClass(class_name).modal({
        overlay: 0,
        close: true
    });
};

/**
 * Создание и отображение попап окна с контентом, возвращаемым url
 * @param url
 */
$.showModalDialog = function( url, class_name ){
    $(".loginProgress").css("z-index", "1000");

    $.ajax({
        url:        url,
        type:       "GET",
        timeout:    100000,
        cache:      false,
        success:    function(data, status){
            $("#commonPopUp").html(data);
        },
        complete:   function() {
            // Спрятать прогресс
            $(".loginProgress").css("z-index", "-1");
            $.createModalDialog( class_name );
        },
        error:      function(XMLHttpRequest, textStatus, errorThrown){
            var message = "Ошибка выполнения запроса.<br>Если проблема повторяется несколько раз, пожалуйста обратитесь в службу поддержки.";
            $.showFlash('err', message);
        }
    });
}

$.preSubmit = function( object_id ) {
    var form = $('#'+object_id);
    
    var action = form.attr('action');
    
    var params = {
        location:        $("#location").val(),
        location_type:   $("#location_type").val(),
        country_id   :   $("#country_id").val(),
        searchType:      '',
        minPrice:        $("#minPrice").val(),
        maxPrice:        $("#maxPrice").val(),
        currency:        $("#currency").val(),
        type:            $("#type").val() ? $("#type").val() : ''
    }
    
    if($("#searchTypeRadio1").attr("checked")){
        params["searchType"] = $("#searchTypeRadio1").val();
    } else {
        params["searchType"] = $("#searchTypeRadio2").val();
    }
    
    for (var key in params){
        if( params[key] ) {
            action += '/'+key+'/'+ params[key];
        }
    }
    
    $(document).attr('location', action + '#1');
}

/**
 * Подстановка location (страны), выбранной в popup - - в инпут element_id
 */
$.setLocation = function( location, element_id ) {
    $("#" + element_id).val(location);
    $.locationBg();
    $.modal.close();
}

/**
 * Действия после загрузки DOM 
 */
$(document).ready(function() {
    // Обрабатываем нажатие ENTER
    // Если отображена форма логина или регистрации - она сабмитится
    $("html").keydown(function(e) {
        lastKeyPressCode = e.keyCode;
        switch(e.keyCode) {
            case 13: // ENTER
                if($("#userLogin").css("display") != "none"){
                    // Если отображена форма логина
                    //alert("userLogin display="+$("#userLogin").css("display") );
                    $.submitLogin();
                    return;
                } 
                if($("#userRegistration").css("display") != "none"){
                    // Если отображена форма регистрации
                    //alert("userRegistration display="+$("#userRegistration").css("display") );
                    $.submitReg();
                    return;
                }
                break;
            default:
                break;
        }
    })
    
    // Autocompletion location
    $("#location").autocomplete("/" + $.page_vars['culture'] + "/search/locationSuggest", {
        minChars:3,
        timeout:        10000,
        cacheLength:    10,
        formatItem:     $.acFormat,
        onItemSelect:   $.selectItem,
        resultsClass:   'autoSuggest',
        bottomClass:    'autoSuggestClose'
    });

    // Autocompletion keywords
    $("#keywords").autocomplete("/" + $.page_vars['culture'] + "/search/keywordsSuggest", {
        minChars:       3,
        timeout:        10000,
        cacheLength:    10,
        resultsClass:   'autoSuggest',
        formatItem:     $.acFormat,
        bottomClass:    'autoSuggestClose'
    });
});