/**
 * aka void main()
 */
$(function() {
    Promass.initAjax();
    Promass.Gallery();
    Promass.Today();
    Promass.LeftMenu.init();
    Promass.Calendar.init();

    if (Promass.interfaceName === 'contacts_cat'){
        Promass.Contacts.init();
    }
    if (Promass.interfaceName === 'tor_catalog'){
        Promass.Map.init();
    }

});


/**
 * Глобальный неймспейс
 */
Promass = new Object();

/** @type {Object} неймспейс проекта */
Promass = function(undef) {
    return {
        undefined : undef
    }
}();

//----- Общие настройки---------------------------------------------------------

/** @type {String} url для ajax запроса */
Promass.AJAX_URI = '/json/';

/** @type {Number} Значение прозрачности для оверлея */
Promass.overlayOpacity = 0.6;

/** @type {string} Значение цвета для оверлея */
Promass.overlayColor = "#333333";

/** @type {String} id сессии из командной строки */
Promass.SESS_ID = '';
if (window.location.toString().match(/SESS_ID=(\d+)/))
    Promass.SESS_ID = RegExp.$1;

//------------------------------------------------------------------------------

//----- Общие функции ----------------------------------------------------------

/**
 * Выполняет Ajax запрос с JSON-ответом
 * @param {Object} data Данные
 * @param {Function} handler Обработчик
 */
Promass.getJSON = function(data, handler) {
    if (Promass.SESS_ID)
        data['SESS_ID'] = Promass.SESS_ID;
    $.post(Promass.AJAX_URI, data, handler, 'json');
}

/**
 * Настройки для Ajax запросов
 */
Promass.initAjax = function() {
    var $body = $(document.body);
    function waitingState(state) {
        if (state) {
            $body.addClass('waiting');
        } else {
            $body.removeClass('waiting');
        }
    }

    $(document)
        .ajaxStart(function() {
            waitingState(true);
        })
        .ajaxStop(function() {
            waitingState(false);
        })
        .ajaxError(function(event, XMLHttpRequest, ajaxOptions, thrownError) {
            alert('Произошла ошибка при загрузки данных. Попробуйте перезагрузить страницу.');
            waitingState(false);
        });
}

/**
 *  Слой - оверлей
 */
Promass.Overlay = function(){
    var $overlay = null;

    function _show(){
        if (!$overlay){
              $overlay = $(document.createElement('div'))
                         .addClass('overlay')
                         .css({
                              opacity: Promass.overlayOpacity
                         }).hide()
                         .appendTo(document.body);
        }
        $overlay.show();
        if (Browser.isIE6)
            $overlay.css({
                position : 'absolute',
                height : document.body.scrollHeight
            });
    }

    function _hide(){
        $overlay.hide();
    }

    return {
        show: function(){
            _show();
        },
        hide: function(){
            _hide();
        },
        onclick: function(handler){
            $overlay.unbind("click");
            $overlay.click(handler);
        }
    }
}();

//------------------------------------------------------------------------------

//----- Интерфейсные функции ---------------------------------------------------

/**
 * Обработчик галерей
 */
Promass.Gallery = function(){
    $(".gallery a, a.fancy").fancybox({ overlayOpacity: Promass.overlayOpacity,
                                        overlayColor: Promass.overlayColor,
                                        titlePosition: "over"})
}
/* ------------------------------- */

/**
 *  Показ текущей даты и дня недели в шапке сайта
 */
Promass.Today = function(){
    var today = $("#today");
    var weekdays = ["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота"];
    var months = ["января","февраля","марта","aпреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"];
    var date = new Date();
    today.append("Сегодня: <span class='tdt'><strong>"+date.getDate()+"</strong> "+months[date.getMonth()]+" <strong>"+date.getFullYear()+" г.</strong></span>");
}


/**
 * Обработчик сворачивания и разворачивания левого меню
 */
Promass.LeftMenu = function(){
    var $menu;

    function setup(){
        $menu.find(".mi").each(function(){
                var $this = $(this);
                var $ul = $this.find("ul");
                if($ul.length>0){
                    $this.find(".ma").click(function(){ _toggle(this.parentNode); return false;});
                    if(!$this.hasClass("active")){
                        $ul.hide();
                    }else{
                        $ul.show();
                    }
                }
            });
    }

    function _toggle(el){
        var $this = $(el);
        if($this.hasClass("active")){
            $this.find("ul").slideUp(300,function(){ $this.removeClass("active") });
        }else{
            $this.find("ul").slideDown(300,function(){  $this.addClass("active") });

        }
    }

    return {
        init: function(){
            $menu = $("#lmenu");
            if($menu.length>0){
                setup();
            }
        }
    }
}();
/* ------------------------------- */

/**
 * Инициализатор для календаря
 */
Promass.Calendar = function(){

    var pp_shown = false;
    var $popup = null;

    function setup(date) {
        if (!date) {
            if (FCalendar.$('event-date-form').dd.value.match(/(\d+)\-(\d+)\-(\d+)/)) {
                var tmpDate = new Date();
                tmpDate.setDate(RegExp.$3);
                tmpDate.setMonth(RegExp.$2-1);
                tmpDate.setYear(RegExp.$1);
                date = tmpDate.getTime();
            }
        }
        FCalendar.setup({
            date: date,
            onSelect: send,
            showOthers: false,
            ajaxCheck: true,
            defaultCheckType: 'enable',
            ajaxRequest: '/xml/?_do=calendar',
            DOMcontainer: 'event-calendar'
        });
    }



    function send(date,el) {
        if((pp_shown)&&($popup)) $popup.hide();

        if(!$popup){
            $popup = $(document.createElement("div"))
                            .addClass("popup")
                            .hide()
                            .appendTo(document.body);
        }

        var position = $(el).offset();
        //console.log(position.top + " "+ position.left);
        $popup.html("")
              .addClass("pp-loading")
              .show()
              .css({ top: (position.top + $popup.height())+"px",
                     left: ($popup.width() + position.left + 15) + "px"});
        pp_shown = true;

        var y = date.getFullYear();
        var m = date.getMonth()+1;
        var d = date.getDate();

        Promass.getJSON({ _do: "get_events",
                          date: y+'-'+m+'-'+d },function(data){ answer(data) });
    }

    function answer(json){
        if(json){
            if(json.events){
                $popup.html("").removeClass("pp-loading");
                var ul = $(document.createElement("ul"))
                            .appendTo($popup);
                for(var i=0; i<json.events.length;i++){
                    var text = json.events[i].object_name;
                    if(json.events[i].url!=""){
                        text = '<a href="'+json.events[i].url+'">'+text+'</a>';
                    }
                    $(document.createElement("li"))
                            .html(text)
                            .appendTo(ul);
                }
                $(document.createElement("a"))
                            .attr({ href: "#del",
                                    className: "pp-close" })
                            .text("Закрыть")
                            .appendTo($popup)
                            .click(function(){ $popup.hide(); pp_shown = false;  return false; });
            }
        }
    }

    return {
        init: function(){
            if($("#event-calendar").length>0){
                setup();
            }
        }
    }
}();
/* ------------------------------- */

/**
 * Обработчик страницы контактов
 */
Promass.Contacts = function() {

    var $wrap = $(), $input = $();

    var activePerson;

    function _init() {
        var $labels = $wrap.find('.label input');
        $labels
            .each(function() {
                this._label = $(this.parentNode);
                if(this._label.hasClass("chkd")){
                    activePerson = this;
                }
            })
            .click(function() {
                selectPerson(this);
            });
    }

    function selectPerson(person) {
        if (activePerson != person) {
            if (activePerson) {
                activePerson._label.removeClass('chkd');
            }
            activePerson = person;
            activePerson._label.addClass('chkd');
        }
    }

    return {
        init : function() {
            $wrap = $("#contacts-cat");
            if ($wrap.length) {
                _init();
            }
        }
    }
}();
/* ------------------------------- */


function GetUrl(url){
    if(Promass.Map.activated()){
        Promass.Map.get(url);
    }else{
        window.location.assign(url);
    }
}

/**
 * Обработчик карты
 */
Promass.Map = function() {

    var activated = false;
    var $right = null;
    var _cache = new Array();

    function setup(){
        activated = true;
        var anchor = window.location.toString().split('#')[1];
        if ((anchor)&&(/\d+/.test(anchor))) {
            get(window.location.toString());
        }else{
            $right.html("<div class='text'>Выберите район, чтобы посмотреть информацию о территориальном объединении.</div>")
        }
    }

    function get(url){
        window.location.assign(url);
        var tor_id = url.split("#")[1];
        if(_cache[tor_id]){
            $right.html(_cache[tor_id]);
        }else{
            Promass.getJSON({ _do: "get_tor",
                              tor_id: tor_id },function(data){ answer(data,tor_id) });
        }
    }

    function answer(json,tor_id){
        if(json){
            if(json.content){
                $right.html(json.content);
                _cache[tor_id] = json.content;
            }else{
                $right.html("<div class='error'>Произошла ошибка. Попробуйте еще раз.</div>")
            }
        }
    }

    return {
        init: function(){
            $right = $("#right");
            if($right.length>0){
                setup();
            }
        },
        get: function(url){
            get(url);
        },
        activated: function(){
            return activated;
        }
    }
}();
/* ------------------------------- */

//------------------------------------------------------------------------------
