var activeMastersPage,
    bannerManager = {loaded: false, timers: {}},
    loadInterview;

$(document).ready(function(){
    $('.center_part').on("click", "#master .sub_menu a", masterLink)
       .on("click", "#master .master_text .back > a", masterBackLink);
    patchLinks('#news', '.switch a');
    patchLinks('', '.green_button');
    patchLinks('', '.blue_button');
    patchContentLinks();

    var item = $('.first_shown', $('#master'));
    if (item.length) {
        activeMastersPage = item[0].id.substr(1);
    }

    patchTopicMenu();

/*
    $('.site_menu a').click(function() {
        if($('#xhr_container').length < 1)
        {
            location.href = link.attr('href');
        }
        else
        {
            var link = $(this);
            $.ajax({
                url: link.attr('href'),
                success: function(data) {
                    setCenter(data);
                }
            });
        }
        location_url = link.attr('href');
        return false;
    });

    $('.footer_menu a').click(function() {
        if($('#xhr_container').length < 1)
        {
            location.href = link.attr('href');
        }
        else
        {
            var link = $(this);
            $.ajax({
                url: link.attr('href'),
                success: function(data) {
                    setCenter(data);
                }
            });
        }
        location_url = link.attr('href');
        return false;
    });*/
/*
    $(".dropdown dt a").click(function() {
        $(".dropdown dd ul").toggle();
        return false;
    });

    $(".dropdown dd ul li a").click(function() {
        var text = $(this).html();
        $(".dropdown dt a span").html(text);
        $(".dropdown dd ul").hide();
        $(".dropdown dt a img").html(text);

        var id = $('img', this).attr('alt');
        id = id.split('_');
        $("#local_language_bar").val(id[0]);

        $("#link_language_bar").val(location_url);
        document.forms["languageForm"].submit();
        return false;
    });

    $(document).click(function(e) {
        var $clicked = $(e.target);
        if (! $clicked.parents().hasClass("dropdown"))
            $(".dropdown dd ul").hide();
    });*/
});

function cleanJson(data) {
    return /(.*)<!--[\w\W]*-->$/.exec(data)[1];
}

/**
 * Sets text in the center block
 *
 * @param {String} text
 * @param {Boolean} [is_article]
 */
function setArticleCenter(text, is_article) {
    var container = $('#xhr_container'),
        id;

    container.html(text);
    if (is_article) {
        id = /(\d+)$/.exec($('.sub_menu a.active', container).attr('href'));
        if (id) {
            id = id[1];
        } else {
            id = 0;
        }
        loadBanner(id);
    } else {
       loadBanner();
    }
}

/**
 * Sets text in the center block
 *
 * @param {String} text Text to set
 * @param {Element} [container] Container which contents will be replaced.
 *                              Whole center block is used by default
 * @param {Boolean} [replace] True if result has to replace container,
 *                            false to put result into it
  * @param {Number} [pageId]  Page id for loading banners
 */
function setCenter(text, container, replace, pageId) {
    if (!container) {
        container = $('#xhr_container');
    }

    if (replace) {
        container.replaceWith(text);
    } else {
        container.html(text);
    }

    loadBanner(pageId);
}

/**
 * Shows search result and passes links to load single article
 *
 * @param {String} text Search result
 * @param {String} link Link to load one article
 */
function setSearchCenter(text, link) {
    var container = $('#xhr_container');
    container.html(text);

    $('.sub_menu a', container).click(function() {

        if (!$(this).hasClass('active')) {
            $('.sub_menu a.active', container).removeClass('active');
            $(this).addClass('active');

            var id = /(\d+)$/.exec($(this).attr('href'))[1];
            $.ajax({
                url: link + id,
                success: function(data) {
                    $('#search_result').html(data);
                    loadBanner(id);
                    document.location.hash = 'search_result';
                }
            });
            location_url = link + id;
        }

        return false;
    });

    loadBanner();
}

/**
 * Loads banners for specified page
 *
 * @param {Number} [id] ID of the article to load banners for
 */
function loadBanner(id) {
    var i;

    for (i in bannerManager.timers) {
        clearTimeout(bannerManager.timers[i]);
    }
    bannerManager.timers = {};

    if (!id) {
        if (bannerManager.loaded === true) {
            return;
        }
        id = 0;
        bannerManager.loaded = true;
    } else {
        bannerManager.loaded = false;
    }
    $.ajax({
        url: '/banner/view/page/' + id,
        success: function(data) {
            setBanner(data, null, id);
        },
        dataFilter: function(data, type) {
            return cleanJson(data);
        }
    });
}

/**
 * Makes click on link in the center block perform an async request for pages
 *
 * @param {Element} container
 */
function patchContentLinks() {
    $('.center_part').on('click', '#article .sub_menu a', function() {
        var link,
            activePage,
            container = $('#article'),
            link_parts;

        if (!$(this).hasClass('active')) {
            link_parts = /(.*)(\d+)$/.exec(this.href);

            if (link_parts.length) {
                $('.sub_menu a.active', container).removeClass('active');
                $(this).addClass('active');

                link = link_parts[1];
                activePage = link_parts[2];

                loadCenter(link + activePage, null, false, null, activePage);
            }
        }

        return false;
    });
}



/**
 * Forces click on a link to send an async request first
 * and only then to perform a redirect
 *
 * @param {Element[]} elements
 */
function patchBannerLinks(elements) {
    $(elements).click(function() {
        var src = $('img', this).attr('src');
        var img_name = /_(\d+)\.[A-Za-z]+$/.exec(src);

        if(img_name !== null)
        {
            var href = $(this).attr('href');
            $.ajax({
                url: '/banner/click/' + img_name[1],
                success: function(data) {
                    document.location.href = href;
                }
            });
            return false;
        }
        return true;
    });
}

function loadCenter(link, targetContainer, replace, callback, pageId) {
    if ($('#xhr_container').length == 0) {
        document.location = link;
    } else {
        $.ajax({
            url: link,
            success: function(data) {
                setCenter(data, targetContainer, replace, pageId);
                if (callback) {
                    callback(targetContainer);
                }
            }
        });
    }
    location_url = link;
}

/**
 * Adds / replaces banners
 *
 * @param {Object} data        JSON object with banners loaded
 * @param {Number} [id_banner] ID of the old banner that is to be replaced. May be null
 * @param {Number} [page_id]   ID of the page. May be null
 *
 */
function setBanner(data, id_banner, page_id) {
    var position;
    var text = data['banners'];
    var runTimeBanner = data['time'];

    for(position in text) {
        if(text.hasOwnProperty(position))
        {
            if(!id_banner)
            {
                $('#banner_' + position).html('').append($(document.createElement('div')).addClass("clear"));
            }

            if(text[position] != null)
            {
                for(var i = 0; i < text[position].length; i++)
                {
                    var div_element = document.createElement('div');
                    div_element['className'] = 'banner ' + position;
                    div_element['id'] = 'banner_' + text[position][i].id;

                    var link_element = document.createElement('a');
                    link_element['href'] = text[position][i].link;
                    link_element['title'] = text[position][i].title;

                    var img_element = document.createElement('img');
                    img_element['src'] = "/images/banners/" + text[position][i].path;
                    img_element['width'] = text[position][i].width;
                    img_element['height'] = text[position][i].height;

                    if(id_banner)
                    {
                        $('#banner_' + id_banner).replaceWith(div_element);
                        id_banner = text[position][i].id;
                    }
                    else
                    {
                        $('#banner_' + position).append(div_element);
                    }

                    $(div_element).append(link_element);
                    $(link_element).append(img_element);

                    if(runTimeBanner[position])
                    {
                        $(img_element).load(function(id, position, timeout, page_id) {
                            bannerManager.timers[id] = setTimeout("timeOutBanner(" + id + ",'" +
                                        position + "', " + page_id + ")", 1000 * timeout);
                        }(text[position][i].id, position, runTimeBanner[position], page_id));

                    }
                }
            }

            if(!id_banner)
            {
                $('#banner_' + position).append($(document.createElement('div')).addClass("clear"));
            }
        }
    }

    var linkBanner;

    if(id_banner) {
        linkBanner = '#banner_' + id_banner + ' a';
    } else {
        linkBanner = '.banner a';
    }
    patchBannerLinks(linkBanner);
}

/**
 * Banner refresh request
 *
 * @param {Number} id_banner id of the banner to replace
 * @param {String} position position this banner is in
 * @param {Number} page_id Page ID
 */
function timeOutBanner(id_banner, position, page_id)
{
    if (bannerManager.timers[id_banner]) {
        delete bannerManager.timers[id_banner];
    }
    if (!page_id) {
        page_id = 0;
    }
    if ($('#banner_' + id_banner).length) {
        $.ajax({
            url: '/banner/time/' + id_banner + '/' + position + '/' + page_id,
            success: function(data) {
                setBanner(data, id_banner, page_id);
            },
            dataFilter: function(data, type) {
                return cleanJson(data);
            }
        });
    }
}


function shmp(pid) {
    $('#p'+activeMastersPage).hide();
    activeMastersPage = pid;
    $('#p'+pid).show();
}

function shrp(rpid) {
    $('.shown_ref').hide();
    $('.shown_ref').removeClass('shown_ref');
    $('#r'+rpid).show();
    $('#r'+rpid).addClass('shown_ref');
}

function shrg(gid) {
    $('.shown_ref_group').hide();
    $('.shown_ref_group').removeClass('shown_ref_group');
    $('#ref_group'+gid).show();
    $('#ref_group'+gid).addClass('shown_ref_group');
}

function patchTopicMenu() {
    $('#menu a').click(function() {
        var link = $(this),
        li = $(this.parentNode);

        if (li.hasClass('end') || li.hasClass('pages')) {
            $.ajax({
                url: link.attr('href'),
                success: function(data) {
                    setArticleCenter(data, true);
                }
            });
            location_url = link.attr('href');
        }
        return false;
    });
}

//загрузка и выбор страницы в поиске
function formSelected(link) {
    var single_id = $("#search_selected").attr('value'),
        form_href = $("#form_selected").attr('action');

    $.ajax({
        url: form_href,
        data: {search: $('#textSearch').val(), page: single_id},
        type: 'post',
        success: function(data) {
            setSearchCenter(data, link);
        }
    });
    location_url = form_href;
    return false;
}

//нажатие на кнопку поиск
function clickSearch(link)
{
    var form_href = $("#search_form").attr('action'),
        text = $("#textSearch").val();

    var execText = /\S/.exec(text);

    if(execText !== null)
    {
        $.ajax({
            url: form_href,
            type: 'post',
            data: {search: text, page: 1},
            success: function(data) {
                setSearchCenter(data, link);
            }
        });
        location_url = form_href;
    }
    else
    {
        var a = $("#message_searching");

        if (a.length == 0 ) {
            //получаем высоту контента
            var heighContent = $(".header .content").height();
            //получаем высоту блока
            var heightSeach_block = $(".seach_block").height();

            //получаем координаты размещения надписи
            var topDiv = heighContent - heightSeach_block;
            var widthDiv = $("#textSearch").width() + parseInt($("#textSearch").css('padding-left')) * 2;

            var div_element = document.createElement('div');
            div_element['id'] = 'message_searching';
            div_element.innerHTML = $("#searchEmpty").val();
            div_element['className'] = 'emptySearch';

            $(div_element).width(widthDiv)
                .css('top', (topDiv - 22) + "px")
                .css('left', parseInt($(".ordinary_search").css('margin-left')));

            $(".header .content").append(div_element);
        }
    }
    return false;
}

function clickDeleteMesage()
{
    var a = $("#message_searching");

    if (a.length > 0 )
    {
        $("#message_searching").remove();
    }

    return false;
}

//нажатие на ссылку голосовать
function clickLinkRate(href, id)
{
    $.ajax({
            url: href + '/renderrate/' + id,
            success: function(data) {
                resultRate(data);
            }
        });
    return false;
}

function resultRate(data)
{
    if($('form[name|="formRate"]').length < 1)
    {
        $('#form_rate').append(data);
    }

    $('form[name|="formRate"]').submit(function() {
        var form = $(this).serialize();

        $.ajax({
            url: this.action + '/resultrate/',
            data: form,
            type: 'post',
            success: function(data) {
                $("#form_rate").empty();
                $('#form_rate').append(data);
            },
            dataFilter: function(data, type) {
                $("#form_rate").empty();
                $('#form_rate').append(data);
                return;
            }
        });

        return false;
    });

    return false;
}

function addScript(src, async, callback) {
    var script,
        insert = true,
        headScripts = $('head script'),
        i;

    for (i = 0; i < headScripts.length; i++) {
        if (headScripts[i].src == src) {
            insert = false;
            break;
        }
    }

    if (insert) {
        script = document.createElement('script');
        if (async) {
            script.async = true;
        } else {
            script.async = false;
        }
        script.src = src;
        script.type = 'text/javascript';

        if (callback) {
            $(script).load(function(){
                callback();
            });
        }

        $('head').append(script);
    } else {
        if (callback) {
            callback();
        }
    }
}

function errorsPosition(error, element) {
  if(element[0].type != 'radio')
  {
      if (element.parent()[0].children.length < 2) {
          element.parent().append('<br/>');
      }
      element.parent().append(error);
  }
  else
  {
     if(element.parent().parent()[0].lastChild.nodeName.toLowerCase() != "br")
     {
        element.parent().parent().append('<br/>');
     }
     element.parent().parent().append(error);
  }
}

function clickSearchAge(){
    var form_href = $("#search_age_form").attr('action');
    var text      = $("#age").val();
    set_cookie('age', text, false);

    $.ajax({
        url  : form_href,
        data : {
            age       : text,
            pathTitle : topicMenuPathTitle
        },
        success : function(data) {
            $('.main_menu').replaceWith(data);
            initMenu();
            patchTopicMenu();
        }
    });

    return false;
}

function masterBackLink(){
    var master = $('#master');
    var item = $('.master_text div:visible', master);
    var link = $('.back a', master);

    var master_id = /.+\/(\d*)$/.exec(link[0].href);

    if (item.length) {
        activeMastersPage = item[0].id.substr(1);
    }
    var item_index;
    if (activeMastersPage) {
        item_index = $('.master_text > div', master).index($('#p' + activeMastersPage));

        if (item_index) {
            shmp($('.master_text > div', master).eq(item_index - 1)[0].id.substr(1));
        } else {
            if (master_id[1]) {
                loadCenter(master_id[0], master, true);
            } else {
                loadCenter(master_id[0]);
            }
        }
    }

    return false;
}

function masterLink(){
    loadCenter(this.href, $('#master'), true, function(){
        var item = $('.master_text div:visible', $('#master'));
        if (item.length) {
            activeMastersPage = item[0].id.substr(1);
        }
    });
    return false;
}

/**
 * Makes click on a link in the center block perform an async request
 *
 * @param {Element} container
 * @param {String} selector CSS selector for links to be patched
 * @param {Element} [targetContainer] Container to set HTML after request for
 * @param {Boolean} [replace] True if result has to replace targetContainer,
 *                            false to put result into it
 * @param {Function} [callback] Callback function to call after content was put
 */
function patchLinks(container, selector, targetContainer, replace, callback) {
    $('.center_part').on('click', container + ' ' + selector, function(){
        loadCenter(this.href, targetContainer, replace, callback);
        return false;
    });
}

function set_cookie(name, value, expires) {
    if (!expires) {
        expires = new Date();
        expires.setTime(expires.getTime() + (1000 * 86400 * 365));
    }
    document.cookie = name + "=" + escape(value) + "; expires=" + expires.toGMTString() +  "; path=/";
}
