﻿/* 
* Модуль Globus-select                            версия 0.91
*
* Модуль замены стандартных некроссбраузерных селектов на конструкцию тэгов
* которые визуально эмулируют селекты и поддаются любой стилизации и
* обладают функционалом стандартного селекта, причем старый селект остается
* в DOM-модели, и является верхним соседом к новому селекту и по желанию
* может быть скрыт любым способом.
*
* Разработано в Интернет-Агенстве "Глобус",       http://iaglobus.ru
* Разработчик - Кузнецов Денис Сергеевич          dkuznetsov@iaglobus.ru
*/
jQuery(document).ready(function(){
globus_select_before();/* В этой функции проходят операции до отработки Глобус-селекта, например добавления классов нужным селектам для того, чтобы на них отработал этот модуль */
globus_select_structure();/* Эта функция выстраивает структуру будущего Глобус-селекта */
globus_select_preload();/* Эта функция определяет установленные значения при загрузке страницы */
globus_select_standard_change();/* Эта функция определяет выбор значения на стандартном селекте, и передает это значение на стилизованный селект, а также установки фокуса */
globus_select_stilizied_change();/* Эта функция определяет выбор значения на стилиозванном селекте, и передает это значение на стандартный селект, а также установки фокуса */ 
globus_select_list();/* Эта функция раскрывает и прячет стилиозванный список */
globus_select_after();/* В этой функции проходят операции после отработки Глобус-селекта */
});
function globus_select_before(){
  jQuery('select#edit-where').addClass('globus-select-replace');
  //jQuery('#omgs-acts-serch-form select').addClass('globus-select-replace');
  jQuery('#omgs-acts-serch-form div div input.form-text').wrap('<div class="wrap-input" />');
  jQuery('#edit-search').attr('value','');
  jQuery('#block-gm-news-filter-form #edit-date-upto-day-wrapper').remove();
  jQuery('#block-gm-news-filter-form #edit-date-from-day-wrapper').remove();
  //jQuery('#block-gm-news-filter-form select').addClass('globus-select-replace');
}

function globus_select_send(this_element){/* Эта функция передает значение выбранного селекта из списка в видимый блок (вызывается в других функциях) */
  jQuery(this_element).parents('.globus-select').children('.globus-list-item').children('p').html(jQuery(this_element).html());
}

function globus_select_structure() {
  jQuery.each(jQuery('select.globus-select-replace'), function(){
    jQuery(this).wrap('<div class="this-select" />');
    jQuery(this).after(jQuery('<div class="globus-select"><div class="globus-list-item"><p></p></div><ul class="globus-list-drop"></ul></div>'));
    this_class=jQuery(this).attr('class');
    jQuery(this).next().addClass('collapsed');
    jQuery(this).parent().children('div.globus-select').addClass(this_class);
    var counter=0;
    if (jQuery.browser.msie && jQuery.browser.version == 6 || jQuery.browser.msie && jQuery.browser.version == 7) {jQuery('option', this).removeAttr('disabled');}
    jQuery.each(jQuery('option', this), function(){
      jQuery('ul', jQuery(this).parents('.this-select')).append(jQuery('<li></li>'));
      jQuery('ul li:eq('+counter+')', jQuery(this).parents('.this-select')).html(jQuery(this).html());
      this_class=jQuery(this).attr('class');
      if (jQuery(this).attr('disabled') == true) {this_class+='disabled'};
      jQuery('ul li:eq('+counter+')', jQuery(this).parents('.this-select')).addClass(this_class);
      counter++;
    });
    jQuery(this).removeClass('globus-select-replace').addClass('globus-select-replaced');
  });
}

function globus_select_preload() {
  jQuery.each(jQuery('select.globus-select-replaced'), function(){
    var counter=(jQuery(this).children()).index(jQuery(this).children(':selected'));
    jQuery(this).next().children().children('li:eq('+counter+')').addClass('selected');
    globus_select_send(jQuery(this).next().children().children('li.selected'));
  });
}

function globus_select_standard_change(){
  jQuery.each(jQuery('select.globus-select-replaced'), function(){
    jQuery(this).change(function(){
      var counter=(jQuery(this).children()).index(jQuery(this).children(':selected'));
      jQuery(this).next().children().children('li').removeClass('selected');
      jQuery(this).next().children().children('li:eq('+counter+')').addClass('selected');
      globus_select_send(jQuery(this).next().children().children('li.selected'));
    });
    jQuery(this).keydown(function(event){
      var counter=(jQuery(this).children()).index(jQuery(this).children(':selected'));
      if (event.keyCode == 38 && counter > 0 ) {
        counter=(jQuery(this).children()).index(jQuery(this).children(':selected').prevAll(':not(:disabled):first'));
        if (counter == -1) {counter=(jQuery(this).children()).index(jQuery(this).children(':selected'))};
        jQuery(this).next().children().children('li').removeClass('selected');
        jQuery(this).next().children().children('li:eq('+counter+')').addClass('selected');
        globus_select_send(jQuery(this).next().children().children('li.selected'));
      }
      if (event.keyCode == 40 && counter < jQuery(this).children().length-1) {
        counter=(jQuery(this).children()).index(jQuery(this).children(':selected').nextAll(':not(:disabled):first'));
        if (counter == -1) {counter=(jQuery(this).children()).index(jQuery(this).children(':selected'))}; 
        jQuery(this).next().children().children('li').removeClass('selected');
        jQuery(this).next().children().children('li:eq('+counter+')').addClass('selected');
        globus_select_send(jQuery(this).next().children().children('li.selected'));
      }
    });
    jQuery(this).focus(function(){
      jQuery(this).next().addClass('focus');
    });
    jQuery(this).blur(function(){
      jQuery(this).next().removeClass('focus');
    });
  });
}

function globus_select_stilizied_change(){
  jQuery.each(jQuery('.globus-select'), function(){
    jQuery(this).children().children('li:not(.disabled)').click(function(){
      var counter=(jQuery(this).parent().children()).index(jQuery(this));
      jQuery(this).parents('.globus-select').prev().children().eq(counter).attr('selected','selected');
      jQuery(this).parents('.globus-select').prev().change();
      globus_select_send(jQuery(this));
      jQuery(this).parents('.globus-select').removeClass('expanded').addClass('collapsed');
      jQuery(this).parent().hide();
    });
    jQuery(this).click(function(){
      jQuery(this).prev().focus(); 
      jQuery(this).addClass('focus');
    });
  });
}

function globus_select_list(){
  jQuery.each(jQuery('.globus-select'), function(){
    jQuery('.globus-list-item',jQuery(this)).click(function(){
      if (jQuery(this).parent().hasClass('collapsed')){
        jQuery(this).next().show();
        jQuery(this).parent().removeClass('collapsed').addClass('expanded');
      } else if (jQuery(this).parent().hasClass('expanded')) {
        jQuery(this).next().hide();
        jQuery(this).parent().removeClass('expanded').addClass('collapsed');
      }
    });
    jQuery(this).hover(function(){
      if (jQuery(this).hasClass('expanded')) {
        jQuery(this).removeClass('mouseleaved')
      }
    },
    function(){
      if (jQuery(this).hasClass('expanded')) {
        jQuery(this).addClass('mouseleaved')
      }
    });
  });
  jQuery('html').click(function(){
    jQuery.each(jQuery('.globus-select.mouseleaved'), function(){
      jQuery(this).removeClass('mouseleaved').removeClass('expanded').addClass('collapsed');
      jQuery('.globus-list-drop', jQuery(this)).hide();
    });
  })
}; 

function globus_select_after(){
  jQuery('#edit-where-wrapper .globus-list-item').html('');
  jQuery('#edit-where-wrapper .globus-list-drop li').click(function(){
    html=jQuery(this).html();
    jQuery('input.form-text', jQuery(this).parents('#edit-where-wrapper').next()).attr('value',html);
  }); 
}


