﻿$(document).ready(function () {
    $('div.gallery-hold').gallery({
        duration: 500,
        listOfSlides: '#gallery > li'
    });
    $('div.img-hold').gallery({
        duration: 500,
        listOfSlides: '.slide-wrapper > ul > li',
        switcher: '.paging a'
    });
    initAccordion();
    initTabs();
    $('.item-list>li.active>a').gradientText({
        colors: ['#7b3b0d', '#fa6d00', '#ff8800', '#ff8600']
    });
    $('.date>em').gradientText({
        colors: ['#7b3b0d', '#fa6d00', '#ff8800', '#ff8600']
    });
    initClearFields();
});
function initClearFields() {
    var form = jQuery('form');
    form.each(function () {
        fields = jQuery(this).find('input[type=text],textarea')
        fields.each(function () {
            var _this = jQuery(this);
            var _title = '';
            if (_this.val() != '') {
                _title = _this.val();
                _this.attr('title', _title)
            }
            _this.focus(function () {
                if (jQuery(this).val() == _title) jQuery(this).val('');
            }).blur(function () {
                if (jQuery(this).val() == '' && _title != '') jQuery(this).val(_title);
            });
        });
    });
}
/* initTabs */
function initTabs() {
    $('ul.tabset,ul.tab-paging').each(function () {
        var _list = $(this);
        var _links = _list.find('a.tab');
        _links.each(function () {
            var _link = $(this);
            var _href = _link.get(0).hash;
            var _tab = $(_href);

            if (_link.hasClass('active')) _tab.show();
            else _tab.hide();

            _link.click(function (e) {
                _links.filter('.active').each(function () {
                    $($(this).removeClass('active').get(0).hash).hide();
                });
                _link.addClass('active');
                _tab.show();
                e.preventDefault();
            });
        });
    });
}
// accordion function
function initAccordion() {
    var _activeClass = 'active';
    var _slideSpeed = 500;

    $('ul.item-list').each(function () {
        var _accordion = $(this);
        var _items = _accordion.find('li:has("ul")');
        _items.each(function () {
            var _holder = $(this);
            var _opener = _holder.find('>a');
            var _slider = _holder.find('>ul');

            _opener.click(function () {
                var _levelItems = _holder.parent().children(':has("ul")').not(_holder);

                if (_holder.hasClass(_activeClass)) {
                    _slider.slideUp(_slideSpeed, function () {
                        _holder.removeClass(_activeClass);
                    });
                } else {
                    _holder.addClass(_activeClass);
                    _slider.slideDown(_slideSpeed);

                    // collapse others
                    _levelItems.find('>ul:visible').slideUp(_slideSpeed, function () {
                        _levelItems.removeClass(_activeClass);
                    })
                }
                return false;
            });

            if (_holder.hasClass(_activeClass)) _slider.show();
            else _slider.hide();
        });
    });
}
//gallery plugin
(function ($) {
    $.fn.gallery = function (options) {
        var args = Array.prototype.slice.call(arguments);
        args.shift();
        this.each(function () {
            if (this.galControl && typeof options === 'string') {
                if (typeof this.galControl[options] === 'function') {
                    this.galControl[options].apply(this.galControl, args);
                }
            } else {
                this.galControl = new Gallery(this, options);
            }
        });
        return this;
    };
    function Gallery(context, options) { this.init(context, options); };
    Gallery.prototype = {
        options: {},
        init: function (context, options) {
            this.options = $.extend({
                duration: 700,
                slideElement: 1,
                autoRotation: false,
                effect: false,
                listOfSlides: '.list > li',
                switcher: false,
                autoSwitcher: false,
                stopOnHover: false,
                disableBtn: false,
                nextBtn: 'a.link-next, a.btn-next, a.next',
                prevBtn: 'a.link-prev, a.btn-prev, a.prev',
                circle: true,
                clone: false,
                direction: false,
                event: 'click'
            }, options || {});
            var self = this;
            this.context = $(context);
            this.initEls();
            this.list = this.els.parent();
            this.autoRotation = this.options.autoRotation;
            this.direction = this.options.direction;
            this.duration = this.options.duration;
            this.move = true;
            this.wrap = this.list.parent();
            if (this.options.nextBtn) this.nextBtn = this.context.find(this.options.nextBtn);
            if (this.options.prevBtn) this.prevBtn = this.context.find(this.options.prevBtn);

            this.calcParams(this);
            this.calcMinEls();

            if (this.options.autoSwitcher) {
                this.switcherHolder = this.context.find(this.options.switcher).empty();
                this.switchPattern = $('<ul class="' + (this.options.autoSwitcher == true ? '' : this.options.autoSwitcher) + '"></ul>');
                for (var i = 0; i < this.max + 1; i++) {
                    $('<li><a href="#">' + i + '</a></li>').appendTo(this.switchPattern);
                }
                this.switchPattern.appendTo(this.switcherHolder);
                this.switcher = this.context.find(this.options.switcher).find('li');
                this.active = 0;
            } else {
                if (this.options.switcher) {
                    this.switcher = this.context.find(this.options.switcher);
                    this.active = this.switcher.index(this.switcher.filter('.active:eq(0)'));
                }
                else this.active = this.els.index(this.els.filter('.active:eq(0)'));
            }
            if (this.active < 0) this.active = 0;
            this.last = this.active;
            if (this.options.switcher) this.switcher.removeClass('active').eq(this.active).addClass('active');
            if (this.options.clone) this.active += this.count;

            if (this.options.effect) this.els.css({ opacity: 0 }).removeClass('active').eq(this.active).addClass('active').css({ opacity: 1 }).css('opacity', 'auto');
            else {
                if (this.direction) this.list.css({ marginTop: -(this.mas[this.active]) });
                else this.list.css({ marginLeft: -(this.mas[this.active]) });
            }

            if (this.options.nextBtn) this.initEvent(this, this.nextBtn, true);
            if (this.options.prevBtn) this.initEvent(this, this.prevBtn, false);

            this.initWindow(this, $(window));

            if (this.autoRotation) this.runTimer(this);

            if (this.options.switcher) this.initEventSwitcher(this, this.switcher);
            if (this.options.disableBtn && !this.options.circle && !this.options.clone) this.disableControls();

            if (this.options.stopOnHover) this.stopHover(this);
        },
        initEls: function () {
            this.els = this.context.find(this.options.listOfSlides);
            this.count = this.els.length;
            if (this.options.clone) {
                this.list.append(this.els.clone());
                this.list.prepend(this.els.clone());
                this.els = this.context.find(this.options.listOfSlides);
            }
        },
        reCount: function () {
            this.initEls();
            this.calcParams(this);
            this.calcMinEls();
            if (this.options.effect) this.els.css({ opacity: 0 }).removeClass('active').eq(this.active).addClass('active').css({ opacity: 1 }).css('opacity', 'auto');
            else {
                if (this.direction) this.list.css({ marginTop: -(this.mas[this.active]) });
                else this.list.css({ marginLeft: -(this.mas[this.active]) });
            }
        },
        stopHover: function ($this) {
            this.context.bind('mouseenter', function () {
                $this.stop();
                $this.move = false;
            }).mouseleave(function () {
                $this.move = true;
                $this.play();
            });

        },
        calcMinEls: function () {
            if (this.sum <= (this.direction ? this.wrap.outerHeight() : this.wrap.outerWidth())) {
                if (this.options.nextBtn) this.nextBtn.css({ visibility: 'hidden' });
                if (this.options.prevBtn) this.prevBtn.css({ visibility: 'hidden' });
            }
        },
        calcParams: function (self) {
            this.mas = [];
            this.sum = 0;
            this.max = this.count - 1;
            this.width = 0;
            if (!this.options.effect) {
                this.els.each(function () { self.mas.push(self.width); self.width += self.direction ? $(this).outerHeight(true) : $(this).outerWidth(true); self.sum += self.direction ? $(this).outerHeight(true) : $(this).outerWidth(true); });
                this.finish = this.direction ? this.sum - this.wrap.outerHeight() : this.sum - this.wrap.outerWidth();
                for (var i = 0; i < this.count; i++) {
                    if (this.mas[i] >= this.finish) {
                        this.max = i;
                        break;
                    }
                }
            }
        },
        changeSettings: function (set, val) {
            this[set] = val;
        },
        fadeElement: function () {
            this.els.eq(this.last).animate({ opacity: 0 }, { queue: false, duration: this.duration });
            this.els.removeClass('active').eq(this.active).addClass('active').animate({
                opacity: 1
            }, { queue: false, duration: this.duration, complete: function () {
                $(this).css('opacity', 'auto');
            } 
            });
            if (this.options.switcher) this.switcher.removeClass('active').eq(this.active).addClass('active');
            this.last = this.active;
        },
        scrollElement: function (f) {
            if (this.direction) this.list.animate({ marginTop: f ? -this.finish : -(this.mas[this.active]) }, { queue: false, duration: this.duration });
            else this.list.animate({ marginLeft: f ? -this.finish : -(this.mas[this.active]) }, { queue: false, duration: this.duration });
            if (this.options.switcher) this.switcher.removeClass('active').eq(this.options.clone ? this.active < this.count ? this.active / this.options.slideElement : this.active >= this.count * 2 ? (this.active - this.count * 2) / this.options.slideElement : (this.active - this.count) / this.options.slideElement : this.active / this.options.slideElement).addClass('active');
        },
        runTimer: function ($this) {
            if ($this._t) clearTimeout($this._t);
            if ($this.move) {
                $this._t = setInterval(function () {
                    $this.nextStep();
                }, this.autoRotation);
            }
        },
        initEventSwitcher: function ($this, el) {
            el.bind($this.options.event, function () {
                if (!$(this).hasClass('active')) {
                    $this.active = $this.switcher.index($(this)) * $this.options.slideElement;
                    if ($this.options.clone) $this.active += $this.count;
                    $this.initMove();
                    if ($this.autoRotation) $this.runTimer($this);
                }
                return false;
            });
        },
        initEvent: function ($this, addEventEl, dir) {
            addEventEl.bind($this.options.event, function () {
                if (dir) $this.nextStep();
                else $this.prevStep();
                if ($this.autoRotation) $this.runTimer($this);
                return false;
            });
        },
        disableControls: function () {
            this.prevBtn.removeClass(this.options.disableBtn);
            this.nextBtn.removeClass(this.options.disableBtn);
            if (this.active >= this.max) this.nextBtn.addClass(this.options.disableBtn);
            if (this.active <= 0) this.prevBtn.addClass(this.options.disableBtn);
        },
        initMove: function () {
            var f = false;
            if (this.active >= this.max && !this.options.clone) {
                f = true;
                this.active = this.max;
            }
            if (this._t) clearTimeout(this._t);
            if (!this.options.effect) this.scrollElement(f);
            else this.fadeElement();
            if (this.options.disableBtn && !this.options.circle && !this.options.clone) this.disableControls();
        },
        nextStep: function () {
            var f = false;
            this.active = this.active + this.options.slideElement;
            if (this.options.disableBtn && !this.options.circle && !this.options.clone) this.disableControls();
            if (this.options.clone) {
                if (this.active > this.count * 2) {
                    if (this.direction) this.list.css({ marginTop: -this.mas[this.count] });
                    else this.list.css({ marginLeft: -this.mas[this.count] });
                    this.active = this.count + this.options.slideElement;
                }
            } else {
                if (this.active >= this.max) {
                    if (this.options.circle) {
                        if (this.active > this.max) this.active = 0;
                        else {
                            this.active = this.max;
                            f = true
                        }
                    }
                    else {
                        this.active = this.max;
                        f = true;
                    }
                }
            }
            if (!this.options.effect) this.scrollElement(f);
            else this.fadeElement();
        },
        prevStep: function () {
            var f = false;
            this.active = this.active - this.options.slideElement;
            if (this.options.disableBtn && !this.options.circle && !this.options.clone) this.disableControls();
            if (this.options.clone) {
                if (this.active < 0) {
                    if (this.direction) this.list.css({ marginTop: -this.mas[this.count] });
                    else this.list.css({ marginLeft: -this.mas[this.count] });
                    this.active = this.count - 1;
                }
            } else {
                if (this.active < 0) {
                    if (this.options.circle) {
                        this.active = this.max;
                        f = true;
                    }
                    else this.active = 0;
                }
            }
            if (!this.options.effect) this.scrollElement(f);
            else this.fadeElement();
        },
        initWindow: function ($this, $window) {
            $window.focus($.proxy(this.play, this));
            $window.blur($.proxy(this.stop, this));
        },
        stop: function () {
            if (this._t) clearTimeout(this._t);
        },
        play: function () {
            if (this.autoRotation) this.runTimer(this);
        }
    }
} (jQuery));
/**
* @author Leechy (leechy@leechy.ru)
* @link www.artlebedev.ru
* @requires jQuery
*
* Description:
* gradientText is a jQuery plugin that paints text in gradient colors
*
* Usage:
* $(selector).gradientText(config);
*
* config is an object contents configuraton paramenters:
* 	{Array} colors - array of hex colors, e.g. ['#000000', '#FFFFFF'];
* 	{Array} toProcess - array of jQuery selectors, matched elements will be toProcessed
*/

(function ($) {
    // пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ
    $.gradientText = $.gradientText || { version: '1.0' };

    $.gradientText.conf = {
        colors: ['#5f3db6', '#c10000'],
        toProcess: []
    };

    $.gradientTextSetup = function (conf) {
        $.extend($.gradientText.conf, conf);
    };

    $.fn.gradientText = function (conf) {

        // already constructed --> return API
        var el = this.data("gradientText");
        if (el) { return el; }

        // concatinate defined conf object with the user's one
        if (!conf) {
            conf = $.gradientText.conf;
        } else {
            if (typeof (conf.colors) == 'undefined') {
                conf.colors = $.gradientText.conf.colors;
            }
        }

        var aLetters = [];

        this.each(function (i) {
            aLetters[i] = new GradientLetters($(this), conf);
            $(this).data("gradientText", aLetters[i]);
        });

        $(window).load(function () {
            var iLetters_amount = aLetters.length;
            for (var i = 0; i < iLetters_amount; i++) {
                aLetters[i].update();
            }
        });

        return conf.api ? el : this;
    };


    function GradientLetters(jContainer, conf) {
        /**
        * 	пїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ,
        * 	пїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ пїЅпїЅ пїЅпїЅпїЅпїЅпїЅ
        */
        if (jContainer.find('span.gr-text').size() == 0) {
            /**
            * 	getting nodes, good enough
            * 	to be spliced in letters
            */
            var jTextNodes = jContainer.contents().filter(function () {
                return (this.nodeType == 3 && /\S/.test(this.nodeValue))
            }).wrap('<span class="gr-text" />');

            if (typeof (conf.toProcess) != 'undefined') {
                var tags = conf.toProcess.toString();

                if (tags) {
                    jTextNodes = jContainer.find(tags).contents().filter(function () {
                        return (this.nodeType == 3 && /\S/.test(this.nodeValue))
                    }).wrap('<span class="gr-text" />');
                }
            }

            /**
            * 	width of the content can be less than jContainer's width
            * 	that's why we have to use inline wrapper like span
            */
            jContainer.html('<span class="gr-wrap">' + jContainer.html() + '</span>');
            jContainer = jContainer.find('.gr-wrap');

            /**
            *	пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ пїЅ span.gr-letter.
            *	пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ
            */
            jContainer.find('span.gr-text').each(function () {
                var aText = $(this).text().split('');
                var sHTML = '';
                var iText_amount = aText.length;

                for (var i = 0; i < iText_amount; i++) {
                    if (aText[i] != ' ') {
                        sHTML += '<span class="gr-letter">' + aText[i] + '</span>';
                    } else {
                        sHTML += '<span class="gr-letter"><span style="display:none;">&#8203;</span> </span>';
                    }
                }
                $(this).html(sHTML);
            });
        }

        var jWords = jContainer.find('span.gr-text');
        var jLetters = jContainer.find('span.gr-letter');
        var iHeight = 0;

        // Convert defined hex colors to rgb-colors
        conf.RGBcolors = [];
        for (var i = 0; i < conf.colors.length; i++) conf.RGBcolors[i] = hex2Rgb(conf.colors[i]);

        /**
        * 	Measurer пїЅ пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ, пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅ,
        * 	пїЅпїЅ пїЅ пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ.
        *
        * 	пїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ:
        *	- jcommon, пїЅпїЅпїЅпїЅ пїЅпїЅ пїЅпїЅпїЅпїЅ;
        *	- measurer, пїЅпїЅпїЅпїЅ пїЅпїЅпїЅ jcommon пїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅ пїЅ measurer,
        *	- resize, пїЅпїЅпїЅпїЅ пїЅпїЅ пїЅпїЅпїЅпїЅпїЅ-пїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅ пїЅпїЅпїЅпїЅ, пїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ.
        */
        if (typeof ($c) != 'undefined') $c.measurer.bind(updateColors);
        else if (typeof ($measurer) != 'undefined') $measurer.bind(updateColors);
        else $(window).resize(updateColors);

        PaintUnderlines();

        function updateColors() {
            var iRootLeftOffset = Math.round(jContainer[0].offsetLeft),
				iRootWidth = getMaxRootWidth(iRootLeftOffset),
				jLetters_amount = jLetters.size();

            if (iRootWidth < 200) iRootWidth = 200;

            for (var i = jLetters_amount; i--; ) {
                jLetters[i].style.color = getColor(Math.round(jLetters[i].offsetLeft - iRootLeftOffset), iRootWidth);
            }
        }

        function getMaxRootWidth(iRootLeftOffset) {
            var iMaxWidth = 0;
            jWords.each(function (index) {
                var iRightEdge = Math.round(this.offsetWidth + this.offsetLeft) - iRootLeftOffset;
                if (iRightEdge > iMaxWidth) iMaxWidth = iRightEdge;
            });
            return iMaxWidth;
        }

        function getColor(iLeftOffset, iRootWidth) {
            var 
				fLeft = (iLeftOffset > 0) ? (iLeftOffset / iRootWidth) : 0;
            for (var i = 0; i < conf.colors.length; i++) {
                fStopPosition = (i / (conf.colors.length - 1));
                fLastPosition = (i > 0) ? ((i - 1) / (conf.colors.length - 1)) : 0;

                if (fLeft == fStopPosition) {
                    return conf.colors[i];
                } else if (fLeft < fStopPosition) {
                    fCurrentStop = (fLeft - fLastPosition) / (fStopPosition - fLastPosition);
                    return getMidColor(conf.RGBcolors[i - 1], conf.RGBcolors[i], fCurrentStop);
                }
            }
            return conf.colors[conf.colors.length - 1];
        }

        function getMidColor(aStart, aEnd, fMidStop) {
            var aRGBColor = [];

            for (var i = 0; i < 3; i++) {
                aRGBColor[i] = aStart[i] + Math.round((aEnd[i] - aStart[i]) * fMidStop)
            }

            return rgb2Hex(aRGBColor)
        }


        /**
        * To paint underline of gradiented text in right colors
        * every .gr-letter element has to have css rule:
        * 	text-decoration: underline;
        * so this function searching for .gr-text that is child
        * of underlined element
        */
        function PaintUnderlines() {
            /* When gradiented element contains underlined child */
            jContainer.find('.gr-text').each(function () {
                if ($(this).parent().css('text-decoration') == 'underline') {
                    $(this).parent().find('.gr-letter').css('text-decoration', 'underline');
                }
            });

            /* When gradiented element is underlined */
            if (jContainer.parent().css('text-decoration') == 'underline') {
                jContainer.find('.gr-letter').css('text-decoration', 'underline');
            }
        }

        return {
            update: updateColors
        }
    }

    /**
    * пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ HEX-пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ пїЅ RGB.
    * @param {String} hex
    * @return {Array}
    */
    function hex2Rgb(hex) {
        if ('#' == hex.substr(0, 1)) {
            hex = hex.substr(1);
        }
        if (3 == hex.length) {
            hex = hex.substr(0, 1) + hex.substr(0, 1) + hex.substr(1, 1) + hex.substr(1, 1) + hex.substr(2, 1) + hex.substr(2, 1);
        }

        return [parseInt(hex.substr(0, 2), 16), parseInt(hex.substr(2, 2), 16), parseInt(hex.substr(4, 2), 16)];
    }

    /**
    * пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ RGB-пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ пїЅ HEX.
    * @param {Array} rgb
    * @return {String}
    */
    function rgb2Hex(rgb) {
        var s = '0123456789abcdef';

        return '#' + s.charAt(parseInt(rgb[0] / 16)) + s.charAt(rgb[0] % 16) + s.charAt(parseInt(rgb[1] / 16)) +
			s.charAt(rgb[1] % 16) + s.charAt(parseInt(rgb[2] / 16)) + s.charAt(rgb[2] % 16);
    }
})(jQuery);
$measurer = function () {

    var 
		callbacks = [],
		interval = 500,
		curHeight,
		el = null,
		isInit = false,
		isDocReady = false;

    $(function () {
        isDocReady = true;
        isInit && initBlock();
    });

    function createBlock() {
        if (el == null) {
            el = $('<div></div>').css('height', '1em').css('left', '0').css('lineHeight', '1em').css('margin', '0').
			css('position', 'absolute').css('padding', '0').css('top', '-1em').css('visibility', 'hidden').
			css('width', '1em').appendTo('body');

            curHeight = el.height();
        }
    }

    function getHeight() {
        return curHeight;
    }

    function initBlock() {
        createBlock();

        $(window).resize(callFuncs);

        if ($.browser.msie) {
            el.resize(callFuncs);
            return;
        }

        curHeight = el.height();
        setInterval(function () {
            var newHeight = el.height();

            if (newHeight != curHeight) {
                curHeight = newHeight;
                callFuncs();
            }
        }, interval);
    }

    function callFuncs() {
        for (var i = 0; i < callbacks.length; i++) {
            callbacks[i]();
        }
    }

    return {
        resize: callFuncs,

        bind: function (func) {
            if (!el) {
                isInit = true;
                isDocReady && initBlock();
            }

            callbacks.push(func);
        },

        unbind: function (func) {
            for (var i = 0; i < callbacks.length; i++) {
                callbacks[i] == func && callbacks.splice(i, 1);
            }
        },

        getHeight: getHeight,
        createBlock: createBlock
    };
} ();
