var initFormElements;

(function($){
    /* Disable selection for any form elements */
    $.fn.extend({
        disableSelection : function() {
            this.css('-moz-user-select', 'none');
            this.css('-webkit-user-select', 'none');
            this.css('-khtml-user-select', 'none');
            if($.browser.msie){
                this.bind('selectstart',function(){
                   return false;
                });
                this.each(function() {
                    this.unselectable = "on";
                });
            };
            if($.browser.opera){
                this.mousemove(function(){
                    if (window.getSelection) { window.getSelection().removeAllRanges(); }
                });
            };
        }
    });

    /* Active dropDown */
    var activeDropDown = '';

    $.fn.dropdown = function(options){

        options = typeof options != 'object' ? {} : options;

        /* а�аПб�аИаИ б�аОб�аМаИб�аОаВаАаНаИб� dropdown */
        options = {
            classPrefix:options.classPrefix && typeof options.classPrefix == 'string' ? options.classPrefix : 'dropDown',
            noGroupName:options.noGroupName && typeof options.noGroupName == 'string' ? options.noGroupName : 'Others',
            noNameGroup:options.noNameGroup && typeof options.noNameGroup == 'string' ? options.noNameGroup : 'Group',
            maxHeight:options.maxHeight && typeof options.maxHeight == 'number' ? options.maxHeight : 300,
            maxWidth:options.maxWidth && typeof options.maxWidth == 'number' ? options.maxWidth : 'auto'
        };

        var windowObj = $(window);

        //create cross-browser indexOf
        function arrayIndexOf(arr,obj,start){
            for (var i = (start || 0); i < arr.length; i++) {
                if (arr[i] == obj) {
                    return i;
                };
            };
            return -1;
        };

        this.each(function(){
            /* аЃаЗаНаАаЕаМ dropdown, аКаОб�аОб�б�аЙ аБб�аДаЕаМ аМаЕаНб�б�б� */
            var sel = this,
            jSel = $(sel);

            if(sel.tagName.indexOf('SELECT') != -1 && !jSel.attr('multiple')){
                var parentForm = jSel.parents('form');
                if(!parentForm.length) parentForm = $('body');
                /* а аАб�б�б�аАаВаЛб�аЕаМ tabindex аДаЛб� аПаОаЛаЕаЙ б�аОаДаИб�аЕаЛб�б�аКаОаЙ б�аОб�аМб�, аЕб�аЛаИ аОаНаИ аНаЕ аБб�аЛаИ аЗаАаДаАаНб� */
                $('button,input,select,textarea',parentForm).each(function(){
                    if(!this.tabIndex){
                        this.tabIndex = 1;
                    };
                });

                /* аЄаОб�аМаИб�б�аЕаМ аНаОаВб�аЙ dropdown */
                /* а�аАаДаАаЕаМ id аДаЛб� dropdown */
                var prefixId = (new Date().getTime()),
                dropDownId = 'dropDown' + prefixId,
                dropDownWrap = $('<div id="' + dropDownId + '" class="'+options.classPrefix+'Wrap"><div class="'+options.classPrefix+'"></div>').insertAfter(jSel),
                dropDown = dropDownWrap.children();
                dropDown.options = options;

                /* аЁаОаЗаДаАаЕаМ аПаОаЛаЕ б�аЕаЗб�аЛб�б�аАб�аА */
                /* аЃаДаАаЛб�аЕаМ аАб�б�б�аИаБб�б� name б� аЗаАаМаЕаНб�аЕаМаОаГаО б�аЛаЕаМаЕаНб�аА аИ б�аКб�б�аВаАаЕаМ аЕаГаО */
                sel.style.display = 'none';
                var dropDownResult = $('<a class="'+options.classPrefix+'Result" href="#" tabindex="'+ sel.tabIndex +'"><span class="'+options.classPrefix+'ResultCont"><span class="'+options.classPrefix+'ResultText"><span></span></span></span></a>').appendTo(dropDown),
                dropDownResultText = dropDownResult.children().children().children();

                /* а�б�аМаЕаНб�аЕаМ б�аОаКб�б� аДаЛб� б�аЛаЕаМаЕаНб�аА */
                dropDownResult/* IE6-7 Fix */
                .attr('hideFocus','true')
                /* Opera Fix */
                .css({
                   outline:'0 solid #fff'
                });

                /* аЁаОаЗаДаАаЕаМ б�б�б�аЕаЛаКб� */
                var dropDownArrow = $('<div class="'+options.classPrefix+'Arrow"><b></b></div>')
                .appendTo(dropDown);

                /* аЁаОаЗаДаАаЕаМ аВб�аПаАаДаАб�б�аИаЙ б�аПаИб�аОаК dropdown */
                var dropDownItemsId = 'dropDownItems' + prefixId,
                dropDownItemsWrap = $('<div id="'+dropDownItemsId+'" class="'+options.classPrefix+'ItemsWrap"><div class="'+options.classPrefix+'ItemsWrapTop"><b><!-- --></b><span><!-- --></span></div><div class="'+options.classPrefix+'Items"></div><div class="'+options.classPrefix+'ItemsWrapBottom"><b><!-- --></b><span><!-- --></span></div></div>').appendTo('body').css('display', 'none'),
                dropDownItems = dropDownItemsWrap.children().eq(1),
                dropDownItemsUl = $('<ul></ul>').appendTo(dropDownItems);


                var dropDownIframe = false;
                if($.browser.msie && $.browser.version == 6){
                    dropDownIframe = $('<iframe frameborder="0" scrolling="no" width="100%" height="100"></iframe>').appendTo(dropDownItemsWrap);
                };

                /* а�аНаИб�аИаАаЛаИаЗаИб�б�аЕаМ аПаЕб�аЕаМаЕаНаНб�аЕ */
                var itemIndex = 0,
                currentIndex = 0,
                keys = [],
                values = [],
                groupValues = [],
                prevented = false,
                newListItems = '',
                newListItemsArray = [],
                jOptgroup = jSel.children('optgroup');
                dropDown.initFlag = true;
                dropDown.initFlagMaxDimension = true;
                dropDown.dropDownOpen = false;
                dropDown.flagActive = false;
                dropDown.isChange = false;

                /* а�аАаПаОаЛаНб�аЕаМ аПаОаЛб� аВб�аПаАаДаАб�б�аЕаГаО б�аПаИб�аКаА dropdown */

                /* а�б�аЛаИ аНаЕб� optiongroup */
                if (jOptgroup.length == 0){
                    var jOptions = jSel.children();
                    for(var i=0;i<jOptions.length;i++){
                        var opt = jOptions.eq(i),
                        optionText = opt.text();
                        optionText = optionText.replace(/[ ]+/gi,' ');
                        optionText = optionText.replace(/(\n+)|(\r+)|((\n\r)+)/gi,'');
                        keys.push(optionText.charAt(0).toLowerCase());
                        values.push(optionText);
                        if (opt.attr('selected')){
                           currentIndex = i;
                            if($.browser.msie && $.browser.version <= 8){
                                newListItemsArray.push('<li class="'+options.classPrefix+'ItemHover"><div><span><span>'+optionText+'</span></span></div></li>');
                            }
                            else {
                                newListItems += '<li class="'+options.classPrefix+'ItemHover"><div><span><span>'+optionText+'</span></span></div></li>';
                            };
                        }
                        else {
                            if($.browser.msie && $.browser.version <= 8){
                                newListItemsArray.push('<li><div><span><span>'+optionText+'</span></span></div></li>');
                            }
                            else {
                                newListItems += '<li><div><span><span>'+optionText+'</span></span></div></li>';
                            };
                        };
                    };
                    /* а�аОаБаАаВаЛб�аЕаМ аНаОаВб�аЕ аПб�аНаКб�б� б�аПаИб�аКаА аВ ul  */
                    if($.browser.msie && $.browser.version <= 8){
                        dropDownItemsUl.html(newListItemsArray.join(''));
                    }
                    else {
                        dropDownItemsUl.html(newListItems);
                    }
                    newListItems = '';
                    /* а�б�б�аИб�б�аЕаМ аПаОаЛб�б�аИаВб�аИаЙб�б� б�аПаИб�аОаК */
                    var newLi = dropDownItemsUl.children();
                } else {
                    /* а�б�аИб�б�б�б�аВб�аЕб� optiongroup */
                    jOptions = jSel.children('option');
                    if(jOptions.length != 0){
                        jOptions.appendTo($('<optgroup label="'+options.noGroupName+'" />').appendTo(jOptgroup));
                        jOptgroup = jSel.children('optgroup');
                    };

                    for(i=0;i<jOptgroup.length;i++){
                        var jOptgroupI = jOptgroup.eq(i),
                            jOptgroupIOptions = jOptgroupI.children('option'),
                        jOptgroupITitle = jOptgroupI.attr('label');
                        jOptgroupITitle = jOptgroupITitle ? jOptgroupITitle : options.noNameGroup + i;
                        groupValues[i] = jOptgroupITitle;
                        if($.browser.msie && $.browser.version <= 8){
                            newListItemsArray.push('<li><div class="'+options.classPrefix+'GroupTitle"><span><span>'+jOptgroupITitle+'</span></span></div><ul>');
                        }
                        else {
                            newListItems += '<li><div class="'+options.classPrefix+'GroupTitle"><span><span>'+jOptgroupITitle+'</span></span></div><ul>';
                        };
                        for(var j=0;j<jOptgroupIOptions.length;j++){
                            opt = jOptgroupIOptions.eq(j);
                            optionText = opt.text();
                            keys.push(optionText.charAt(0).toLowerCase());
                            values.push(optionText);
                            if (opt.attr('selected')){
                                currentIndex = itemIndex;
                                if($.browser.msie && $.browser.version <= 8){
                                    newListItemsArray.push('<li class="'+options.classPrefix+'ItemHover"><div><span><span>'+optionText+'</span></span></div></li>');
                                }
                                else {
                                    newListItems += '<li class="'+options.classPrefix+'ItemHover"><div><span><span>'+optionText+'</span></span></div></li>';
                                };
                            }
                            else {
                                if($.browser.msie && $.browser.version <= 8){
                                    newListItemsArray.push('<li><div><span><span>'+optionText+'</span></span></div></li>');
                                }
                                else {
                                    newListItems += '<li><div><span><span>'+optionText+'</span></span></div></li>';
                                };
                            };
                            ++itemIndex;
                        };
                        if($.browser.msie && $.browser.version <= 8){
                            newListItemsArray.push('</ul></li>');
                        }
                        else {
                            newListItems += '</ul></li>';
                        };
                    };
                    /* а�аОаБаАаВаЛб�аЕаМ аНаОаВб�аЕ аПб�аНаКб�б� б�аПаИб�аКаА аВ ul  */
                    if($.browser.msie && $.browser.version <= 8){
                        dropDownItemsUl.html(newListItemsArray.join(''));
                    }
                    else {
                        dropDownItemsUl.html(newListItems);
                    }
                    newListItems = '';

                    /* а�б�б�аИб�б�аЕаМ аПаОаЛб�б�аИаВб�аИаЙб�б� б�аПаИб�аОаК */
                    var newLiGroup = dropDownItemsUl.find('>li');
                    newLi = dropDownItemsUl.find('ul li');

                };

                /* а�аЕаЛаАаЕаМ аНаЕаАаКб�аИаВаНб�аЙ аДб�аОаПаДаАб�аН б�аЛаЕаМаЕаНб� */
                if (sel.disabled) {
                    dropDown.addClass(options.classPrefix + 'Disabled');
                };

                /* а�аОаМаЕб�аАаЕаМ dropDown б�аЕаГаИ, аДаЛб� б�аПб�аАаВаЛаЕаНаИб� б�аКб�б�б�аИаЕаМ аВб�аПаАаДаАб�б�аЕаЙ б�аАб�б�аИ аПб�аИ аКаЛаИаКаЕ аНаА б�аВаОаБаОаДаНб�б� б�аАб�б�б� аДаОаКб�аМаЕаНб�аА */
                dropDownWrap[0].dropDownFlag = true;
                dropDownWrap.disableSelection();
                dropDownWrap.find('*').each(function(){
                   this.dropDownFlag = true;
                });
                dropDownItemsWrap[0].dropDownFlag = true;
                dropDownItemsWrap.disableSelection();
                dropDownItemsWrap.find('*').each(function(){
                   this.dropDownFlag = true;
                });

                var newLiLength = newLi.length;

                /* а�аНаИб�аИаАаЛаИаЗаАаНаИб� DropDown */
                sel.selectedIndex = currentIndex;
                dropDownResultText.text(newLi.eq(currentIndex).text());

                /* а�аОаЗаВб�аАб�аАаЕб� аНаОаЛб�, аЕб�аЛаИ аПаАб�аАаМаЕб�б� аНаЕ аПаЕб�аЕаВаОаДаИб�б�б� аВ б�аИб�аЛаОаВаОаЙ */
                function newParseInt(param){
                    param = parseInt(param);
                    return isNaN(param) ? 0 : param;
                };

                /* аЄб�аНаКб�аИб�, аПб�аОаИаЗаВаОаДб�б�аАб� scroll аК аВб�аБб�аАаНаНаОаМб� аПб�аНаКб�б� */
                function navigateList(){
                    prevented = true;

                    var currentElement = newLi.eq(currentIndex);
                    newLi.removeClass(options.classPrefix + 'ItemHover');
                    currentElement.addClass(options.classPrefix + 'ItemHover');

                    if(dropDown.dropDownOpen){

                        /* а�аОаЛб�б�аАаЕаМ б�аМаЕб�аЕаНаИб� б�аЛаЕаМаЕаНб�аОаВ, аДаЛб� аДаАаЛб�б�аЕаЙб�аЕаГаО аИб�аПаОаЛб�аЗаОаВаАаНаИб� */
                        var currentElementOffsetTop = currentElement.position().top,
                        currentElementHeight = currentElement.innerHeight() + newParseInt(currentElement.css('border-top-width')) + newParseInt(currentElement.css('border-bottom-width')),
                        dropDownItemsUlScrollTop = dropDownItemsUl.scrollTop();

                        /* а�б�б�аИб�аЛб�аЕаМ аНб�аЖаНб�б� аПб�аОаКб�б�б�аКб� аК аВб�аБб�аАаНаНаОаМб� б�аЛаЕаМаЕаНб�б� */
                        if(currentElementOffsetTop > dropDownItemsUlHeight - currentElementHeight){
                            if($.browser.msie && ($.browser.version == 8 || $.browser.version == 7)){
                                dropDownItems.css({visibility:'hidden'});
                                dropDownItemsUl[0].scrollTop = dropDownItemsUlScrollTop + currentElementOffsetTop - dropDownItemsUlHeight + currentElementHeight;
                                dropDownItems.css({visibility:'visible'});
                            }
                            else {
                                dropDownItemsUl[0].scrollTop = dropDownItemsUlScrollTop + currentElementOffsetTop - dropDownItemsUlHeight + currentElementHeight;
                            }
                        }
                        if(currentElementOffsetTop < 0){
                            if($.browser.msie && ($.browser.version == 8 || $.browser.version == 7)){
                                dropDownItems.css({visibility:'hidden'});
                                dropDownItemsUl[0].scrollTop = dropDownItemsUlScrollTop + currentElementOffsetTop;
                                dropDownItems.css({visibility:'visible'});
                            }
                            else {
                                dropDownItemsUl[0].scrollTop = dropDownItemsUlScrollTop + currentElementOffsetTop;
                            }
                        }
                    };

                    var text = currentElement.text();
                    sel.selectedIndex = currentIndex;
                    changeSel();
                    dropDownResultText.text(text);

                };

                /* аЄб�аНаКб�аИб�, аОаПб�аЕаДаЕаЛб�аЕб� аМаЕб�б�аО аПаОб�аВаЛаЕаНаИб� б�аПаИб�аКаА, аВб�б�аЕ аИаЛаИ аНаИаЖаЕ DropDown */
                var startDropDownWidth = false;

                var dropDownItemsWidth,
                    dropDownItemsHeight,
                    dropDownItemsUlHeight,
                    dropDownItemsUlDimDefault,
                    dropDownItemsUlPaddings,
                    dropDownItemsWidthDefault,
                    dropDownItemsHeightDefault,
                    itemMaxWidth = 0;

                function newUlPos(){
                    var windowsWidth = windowObj.width(),
                    windowHeight = windowObj.height(),
                    windowScrollTop = windowObj.scrollTop(),
                    windowScrollLeft = windowObj.scrollLeft(),
                    dropDownOffset = dropDownWrap.offset(),
                    dropDownPosY = dropDownOffset.top,
                    dropDownPosX = dropDownOffset.left,
                    dropDownWidth = dropDownWrap.width(),
                    dropDownHeight = dropDownWrap.height(),
                    topOffset = dropDownPosY + dropDownHeight,
                    leftOffset = dropDownPosX;

                    if(!startDropDownWidth){
                        startDropDownWidth = dropDownWidth;
                    }
                    else {
                        if(startDropDownWidth != dropDownWidth){
                           startDropDownWidth = dropDownWidth;
                           dropDown.initFlag = true;
                        };
                    }

                    /* а�аНаИб�аИаАаЛаИаЗаАб�аИб� DropDown */
                    dropDownItemsWrap[0].style.display = 'block';

                    if(typeof dropDownItemsUlPaddings == 'undefined'){
                        dropDownItemsUlPaddings = newParseInt(dropDownItemsUl.css('padding-top')) - newParseInt(dropDownItemsUl.css('padding-bottom'));
                    };

                    if(dropDown.initFlag){
                        dropDown.initFlag = false;

                        /* аЃб�б�аАаНаАаВаЛаИаВаАаЕаМ аНаАб�аАаЛб�аНб�аЕ аЗаНаАб�аЕаНаИб� аПаАб�аАаМаЕб�б�аОаВ б�б�аИаЛаЕаЙ */
                        dropDownItemsWrap.css({
                            width:dropDownWidth + 'px',
                            position:'absolute',
                            top: topOffset + 'px',
                            left: leftOffset + 'px'
                        });

                        dropDownItemsWidth = dropDownWidth;
                        var newWidth = dropDownItemsWidth;

                        if(dropDown.initFlagMaxDimension){
                            dropDown.initFlagMaxDimension = false;

                            dropDownItemsWrap.css({
                                whiteSpace:'nowrap',
                                overflow:'hidden'
                            });

                            var maxSymbolIndex = 0, maxSymbolLength = values[0].length;
                            /* аЃб�б�аАаНаАаВаЛаИаВаАаЕаМ аНаЕаОаБб�аОаДаИаМб�б� б�аИб�аИаНб� */
                            /* а�аПб�аЕаДаЕаЛб�аЕаМ б�аЛаЕаМаЕаНб�, аВ аКаОб�аОб�аОаМ б�аАаМб�аЙ аДаЛаИаНаНб�аЙ б�аЕаКб�б� */
                            for(i=1;i<newLiLength;i++){
                                var valuesLength = values[i].length;
                                if(valuesLength > maxSymbolLength){
                                    maxSymbolIndex = i;
                                    maxSymbolLength = valuesLength;
                                }
                            }

                            /* а�аПб�аЕаДаЕаЛб�аЕаМ аДаЛаИаНаНб� б�аОаГаЛаАб�аНаО б�б�аОаМб� б�аЛаЕаМаЕаНб�б� */
                            var spanElem = newLi.eq(maxSymbolIndex).find('div>span').css({display:'inline'}),
                            spanElemChildren = spanElem.children().css({display:'inline'}),
                            spanElemWidth = spanElem.innerWidth(),
                            spanElemOffsetLeft = spanElem.offset().left - leftOffset;
                            spanElemChildren.css({display:'none'});
                            spanElem.css({display:'block',zoom:'1'});
                            var spanElemOffsetRight = dropDownWidth - spanElem.width() - spanElemOffsetLeft;
                            spanElemChildren.css({display:'block'});
                            spanElemWidth = spanElemWidth + spanElemOffsetLeft + spanElemOffsetRight;

                            if($.browser.msie && ($.browser.version == 6 || $.browser.version == 7)){
                                spanElemWidth +=  newParseInt(spanElemChildren.css('padding-left')) + newParseInt(spanElemChildren.css('padding-right'));
                            }

                            itemMaxWidth = spanElemWidth;

                            /* а�б�аЛаИ аЕб�б�б� аГб�б�аПаПб�, аОаПб�аЕаДаЕаЛаЕб�аЕаМ б�аАаМб�аЙ аДаЛаИаНаНб�аЙ б�аЕаКб�б� аВ аГб�б�аПаПаЕ */
                            if(groupValues.length){
                                maxSymbolIndex = 0;
                                maxSymbolLength = groupValues[0].length;
                                for(i=1;i<groupValues.length;i++){
                                    valuesLength = groupValues[i].length;
                                    if(valuesLength > maxSymbolLength){
                                        maxSymbolIndex = i;
                                        maxSymbolLength = valuesLength;
                                    }
                                }
                                /* а�аПб�аЕаДаЕаЛб�аЕаМ аДаЛаИаНаНб� б�аОаГаЛаАб�аНаО б�б�аОаМб� б�аЛаЕаМаЕаНб�б� */
                                spanElem = newLiGroup.eq(maxSymbolIndex).find('div>span').css({display:'inline'});
                                spanElemChildren = spanElem.children().css({display:'inline'});
                                spanElemWidth = spanElem.innerWidth();
                                spanElemOffsetLeft = spanElem.offset().left - leftOffset;
                                spanElemChildren.css({display:'none'});
                                spanElem.css({display:'block',zoom:'1'});
                                spanElemOffsetRight = dropDownWidth - spanElem.width() - spanElemOffsetLeft;
                                spanElemChildren.css({display:'block'});
                                spanElemWidth = spanElemWidth + spanElemOffsetLeft + spanElemOffsetRight;

                                if($.browser.msie && ($.browser.version == 6 || $.browser.version == 7)){
                                    spanElemWidth +=  newParseInt(spanElemChildren.css('padding-left')) + newParseInt(spanElemChildren.css('padding-right'));
                                }

                                itemMaxWidth = itemMaxWidth > spanElemWidth ? itemMaxWidth : spanElemWidth;
                            }

                            dropDownItemsWrap.css({whiteSpace:'normal',overflow:'visible'});

                        };

                        function setWidth(){
                            if(itemMaxWidth > dropDownWidth){
                                newWidth = itemMaxWidth;
                                if(options.maxWidth != 'auto' &&  itemMaxWidth > options.maxWidth){
                                    newWidth = options.maxWidth;
                                };
                            };

                            /* а�аЕб�аЕб�б�аИб�б�аВаАаЕаМ аПаАб�аАаМаЕб�б�б� аВб�б�аОб�б� аИ аДаЛаИаНб� DropDown */
                            dropDownItemsWidth = newWidth;
                            dropDownItemsWidthDefault = dropDownItemsWidth;

                            dropDownItemsWrap.css({width:dropDownItemsWidth});
                        }
                        setWidth();

                        /* а�аАб�аАаЛб�аНб�аЙ б�аАб�б�б�аЕб� аВб�б�аОб�б� */
                        dropDownItemsHeight = dropDownItemsWrap.height();
                        /* TODO аОб�аЕаНб� аМаЕаДаЛаЕаНаНб�аЙ аПб�аОб�аЕб�б� */
                        dropDownItemsUlHeight = dropDownItemsUl.innerHeight();
                        dropDownItemsUlDimDefault = dropDownItemsHeight - dropDownItemsUlHeight;

                        dropDownItemsUl.css({overflow:'auto'});
                        /* аЃб�б�аАаНаАаВаЛаИаВаАаЕаМ аМаАаКб�аИаМаАаЛб�аНаО аВаОаЗаМаОаЖаНб�б� аВб�б�аОб�б� */
                        if(dropDownItemsUlHeight > options.maxHeight){
                            dropDownItemsUl.css({
                                height: options.maxHeight - dropDownItemsUlPaddings,
                                overflowX:'hidden'
                            });
                            dropDownItemsUlHeight = options.maxHeight + dropDownItemsUlPaddings;
                            /* а� б�б�аОаМ б�аЛб�б�аАаЕ аПаОб�аВаЛб�аЕб�б�б� аПб�аОаКб�б�б�аКаА аИ аНаАаДаО аПаЕб�аЕб�б�аИб�аАб�б� б�аАаЗаМаЕб�б� б�аИб�аИаНб� аПаОаД аНаЕб� */
                            var firstLiElement = newLi.eq(0);
                            itemMaxWidth = dropDownItemsWidth + dropDownItemsUl.innerWidth() - firstLiElement.innerWidth() +
                                           newParseInt(firstLiElement.css('border-left-width')) + newParseInt(firstLiElement.css('border-right-width'));
                            setWidth();
                        }

                        dropDownItemsHeight = dropDownItemsUlHeight + dropDownItemsUlDimDefault;
                        dropDownItemsHeightDefault = dropDownItemsHeight;

                    };

                    /* а аАб�б�б�аЕб� аПаАб�аАаМаЕб�б�аОаВ аПаОаЛаОаЖаЕаНаИб� dropDown */
                    function calculateDimension(){
						dropDownItemsWrap.removeClass(options.classPrefix + 'ItemsWrapAbove');
                        /* а�аПб�аЕаДаЕаЛб�аЕаМ б�аМаЕб�аЕаНаИаЕ б�аВаЕб�б�б� */
                        /* а�б�аОаВаЕб�б�аЕаМ, аДаОб�б�аАб�аОб�аНаО аЛаИ аМаЕб�б�аА аПаОаД select аДаЛб� DropDown б�аПаИб�аКаА аВ аВаИаДаИаМаОаЙ б�аАб�б�аИ б�аКб�аАаНаА */
                        if(windowHeight - (dropDownPosY + dropDownHeight - windowScrollTop) >= dropDownItemsHeight){
                            topOffset = dropDownPosY + dropDownHeight;
                        }
                        else {
                            /* а�б�аОаВаЕб�б�аЕаМ, аДаОб�б�аАб�аОб�аНаО аЛаИ аМаЕб�б�аА аНаАаД select аДаЛб� DropDown б�аПаИб�аКаА аВ аВаИаДаИаМаОаЙ б�аАб�б�аИ б�аКб�аАаНаА */
                            if(dropDownPosY - windowScrollTop >= dropDownItemsHeight){
                                topOffset = dropDownPosY - dropDownItemsHeight;
								dropDownItemsWrap.addClass(options.classPrefix + 'ItemsWrapAbove');
                            }
                            else {
                                /* а�аАаДаАаЕаМ аНаОаВб�б� аВб�б�аОб�б� */
                                var bottomHeight = windowHeight - (dropDownPosY + dropDownHeight - windowScrollTop),
                                topHeight = dropDownPosY - windowScrollTop;
                                dropDownItemsHeight = bottomHeight >= topHeight ? bottomHeight : topHeight;
                                dropDownItemsUlHeight = dropDownItemsHeight - dropDownItemsUlDimDefault;
                                calculateDimension();
                                return;
                            };
                        };

                        /* а�аПб�аЕаДаЕаЛб�аЕаМ б�аМаЕб�аЕаНаИаЕ б�аЛаЕаВаА */
                        /* а�б�аОаВаЕб�б�аЕаМ, аДаОб�б�аАб�аОб�аНаО аЛаИ аМаЕб�б�аА аНаАб�аИаНаАб� аОб� аЛаЕаВаОаГаО аКб�аАб� select аДаЛб� DropDown б�аПаИб�аКаА аВ аВаИаДаИаМаОаЙ б�аАб�б�аИ б�аКб�аАаНаА */
                        if(windowsWidth - (dropDownPosX - windowScrollLeft) >= dropDownItemsWidth){
                            leftOffset = dropDownPosX;
                        }
                        else {
                            /* а�б�аОаВаЕб�б�аЕаМ, аДаОб�б�аАб�аОб�аНаО аЛаИ аМаЕб�б�аА аНаАб�аИаНаАб� аОб� аПб�аАаВаОаГаО аКб�аАб� select аДаЛб� DropDown б�аПаИб�аКаА аВ аВаИаДаИаМаОаЙ б�аАб�б�аИ б�аКб�аАаНаА */
                            if(dropDownPosX - windowScrollLeft + dropDownWidth >= dropDownItemsWidth){
                                leftOffset = dropDownPosX + dropDownWidth - dropDownItemsWidth;
                            }
                            else {
                                /* а�аАаДаАаЕаМ аНаОаВб�б� б�аИб�аИаНб� */
                                var leftWidth = windowsWidth - (dropDownPosX - windowScrollLeft),
                                rightWidth = dropDownPosX - windowScrollLeft + dropDownWidth;
                                dropDownItemsWidth = leftWidth >= rightWidth ? leftWidth : rightWidth;
                                calculateDimension();
                                return;
                            };
                        };
                        dropDownItemsWrap.css({
                            width:dropDownItemsWidth  + 'px',
                            left: leftOffset + 'px',
                            top: topOffset + 'px'
                        });
                        dropDownItemsUl.css({
                            overflowY:'hidden',
                            overflowX:'hidden',
                            height:(dropDownItemsUlHeight - dropDownItemsUlPaddings) + 'px'
                        });
                        dropDownItemsUl.css({
                            overflowY:'auto'
                        });
                        if(dropDownIframe){
                            dropDownIframe[0].style.height = dropDownItemsHeight + 'px';
                        }
                        dropDownItemsHeight = dropDownItemsHeightDefault;
                        dropDownItemsWidth = dropDownItemsWidthDefault;
                        dropDownItemsUlHeight = dropDownItemsHeight - dropDownItemsUlDimDefault;
                    };

                    calculateDimension();
                };

                /* аЁаОаБб�б�аИб� аИаЗаМаЕаНаЕаНаИб� аЗаНаАб�аЕаНаИб� аВ select */
                sel._onchange = typeof sel.onchange == 'function' ? sel.onchange : function(){};
                sel.onchange = function(){
                    return false;
                };
                function changeSel(){
                    if(prevented){
                        if(dropDown.isChange){
                            jSel.change();
                            sel._onchange();
                            dropDown.isChange = false;
                        };
                        prevented = false;
                    };
                }
                function prevSel(){
                    //stop change function from firing
                    if(!prevented){
                        currentIndex = sel.selectedIndex;
                        navigateList(currentIndex);
                    };
                }
                sel.prevSel = prevSel;
                jSel.bind('change',sel.prevSel);

                /* аЁаКб�б�б�аИаЕ DropDown */
                function hideDropDown(){
                    dropDown.removeClass(options.classPrefix + 'Expand');
                    dropDown.dropDownOpen = false;
                    dropDownItemsWrap[0].style.display = 'none';
                    prevLiElem = false;
                    buttonDown = false;
                };

                /* аПб�аЕаДб�аДб�б�аИаЙ аНаАаВаЕаДаЕаНаНб�аЙ б�аЛаЕаМаЕаНб� */
                var prevLiElem = false,
                /* аЄаЛаАаГ аЗаАаПб�аЕб�аА б�б�аАаБаАб�б�аВаАаИб� hover аПб�аИ аНаАаЗаАб�аИаИ аКаЛаАаВаИб�аИ */
                buttonDown = false;
                newLi.bind('mouseenter',function(){
                    if (!sel.disabled){
                        if(!buttonDown){
                            var el = $(this);
                            if(!prevLiElem){
                                newLi.eq(currentIndex).removeClass(options.classPrefix + 'ItemHover');
                            }
                            else {
                                prevLiElem.removeClass(options.classPrefix + 'ItemHover');
                            }
                            prevLiElem = el;
                            el.addClass(options.classPrefix + 'ItemHover');
                        }
                        else {
                            buttonDown = false;
                        };
                    };
                }).click(function(e){
                    if (!sel.disabled) {
                        prevented = true;
                        hideDropDown();
                        currentIndex = newLi.index(this);
                        dropDown.isChange = true;
                        //update counter
                        navigateList(currentIndex);
                        dropDownResult.focus();
                    };
                });


                //handle up and down keys
                dropDownResult.keypress(function(e){
                    if (!sel.disabled) {
                        prevented = true;
                        var keycode = e.which;
                        if (keycode == 13) {
                            if(dropDown.dropDownOpen){
                               hideDropDown();
                               var currentLi = newLi.filter('.'+options.classPrefix + 'ItemHover').eq(0);
                               currentIndex = newLi.index(currentLi);
                            };
                            dropDown.isChange = true;
                            navigateList(currentIndex);
                            return false;
                        };
                    };
                });
                dropDownResult.keydown(function(e){
                    var keycode = e.which;
                    if (!sel.disabled) {
                        prevented = true;
                        buttonDown = true;
                        switch (keycode) {
                            case 40: //down
                                if (e.altKey) {
                                    dropDownClick();
                                }
                                else {
                                    incrementList();
                                }
                                return false;
                                break;
                            case 39: //right
                                if (!options.activeResult) {
                                    incrementList();
                                    return false;
                                };
                                break;
                            case 38: //up
                                if (e.altKey) {
                                    dropDownClick();
                                }
                                else {
                                    decrementList();
                                }
                                return false;
                                break;
                            case 37: //left
                                decrementList();
                                return false;
                                break;
                            case 33: //page up
                                gotoFirst();
                                return false;
                                break;
                            case 36: //home
                                gotoFirst();
                                return false;
                                break;
                            case 34: //page down
                                gotoLast();
                                return false;
                                break;
                            case 35: //end
                                gotoLast();
                                return false;
                                break;
                            case 27:
                                hideDropDown();
                                return false;
                                break;
                            case 9:
                                blurDropDown(dropDown);
                                changeSel();
                                activeDropDown = '';
                                return true;
                                break;
                        }
                        if (keycode != 13 && !e.altKey) {
                            /* а�б�б�аНб�аЕаМ аБб�аКаВаЕаНаНаО-б�аИб�аЕб�аНб�аЙ б�аКаВаИаВаАаЛаЕаНб� аНаАаЖаАб�аОаЙ аКаЛаАаВаИб�аЕ */
                            var keyPressed = String.fromCharCode(keycode).toLowerCase();
                            /* аЁб�аАб�б� аПаОаИб�аКаА аНаАб�аИаНаАаЕб�б�б� б�аО б�аЛаЕаДб�б�б�аЕаГаО аПаОб�аЛаЕ аВб�аБб�аАаНаНаОаГаО б�аЛаЕаМаЕаНб�аА */
                            var currentKeyIndex = currentIndex + 1;
                            currentKeyIndex = arrayIndexOf(keys,keyPressed,currentKeyIndex);
                            /* а�б�аЛаИ б�аЕаЗб�аЛб�б�аАб� аНаИб�аЕаГаО аНаЕ аДаАаЛ, б�аО аНаАб�аИаНаАаЕаМ б� аНаАб�аАаЛаА б�аПаИб�аКаА */
                            if (currentKeyIndex == -1)
                                currentKeyIndex = arrayIndexOf(keys,keyPressed);
                            /* а�б�аЛаИ б�аЕаЗб�аЛб�б�аАб� аПаОаЛаОаЖаИб�аЕаЛб�аНб�аЙ - аПб�аОаИаЗаВаОаДаИаМ аВб�аБаОб� аНб�аЖаНаОаГаО б�аЕаЗб�аЛб�б�аАб�аА */
                            if (currentKeyIndex != -1){
                                currentIndex = currentKeyIndex;
                                navigateList();
                            };
                            return false;
                        };
                    };
                });

                function incrementList(){
                    if(prevLiElem){
                        currentIndex = newLi.index(prevLiElem[0]);
                        prevLiElem = false;
                    };
                    if (currentIndex < (newLiLength - 1)) {
                        ++currentIndex;
                        navigateList();
                    }
                }

                function decrementList(){
                    if(prevLiElem){
                        currentIndex = newLi.index(prevLiElem[0]);
                        prevLiElem = false;
                    };
                    if (currentIndex > 0) {
                        --currentIndex;
                        navigateList();
                    }
                }

                function gotoFirst(){
                    currentIndex = 0;
                    navigateList();
                }

                function gotoLast(){
                    currentIndex = newLiLength - 1;
                    navigateList();
                }

                function dropDownClick(){
                    if (!sel.disabled) {
                        dropDownResult.focus();
                        prevented = true;
                        if (dropDown.dropDownOpen) {
                            hideDropDown();
                        }
                        else {
                            dropDown.addClass(options.classPrefix + 'Expand');
                            //show list
                            newUlPos();
                            dropDown.dropDownOpen = true;
                            //scroll list to selected item
                            navigateList();
                        };
                    };
                };

                dropDown.click(function(){
                    dropDownClick();
                    return false;
                }).bind('mouseenter',function(){
                    if(!sel.disabled) {
                        dropDownArrow.addClass(options.classPrefix+'ArrowHover');
                    }
                }).bind('mouseleave',function(){
                    if(!sel.disabled) {
                        dropDownArrow.removeClass(options.classPrefix+'ArrowHover').removeClass(options.classPrefix+'ArrowClick');
                    }
                }).mousedown(function(){
                    if(!sel.disabled) {
                        dropDownArrow.addClass(options.classPrefix+'ArrowClick');
                    }
                }).mouseup(function(){
                    if(!sel.disabled) {
                        dropDownArrow.removeClass(options.classPrefix+'ArrowClick');
                    }
                });

                dropDownResult.focus(function(){
                    dropDown.isChange = false;
                    if (!sel.disabled) {
                        if (!dropDown.flagActive && typeof activeDropDown == 'object') {
                            blurDropDown(activeDropDown);
                            activeDropDown = dropDown;
                        };
                        if (typeof activeDropDown == 'string') {
                            activeDropDown = dropDown;
                        };
                        if(!dropDown.flagActive){
                            dropDown.addClass(options.classPrefix + 'Focus');
                        };
                        dropDown.flagActive = true;
                    };
                });

                //add classes on hover
                dropDownResult.bind('mouseenter',function(e){
                    if (!sel.disabled) {
                        dropDownResult.addClass('dropDownResultHover');
                    };
                })
                .bind('mouseleave',function(e){
                    if (!sel.disabled) {
                        dropDownResult.removeClass('dropDownResultHover');
                    };
                });
                dropDownItemsUl.scroll(function(){
                    dropDownResult.focus();
                    return false;
                });

            }
        });

        function blurDropDown(elem){
            if(elem){
                elem.removeClass(elem.options.classPrefix + 'Focus').removeClass(elem.options.classPrefix + 'Expand');
                document.getElementById(elem.parent().attr('id').replace('dropDown', 'dropDownItems')).style.display = 'none';
                elem.dropDownOpen = false;
                elem.flagActive = false;
                elem.isChange = true;
                activeDropDown = '';
            }
        };

        /* аЄаЛаАаГ, аОаПб�аЕаДаЕаЛб�аЕб� аНаАб�аОаДаИаЛб�б� аЛаИ аКб�б�б�аОб� аВ аМаОаМаЕаНб� б�аЕб�аАаЙаЗаА аВ аДаОаКб�аМаЕаНб�аА.
        *  а�аН аНб�аЖаЕаН аДаЛб� IE - аПаОб�аОаМб� б�б�аО б� аНаЕаГаО б�аЕб�аАаЙаЗ аПб�аОаИб�б�аОаДаИб� аПб�аИ аПаОб�аВаЛаЕаНаИаИ б�аКб�аОаЛаЛаИаНаГаА.
        */
        var documentLeaveflag = false;
        $(document).mousedown(function(e){
            if(activeDropDown){
                if(!('dropDownFlag' in e.target)){
                    blurDropDown(activeDropDown);
                };
            };
        })
        .bind('mouseenter',function(){
            documentLeaveflag = false;
        })
        .bind('mouseleave',function(){
            documentLeaveflag = true; 
        });

        windowObj.resize(function(){
            if(activeDropDown){
                if(activeDropDown.dropDownOpen && documentLeaveflag){
                    blurDropDown(activeDropDown);
                };
            };
        }).scroll(function(){
            if(activeDropDown){
                if(activeDropDown.dropDownOpen){
                    blurDropDown(activeDropDown);
                };
            };
        });
		
        /* а�аЕб�аОаД, аПб�аИаМаЕаНб�аЕб�б�б� аК аОаБб�аЕаКб�б� jQuery аОб� select б�аЛаЕаМаЕаНб�аА. а�б�аОаИаЗаВаОаДаИб� аОаБаНаОаВаЛаЕаНаИаЕ custom select */
        $.fn.dropdownRefresh = function(){
            this.each(function(){
                var el = $(this);
                if(this.tagName.indexOf('SELECT') != -1 && !el.attr('multiple')){
                    var dropDown = el.next(),
                    dropDownItems = $('#' + dropDown.attr('id').replace('dropDown', 'dropDownItems'));
                    dropDown.remove();
                    dropDownItems.remove();
                    el.unbind('change',this.prevSel);
                    this.onchange = this._onchange;
                };
            }).dropdown(options);
            return this;
        };
        /* а�аЕб�аОаД, аПб�аИаМаЕаНб�аЕб�б�б� аК аОаБб�аЕаКб�б� jQuery аОб� select б�аЛаЕаМаЕаНб�аА. а�б�аОаИаЗаВаОаДаИб� б�аДаАаЛаЕаНаИаЕ custom select аИ б�аАаМаОаГаО select */
        $.fn.dropdownRemove = function(){
            this.each(function(){
               var el = $(this);
               if(this.tagName.indexOf('SELECT') != -1 && !el.attr('multiple')){
                   var dropDown = el.next(),
                   dropDownItems = $('#' + dropDown.attr('id').replace('dropDown', 'dropDownItems'));
                   el.remove();
                   dropDown.remove();
                   dropDownItems.remove();
               };
            });
            return this;
        };
        /* а�аЕб�аОаД, аПб�аИаМаЕаНб�аЕб�б�б� аК аОаБб�аЕаКб�б� jQuery аОб� select б�аЛаЕаМаЕаНб�аА. а�б�аОаИаЗаВаОаДаИб� б�аДаАаЛаЕаНаИаЕ custom select б� аПаОаКаАаЗб�аВаАаНаИаЕаМ select */
        $.fn.dropdownDeleteStyle = function(){
            this.each(function(){
                var el = $(this);
                if(this.tagName.indexOf('SELECT') != -1 && !el.attr('multiple')){
                    var dropDown = el.next(),
                    dropDownItems = $('#' + dropDown.attr('id').replace('dropDown', 'dropDownItems'));
                    dropDown.remove();
                    dropDownItems.remove();
                    el.unbind('change',this.prevSel);
                    el.change(function(){
                        this._onchange();
                    });
                    el.css({display:'block'});
                };
            });
            return this;
        };

        return this;
    };
	
	$(function(){
		$('div.course-select select').dropdown({maxWidth:258})
	});
	
})(jQuery);
