(function() {


var $loaderStatusObject;
var $canvas;
$(document).ready(function() {
    $canvas = $('#canvas');
    $loaderStatusObject =
        $(document.createElement('div'))
        .addClass('loader-status')
        .appendTo($canvas)
        .ajaxStart(function() {
            $(this).removeClass('loader-error').html('Загрузка ...').show().css("top",$(document).scrollTop()+"px");
        })
        .ajaxSuccess(function() {
            $(this).hide();
        })
        .ajaxError(function() {
            $(this).addClass('loader-error').html('Ошибка').show();
        });
    $('select.person-selector').each(function() {
        this.__personSelectorObject = new PersonSelector(this);
    });
    Managers.def();
});

var Managers = new Object();
Managers.def = function() {
    var self = this;
    $('#c-alphabet a').click(function() {
        self.getClients(this.innerHTML, this);
        return false;
    });

}
Managers.clientsDef = function() {
    $('#clients-list a').click(function() { self.getClient(this); });
}
Managers.getClients = function(query, element) {
    var self = this;
    var params = { module: 'Managers'};
    params['do'] = 'get_clients';
    this.__getParams = null;
    //if (query.length == 1) {
        params['letter'] = query;
        this.__getParams = { type: 'letter', query: query, anchor: element };
    //}
    $.post('/get/', params, function(data) { self.showClients(data); }, 'xml');
}
Managers.showClients = function(data) {
    $('#c-alphabet li.active').removeClass('active');
    if (this.__getParams.anchor)  $(this.__getParams.anchor.parentNode).addClass('active');
    var $list = $('#clients-list');
    $list.empty();
    $("#client-info").html('');
    if (this.__getParams.type == 'letter') $(document.createElement('div')).addClass('letter').html(this.__getParams.query).appendTo($list);
    var html_XML = data.getElementsByTagName('html')[0];
    if (html_XML) $list.append(_getTextContent(html_XML));
    //this.def.clientsDef();
}
//Manager.getClient = function()


var PersonSelector = function(select) {
    this.select = select;
    this.setup();
}

PersonSelector.prototype = {
    setup: function() {
        var self = this;
        var nullOption = this.select.getElementsByTagName('option')[0];
        this.nullItem = { label: nullOption.innerHTML, value: nullOption.value };
        this.selectedItem = this.nullItem;
        this.groups = new Array();
        var optgroups = this.select.getElementsByTagName('optgroup');
        for (var i=0; i<optgroups.length; i++) {
            var group = {
                          label: optgroups[i].getAttribute('label'),
                          items: new Array()
                        };
            var options = optgroups[i].getElementsByTagName('option');
            for (var j=0; j<options.length; j++) {
                var item  = { label: options[j].innerHTML, value: options[j].getAttribute('value') };
                if (item.value == this.select.value) this.selectedItem = item;
                group.items.push(item);
            }
            group.useAlphabet = (group.items.length > 20);
            group.items.sort(function(a, b) {
                if (a.label < b.label)
                    return -1;
                if (a.label > b.label)
                    return 1
                return 0;
            });
            this.groups.push(group);
        }
        this.$container = $(_el('div')).addClass('person-selector').mousedown(function(e) { self.listHideShow(); e.preventDefault(); return false; });
        this.$input = $(_el('input')).attr({ type: 'hidden', value: this.selectedItem.value, name: this.select.name }).appendTo(this.$container);
        this.$label = $(_el('div')).addClass('label').html(this.selectedItem.label).appendTo(this.$container);;
        this.$container.insertBefore(this.select);
        $(this.select).remove();
    },
    listHideShow: function() {
        if (this.listShown)
            this.listHide();
        else
            this.listShow();
    },
    listShow: function() {
        var self = this;
        if (!this.$list)
            this.createList();
        this.listShown = true;
        this.$list.show();
        $canvas.one('mousedown', function(e) { self.listHide(); e.preventDefault(); return false; });
    },
    listHide: function() {
        this.listShown = false;
        this.$list.hide();
    },
    selectItem: function(item) {
        if (this.selectedItem._li)
            $(this.selectedItem._li).removeClass('active');
        this.selectedItem = item;
        if (this.selectedItem._li)
            $(this.selectedItem._li).addClass('active');
        this.$input.attr({ value: this.selectedItem.value });
        this.$label.html(this.selectedItem.label);
        this.listHide();
    },
    createList: function() {
        var self = this;
        var pos = this.$container.offset();
        pos.top += this.$container.outerHeight();
        if (this.$list)
            this.$list.remove();

        function $group(label) {
            return $(_el('div'))
                       .addClass('group')
                       .addClass('closed')
                       .append($(_el('div'))
                               .addClass('t')
                               .html(label)
                               .append(_el('ins'))
                               .click(function() { $(this.parentNode).toggleClass('closed'); })
                               )
        }
        function $item(item) {
            var li = _el('li');
            li._item = item;
            item._li = li;
            return $(li)
                    .html(item.label)
                    .click(function() { self.selectItem(this._item); })
        }
        this.$list = $(_el('div'))
                        .addClass('person-selector-popup')
                        .css({ left: pos.left,
                               top: pos.top,
                               width: this.$container.outerWidth(),
                               display: 'none' })
                        .mousedown(function(e) { e.preventDefault(); return false; })
                        .appendTo(document.body);
        if ((this.nullItem) && (this.nullItem.value == 0)) {
            $ul = $(_el('ul')).appendTo(this.$list);
            $item(this.nullItem).appendTo($ul);
        }
        for (var i=0; i<this.groups.length; i++) {
            var $g = $group(this.groups[i].label).appendTo(this.$list);
            if (this.groups[i].useAlphabet) {
                var letter = '';
                var $sg;
                var $ul;
                for (var j=0; j<this.groups[i].items.length; j++) {
                    var item = this.groups[i].items[j];
                    var l = item.label.charAt(0);
                    if (l != letter) {
                        letter = l;
                        $sg = $group(letter).appendTo($g);
                        $ul = $(_el('ul')).appendTo($sg);
                    }
                    $item(item).appendTo($ul);
                }
            } else {
                var $ul = $(_el('ul')).appendTo($g);
                for (var j=0; j<this.groups[i].items.length; j++) {
                    $item(this.groups[i].items[j]).appendTo($ul);
                }
            }
        }
        if (this.selectedItem._li) {
            $(this.selectedItem._li)
            .addClass('active')
            .parents('div.group').removeClass('closed');
        }
    }
};

var _el = window._el = function(tagName) {
    return document.createElement(tagName);
}

var _getTextContent = window._getTextContent = function(xmlElement) {
    if (xmlElement.text != undefined) return xmlElement.text;
    if (xmlElement.textContent != undefined) return xmlElement.textContent;
    if (xmlElement.firstChild != undefined) return xmlElement.firstChild.nodeValue;
    return null;
}

})();

TimeCounter = function() {
    var state = 'paused';
    var timer = null;
    var startTime = 0;
    var timeInput, startBtn;

    var value = 0;

    function parseString(str) {
        var arr = str.split(':').reverse();
        if (arr.length) {
            var val = 0;
            for (var i = 0; i < arr.length; i ++)
                val += parseInt(arr[i]) * Math.pow(60, i);
            return val;
        }
        return 0;
    }

    function valueToString(val) {
        var t = val;
        var arr = new Array();
        for (var i = 0; i < 3; i ++) {
            var s = t % 60;
            if (s < 10)
                s = '0' + s;
            arr.unshift(s);
            t = Math.floor(t / 60);
        }

        return arr.join(':');
    }

    function getTime() {
        var date = new Date();
        return Math.floor(date.getTime() / 1000);
    }

    function timerHandler() {
        value = getTime() - startTime;
        timeInput.value = valueToString(value);
    }

    function _start() {
        if (!timeInput)
            timeInput = document.getElementById('topic-time-counter');
        if (timeInput) {
            value = parseString(timeInput.value);
            startTime = getTime() - value;
            timer = window.setInterval(timerHandler, 500);
            state = 'started';
            if (startBtn)
                startBtn.innerHTML = 'Пауза';
        }
    }

    function _pause() {
        state = 'paused';
        window.clearInterval(timer);
        if (startBtn)
            startBtn.innerHTML = 'Старт';
    }

    return {
        start: function(buttonEl) {
            startBtn = buttonEl;
            if (state == 'paused') {
                _start();
            } else {
                _pause();
            }
        },
        reset: function(buttonEl) {
            _pause();
            if (!timeInput)
                timeInput = document.getElementById('topic-time-counter');
            if (timeInput) {
                value = 0;
                timeInput.value = valueToString(value);
            }
        }
    }
}();

