
// Custom select functions
function initializeSelect(containerSelector) {
    jQuery('.select-outline', containerSelector).remove();
    jQuery('select:not(.normal)', containerSelector).before('<span class="select-outline"><span class="select-text"><span class="stext-inner"></span></span><div class="sub-select"><div class="sub-center"><div class="sub-center-inner"></div></div></div></span>')
                           .addClass('hiddenSelect').hide();
    
    jQuery('.select-outline', containerSelector).each(function() {
        jQuery(this).find('.select-text > span').text(jQuery(this).next('.hiddenSelect').find('option:selected').text());
        
        if ( jQuery.browser.msie && jQuery.browser.version == 6 ) {
            jQuery(this).find('.select-text > span')
                .css('width',jQuery(this).width() - parseInt(jQuery(this).find('.select-text').css('padding-left')) - parseInt(jQuery(this).find('.select-text').css('padding-right'))+'px');
        }
        
        jQuery(this).find('.select-text').attr('id',(jQuery(this).next('.hiddenSelect').find('option:selected').attr('value')));
        
        // Add options to the custom select
        addSuboption(jQuery(this));
        
        // Add first and last item classes
        jQuery(this).find('.sub-option:eq(0)').addClass('first');
        jQuery(this).find('.sub-option:last').addClass('last');
        
        // Add decoration divs
        jQuery(this).find('.sub-center').before('<div class="sub-top"><div class="sub-top-inner"></div></div>');
        jQuery(this).find('.sub-center').after('<div class="sub-bot"><div class="sub-bot-inner"></div></div>');
    });
    
    jQuery('.select-outline', containerSelector).each(function() {
        //resizeSelect(jQuery(this));
    });
}

function addSuboption(elem) {
    elem.next('.hiddenSelect').find('option').each(function() {
        elem.find('.sub-center .sub-center-inner').append('<div class="sub-option ' + jQuery(this).attr('value') + '" title="' + jQuery(this).attr('value') + '">' + jQuery(this).text() + '</div>');
        elem.change(function() {
            jQuery(this).next('.hiddenSelect').change();
        });
    })
}

function resizeSelect(select) {
    var fontSize = parseInt(jQuery(select).css('font-size')) / 2;
    var strLength = 0;
    jQuery('.sub-select .sub-option', select).each(function() {
        strLength = jQuery(this).html().length > strLength ? jQuery(this).html().length : strLength;
    });
    var selectSize = fontSize * strLength;
    jQuery('.select-text', select).css('width', selectSize + 'px');
    
    selectSize += parseInt(jQuery(select).css('padding-left'));
    selectSize += parseInt(jQuery('.select-text', select).css('padding-right'));
    
    jQuery('.sub-select', select).css('width', selectSize + 'px');
}

jQuery(document).ready(function(){
	// Custom selects block
    initializeSelect('body');
    
    // Custom selects events initialization
    jQuery('.select-outline').live('mouseenter mouseleave', function() {
        jQuery(this).toggleClass('select-hover')
    }).live('click', function() {
        jQuery(this).find('.sub-select').find('.sub-option').removeAttr('ch').end().toggle();
        jQuery(this).toggleClass('select-active');
        jQuery(this).find('.sub-select').find('.sub-option[class~="' + jQuery(this).attr('id') + '"]').hide();
        
        return false;
    });
    
    jQuery('.sub-option').live('click', function() {
        
        var index = jQuery(this).parent().find('div').index(jQuery(this));
        
        jQuery(this).parents('.select-outline').find('.select-text').attr('id', jQuery(this).attr('title'));
        jQuery(this).parents('.select-outline').find('.sub-option').show();
        jQuery(this).parents('.select-outline').find('.select-text > span').text(jQuery(this).text());
        jQuery(this).parents('.select-outline').next('select.hiddenSelect').find('option').removeAttr('selected').eq(index).attr('selected', 'selected');
        jQuery(this).parents('.select-outline').next('select.hiddenSelect').change();
        jQuery(this).parents('.select-outline').find('.select-text > span').width('auto');//.css('width',width_+'px');
        if (jQuery(this).hasClass('sub-option-active')) return false;
    }).live('mouseenter mouseleave', function() {
        jQuery(this).toggleClass('sub-option-hover');
    });
    
    jQuery(document).click(function(e){
      var class_num = '';
      try {
        class_num = e.target.className.split(" ")
      } catch(err) {}
      if (class_num[class_num.length-1] != 'sub-option-active') {
        if ((e.target.className != 'select-text')&&(e.target.className != 'stext-inner')) {
          jQuery('.sub-select').hide();
          jQuery('.sub-option-active').removeClass('sub-option-active');
          jQuery('.select-outline').removeClass('select-active');
        } else {
          var index = jQuery('.select-outline').index(jQuery(e.target).parents('.select-outline'));
          jQuery('.select-outline').each(function(i){
            if (i != index) {
              jQuery(this).removeClass('select-active').find('.sub-select').hide();
            }
          })  
        }
      }
    }).keypress(function(e){
      if (jQuery('.select-active').length > 0) {
        if (e.charCode == 13) {
          jQuery(document).click();
          return false;
        }
        var ch = String.fromCharCode(e.which).toLowerCase(),
            ch_flag = false,
            sel_active = jQuery('.select-active');
        
        for (i=0;i<sel_active.find('.sub-option').length;i++) {
          if (sel_active.find('.sub-option').eq(i).attr('ch') != ch) {
            if (sel_active.find('.sub-option').eq(i).text().slice(0,1).toLowerCase() == ch) {
              if (!ch_flag)
                sel_active.find('.sub-option').removeAttr('ch')
              sel_active.find('.sub-option').removeClass('sub-option-active')
                                            .eq(i).addClass('sub-option-active')
                                            .attr('ch',ch)
                                            .click();
              break;
            }
          } else {
            ch_flag = true;
            sel_active.find('.sub-option').removeClass('sub-option-active')
          }
          if (i==sel_active.find('.sub-option').length-1) {
            if (ch_flag)
              sel_active.find('.sub-option[ch='+ch+']').eq(0).addClass('sub-option-active').click();
            sel_active.find('.sub-option:not(.sub-option-active)').removeAttr('ch')
          }
        }
      }
    })
});
