PageSourceSearch

http://www.teoriya.ru/sites/default/files/js/js_q25OTkuUWOBii9-i6zmVffjpw2gbjj7Q2KHnTwT7uu0.js

js teoriya.ru collected 2026-09-26 02:23:00 UTC 31,099 bytes, 906 lines download raw bytes

1/**
2 * @file
3 * Colorbox module init js.
4 */
5
6(function ($) {
7
8Drupal.behaviors.initColorbox = {
9  attach: function (context, settings) {
10    if (!$.isFunction($('a, area, input', context).colorbox) || typeof settings.colorbox === 'undefined') {
11      return;
12    }
13
14    if (settings.colorbox.mobiledetect && window.matchMedia) {
15      // Disable Colorbox for small screens.
16      var mq = window.matchMedia("(max-device-width: " + settings.colorbox.mobiledevicewidth + ")");
17      if (mq.matches) {
18        return;
19      }
20    }
21
22    // Use "data-colorbox-gallery" if set otherwise use "rel".
23    settings.colorbox.rel = function () {
24      if ($(this).data('colorbox-gallery')) {
25        return $(this).data('colorbox-gallery');
26      }
27      else {
28        return $(this).attr('rel');
29      }
30    };
31
32    $('.colorbox', context)
33      .once('init-colorbox').each(function(){
34        // Only images are supported for the "colorbox" class.
35        // The "photo" setting forces the href attribute to be treated as an image.
36        var extendParams = {
37          photo: true
38        };
39        // If a title attribute is supplied, sanitize it.
40        var title = $(this).attr('title');
41        if (title) {
42          extendParams.title = Drupal.colorbox.sanitizeMarkup(title);
43        }
44        $(this).colorbox($.extend({}, settings.colorbox, extendParams));
45      });
46
47    $(context).bind('cbox_complete', function () {
48      Drupal.attachBehaviors('#cboxLoadedContent');
49    });
50  }
51};
52
53// Create colorbox namespace if it doesn't exist.
54if (!Drupal.hasOwnProperty('colorbox')) {
55  Drupal.colorbox = {};
56}
57
58/**
59 * Global function to allow sanitizing captions and control strings.
60 *
61 * @param markup
62 *   String containing potential markup.
63 * @return @string
64 *  Sanitized string with potentially dangerous markup removed.
65 */
66Drupal.colorbox.sanitizeMarkup = function(markup) {
67  // If DOMPurify installed, allow some HTML. Otherwise, treat as plain text.
68  if (typeof DOMPurify !== 'undefined') {
69    var purifyConfig = {
70      ALLOWED_TAGS: [
71        'a',
72        'b',
73        'strong',
74        'i',
75        'em',
76        'u',
77        'cite',
78        'code',
79        'br'
80      ],
81      ALLOWED_ATTR: [
82        'href',
83        'hreflang',
84        'title',
85        'target'
86      ]
87    }
88    if (Drupal.settings.hasOwnProperty('dompurify_custom_config')) {
89      purifyConfig = Drupal.settings.dompurify_custom_config;
90    }
91    return DOMPurify.sanitize(markup, purifyConfig);
92  }
93  else {
94    return Drupal.checkPlain(markup);
95  }
96}
97
98})(jQuery);
99;
100/**
101 * @file
102 * Colorbox module style js.
103 */
104
105(function ($) {
106
107Drupal.behaviors.initColorboxDefaultStyle = {
108  attach: function (context, settings) {
109    $(context).bind('cbox_complete', function () {
110      // Only run if there is a title.
111      if ($('#cboxTitle:empty', context).length == false) {
112        $('#cboxLoadedContent img', context).bind('mouseover', function () {
113          $('#cboxTitle', context).slideDown();
114        });
115        $('#cboxOverlay', context).bind('mouseover', function () {
116          $('#cboxTitle', context).slideUp();
117        });
118      }
119      else {
120        $('#cboxTitle', context).hide();
121      }
122    });
123  }
124};
125
126})(jQuery);
127;
128/**
129 * @file
130 * Colorbox module load js.
131 */
132(function ($) {
133
134Drupal.behaviors.initColorboxLoad = {
135  attach: function (context, settings) {
136    if (!$.isFunction($.colorbox) || typeof settings.colorbox === 'undefined') {
137      return;
138    }
139
140    if (settings.colorbox.mobiledetect && window.matchMedia) {
141      // Disable Colorbox for small screens.
142      var mq = window.matchMedia("(max-device-width: " + settings.colorbox.mobiledevicewidth + ")");
143      if (mq.matches) {
144        return;
145      }
146    }
147
148    $.urlParams = function (url) {
149      var p = {},
150          e,
151          a = /\+/g,  // Regex for replacing addition symbol with a space.
152          r = /([^&=]+)=?([^&]*)/g,
153          d = function (s) { return decodeURIComponent(s.replace(a, ' ')); },
154          q = url.split('?');
155      while (e = r.exec(q[1])) {
156        e[1] = d(e[1]);
157        e[2] = d(e[2]);
158        switch (e[2].toLowerCase()) {
159          case 'true':
160          case 'yes':
161            e[2] = true;
162            break;
163          case 'false':
164          case 'no':
165            e[2] = false;
166            break;
167        }
168        if (e[1] == 'width') { e[1] = 'innerWidth'; }
169        if (e[1] == 'height') { e[1] = 'innerHeight'; }
170        if (e[2]) {
171          e[2] = Drupal.checkPlain(e[2]);
172        }
173        p[e[1]] = e[2];
174      }
175      return p;
176    };
177
178    $('.colorbox-load', context)
179      .once('init-colorbox-load', function () {
180        var href = $(this).attr('href');
181
182        var params = $.urlParams(href);
183
184        // Always load in an iframe.
185        params.iframe = true;
186
187        // Set inner width and height if not already specified.
188        if (!params.hasOwnProperty('innerWidth')) {
189          params.innerWidth = $(window).width() * .8;
190        }
191        if (!params.hasOwnProperty('innerHeight')) {
192          params.innerHeight = $(window).height() * .8;
193        }
194
195        if (!params.hasOwnProperty('title')) {
196          // If a title attribute is supplied, sanitize it.
197          var title = $(this).attr('title');
198          if (title) {
199            params.title = Drupal.colorbox.sanitizeMarkup(title);
200          }
201        }
202        $(this).colorbox($.extend({}, settings.colorbox, params));
203      });
204  }
205};
206
207})(jQuery);
208;
209/**
210 * @file
211 * Colorbox module inline js.
212 */
213
214(function ($) {
215
216Drupal.behaviors.initColorboxInline = {
217  attach: function (context, settings) {
218    if (!$.isFunction($.colorbox) || typeof settings.colorbox === 'undefined') {
219      return;
220    }
221
222    if (settings.colorbox.mobiledetect && window.matchMedia) {
223      // Disable Colorbox for small screens.
224      var mq = window.matchMedia("(max-device-width: " + settings.colorbox.mobiledevicewidth + ")");
225      if (mq.matches) {
226        return;
227      }
228    }
229
230    $.urlParam = function(name, url){
231      if (name == 'fragment') {
232        var results = new RegExp('(#[^&#]*)').exec(url);
233      }
234      else {
235        var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(url);
236      }
237      if (!results) { return ''; }
238      return results[1] || '';
239    };
240    $('.colorbox-inline', context).once('init-colorbox-inline').colorbox({
241      transition:settings.colorbox.transition,
242      speed:settings.colorbox.speed,
243      opacity:settings.colorbox.opacity,
244      slideshow:settings.colorbox.slideshow,
245      slideshowAuto:settings.colorbox.slideshowAuto,
246      slideshowSpeed:settings.colorbox.slideshowSpeed,
247      slideshowStart:settings.colorbox.slideshowStart,
248      slideshowStop:settings.colorbox.slideshowStop,
249      current:settings.colorbox.current,
250      previous:settings.colorbox.previous,
251      next:settings.colorbox.next,
252      close:settings.colorbox.close,
253      overlayClose:settings.colorbox.overlayClose,
254      maxWidth:settings.colorbox.maxWidth,
255      maxHeight:settings.colorbox.maxHeight,
256      innerWidth:function(){
257        return $.urlParam('width', $(this).attr('href'));
258      },
259      innerHeight:function(){
260        return $.urlParam('height', $(this).attr('href'));
261      },
262      title:function(){
263        return Drupal.colorbox.sanitizeMarkup(
264          decodeURIComponent($.urlParam('title', $(this).attr('href'))));
265      },
266      iframe:function(){
267        return $.urlParam('iframe', $(this).attr('href'));
268      },
269      inline:function(){
270        return $.urlParam('inline', $(this).attr('href'));
271      },
272      href:function(){
273        return $.urlParam('fragment', $(this).attr('href'));
274      }
275    });
276  }
277};
278
279})(jQuery);
280;
281
282(function($) {
283
284/**
285 * Drupal FieldGroup object.
286 */
287Drupal.FieldGroup = Drupal.FieldGroup || {};
288Drupal.FieldGroup.Effects = Drupal.FieldGroup.Effects || {};
289Drupal.FieldGroup.groupWithfocus = null;
290
291Drupal.FieldGroup.setGroupWithfocus = function(element) {
292  element.css({display: 'block'});
293  Drupal.FieldGroup.groupWithfocus = element;
294}
295
296/**
297 * Implements Drupal.FieldGroup.processHook().
298 */
299Drupal.FieldGroup.Effects.processFieldset = {
300  execute: function (context, settings, type) {
301    if (type == 'form') {
302      // Add required fields mark to any fieldsets containing required fields
303      $('fieldset.fieldset', context).once('fieldgroup-effects', function(i) {
304        if ($(this).is('.required-fields') && $(this).find('.form-required').length > 0) {
305          $('legend span.fieldset-legend', $(this)).eq(0).append(' ').append($('.form-required').eq(0).clone());
306        }
307        if ($('.error', $(this)).length) {
308          $('legend span.fieldset-legend', $(this)).eq(0).addClass('error');
309          Drupal.FieldGroup.setGroupWithfocus($(this));
310        }
311      });
312    }
313  }
314}
315
316/**
317 * Implements Drupal.FieldGroup.processHook().
318 */
319Drupal.FieldGroup.Effects.processAccordion = {
320  execute: function (context, settings, type) {
321    $('div.field-group-accordion-wrapper', context).once('fieldgroup-effects', function () {
322      var wrapper = $(this);
323
324      // Get the index to set active.
325      var active_index = false;
326      wrapper.find('.accordion-item').each(function(i) {
327        if ($(this).hasClass('field-group-accordion-active')) {
328          active_index = i;
329        }
330      });
331
332      wrapper.accordion({
333        heightStyle: "content",
334        active: active_index,
335        collapsible: true,
336        changestart: function(event, ui) {
337          if ($(this).hasClass('effect-none')) {
338            ui.options.animated = false;
339          }
340          else {
341            ui.options.animated = 'slide';
342          }
343        }
344      });
345
346      if (type == 'form') {
347
348        var $firstErrorItem = false;
349
350        // Add required fields mark to any element containing required fields
351        wrapper.find('div.field-group-accordion-item').each(function(i) {
352
353          if ($(this).is('.required-fields') && $(this).find('.form-required').length > 0) {
354            $('h3.ui-accordion-header a').eq(i).append(' ').append($('.form-required').eq(0).clone());
355          }
356          if ($('.error', $(this)).length) {
357            // Save first error item, for focussing it.
358            if (!$firstErrorItem) {
359              $firstErrorItem = $(this).parent().accordion("activate" , i);
360            }
361            $('h3.ui-accordion-header').eq(i).addClass('error');
362          }
363        });
364
365        // Save first error item, for focussing it.
366        if (!$firstErrorItem) {
367          $('.ui-accordion-content-active', $firstErrorItem).css({height: 'auto', width: 'auto', display: 'block'});
368        }
369
370      }
371    });
372  }
373}
374
375/**
376 * Implements Drupal.FieldGroup.processHook().
377 */
378Drupal.FieldGroup.Effects.processHtabs = {
379  execute: function (context, settings, type) {
380    if (type == 'form') {
381      // Add required fields mark to any element containing required fields
382      $('fieldset.horizontal-tabs-pane', context).once('fieldgroup-effects', function(i) {
383        if ($(this).is('.required-fields') && $(this).find('.form-required').length > 0) {
384          $(this).data('horizontalTab').link.find('strong:first').after($('.form-required').eq(0).clone()).after(' ');
385        }
386        if ($('.error', $(this)).length) {
387          $(this).data('horizontalTab').link.parent().addClass('error');
388          Drupal.FieldGroup.setGroupWithfocus($(this));
389          $(this).data('horizontalTab').focus();
390        }
391      });
392    }
393  }
394}
395
396/**
397 * Implements Drupal.FieldGroup.processHook().
398 */
399Drupal.FieldGroup.Effects.processTabs = {
400  execute: function (context, settings, type) {
401    if (type == 'form') {
402
403      var errorFocussed = false;
404
405      // Add required fields mark to any fieldsets containing required fields
406      $('fieldset.vertical-tabs-pane', context).once('fieldgroup-effects', function(i) {
407        if ($(this).is('.required-fields') && $(this).find('.form-required').length > 0) {
408          $(this).data('verticalTab').link.find('strong:first').after($('.form-required').eq(0).clone()).after(' ');
409        }
410        if ($('.error', $(this)).length) {
411          $(this).data('verticalTab').link.parent().addClass('error');
412          // Focus the first tab with error.
413          if (!errorFocussed) {
414            Drupal.FieldGroup.setGroupWithfocus($(this));
415            $(this).data('verticalTab').focus();
416            errorFocussed = true;
417          }
418        }
419      });
420    }
421  }
422}
423
424/**
425 * Implements Drupal.FieldGroup.processHook().
426 *
427 * TODO clean this up meaning check if this is really
428 *      necessary.
429 */
430Drupal.FieldGroup.Effects.processDiv = {
431  execute: function (context, settings, type) {
432
433    $('div.collapsible', context).once('fieldgroup-effects', function() {
434      var $wrapper = $(this);
435
436      // Turn the legend into a clickable link, but retain span.field-group-format-toggler
437      // for CSS positioning.
438
439      var $toggler = $('span.field-group-format-toggler:first', $wrapper);
440      var $link = $('<a class="field-group-format-title" href="#"></a>');
441      $link.prepend($toggler.contents());
442
443      // Add required field markers if needed
444      if ($(this).is('.required-fields') && $(this).find('.form-required').length > 0) {
445        $link.append(' ').append($('.form-required').eq(0).clone());
446      }
447
448      $link.appendTo($toggler);
449
450      // .wrapInner() does not retain bound events.
451      $link.click(function () {
452        var wrapper = $wrapper.get(0);
453        // Don't animate multiple times.
454        if (!wrapper.animating) {
455          wrapper.animating = true;
456          var speed = $wrapper.hasClass('speed-fast') ? 300 : 1000;
457          if ($wrapper.hasClass('effect-none') && $wrapper.hasClass('speed-none')) {
458            $('> .field-group-format-wrapper', wrapper).toggle();
459          }
460          else if ($wrapper.hasClass('effect-blind')) {
461            $('> .field-group-format-wrapper', wrapper).toggle('blind', {}, speed);
462          }
463          else {
464            $('> .field-group-format-wrapper', wrapper).toggle(speed);
465          }
466          wrapper.animating = false;
467        }
468        $wrapper.toggleClass('collapsed');
469        return false;
470      });
471
472    });
473  }
474};
475
476/**
477 * Behaviors.
478 */
479Drupal.behaviors.fieldGroup = {
480  attach: function (context, settings) {
481    settings.field_group = settings.field_group || Drupal.settings.field_group;
482    if (settings.field_group == undefined) {
483      return;
484    }
485
486    // Execute all of them.
487    $.each(Drupal.FieldGroup.Effects, function (func) {
488      // We check for a wrapper function in Drupal.field_group as
489      // alternative for dynamic string function calls.
490      var type = func.toLowerCase().replace("process", "");
491      if (settings.field_group[type] != undefined && $.isFunction(this.execute)) {
492        this.execute(context, settings, settings.field_group[type]);
493      }
494    });
495
496    // Fixes css for fieldgroups under vertical tabs.
497    $('.fieldset-wrapper .fieldset > legend').css({display: 'block'});
498    $('.vertical-tabs fieldset.fieldset').addClass('default-fallback');
499
500    // Add a new ID to each fieldset.
501    $('.group-wrapper .horizontal-tabs-panes > fieldset', context).once('group-wrapper-panes-processed', function() {
502      // Tats bad, but we have to keep the actual id to prevent layouts to break.
503      var fieldgroupID = 'field_group-' + $(this).attr('id');
504      $(this).attr('id', fieldgroupID);
505    });
506    // Set the hash in url to remember last userselection.
507    $('.group-wrapper ul li').once('group-wrapper-ul-processed', function() {
508      var fieldGroupNavigationListIndex = $(this).index();
509      $(this).children('a').click(function() {
510        var fieldset = $('.group-wrapper fieldset').get(fieldGroupNavigationListIndex);
511        // Grab the first id, holding the wanted hashurl.
512        var hashUrl = $(fieldset).attr('id').replace(/^field_group-/, '').split(' ')[0];
513        window.location.hash = hashUrl;
514      });
515    });
516
517  }
518};
519
520})(jQuery);
521;
522(function ($) {
523
524Drupal.behaviors.ulogin_async = {};
525Drupal.behaviors.ulogin_async.attach = function(context, settings) {
526  
527  function uloginInitWidgets() {
528    $.each(Drupal.settings.ulogin, function(index, value) {
529      $('#' + value + ':not(.ulogin-processed)', context).addClass('ulogin-processed').each(function() {
530        uLogin.initWidget(value);
531      });
532    });
533  }
534  
535  if (typeof uLogin != 'undefined') {
536    uloginInitWidgets();
537  }
538  else {
539    /*$.getScript('//ulogin.ru/js/ulogin.js', function(data, textStatus, jqXHR) {
540      uloginInitWidgets();
541    });*/
542    $.ajax({
543      url: '//ulogin.ru/js/ulogin.js',
544      dataType: 'script',
545      cache: true, //otherwise will get fresh copy every page load, this is why not $.getScript().
546      success: function(data, textStatus, jqXHR) {
547        uloginInitWidgets();
548      }
549    });
550  }
551};
552
553})(jQuery);
554;
555/**
556* hoverIntent r6 // 2011.02.26 // jQuery 1.5.1+
557* <http://cherne.net/brian/resources/jquery.hoverIntent.html>
558* 
559* @param  f  onMouseOver function || An object with configuration options
560* @param  g  onMouseOut function  || Nothing (use configuration options object)
561* @author    Brian Cherne brian(at)cherne(dot)net
562*/
563(function($){$.fn.hoverIntent=function(f,g){var cfg={sensitivity:7,interval:100,timeout:0};cfg=$.extend(cfg,g?{over:f,out:g}:f);var cX,cY,pX,pY;var track=function(ev){cX=ev.pageX;cY=ev.pageY};var compare=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);if((Math.abs(pX-cX)+Math.abs(pY-cY))<cfg.sensitivity){$(ob).unbind("mousemove",track);ob.hoverIntent_s=1;return cfg.over.apply(ob,[ev])}else{pX=cX;pY=cY;ob.hoverIntent_t=setTimeout(function(){compare(ev,ob)},cfg.interval)}};var delay=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);ob.hoverIntent_s=0;return cfg.out.apply(ob,[ev])};var handleHover=function(e){var ev=jQuery.extend({},e);var ob=this;if(ob.hoverIntent_t){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t)}if(e.type=="mouseenter"){pX=ev.pageX;pY=ev.pageY;$(ob).bind("mousemove",track);if(ob.hoverIntent_s!=1){ob.hoverIntent_t=setTimeout(function(){compare(ev,ob)},cfg.interval)}}else{$(ob).unbind("mousemove",track);if(ob.hoverIntent_s==1){ob.hoverIntent_t=setTimeout(function(){delay(ev,ob)},cfg.timeout)}}};return this.bind('mouseenter',handleHover).bind('mouseleave',handleHover)}})(jQuery);;
564/*
565 * Supposition v0.2 - an optional enhancer for Superfish jQuery menu widget.
566 *
567 * Copyright (c) 2008 Joel Birch - based mostly on work by Jesse Klaasse and credit goes largely to him.
568 * Special thanks to Karl Swedberg for valuable input.
569 *
570 * Dual licensed under the MIT and GPL licenses:
571 *  http://www.opensource.org/licenses/mit-license.php
572 *  http://www.gnu.org/licenses/gpl.html
573 */
574/*
575 * This is not the original jQuery Supersubs plugin.
576 * Please refer to the README for more information.
577 */
578
579(function($){
580  $.fn.supposition = function(){
581    var $w = $(window), /*do this once instead of every onBeforeShow call*/
582    _offset = function(dir) {
583      return window[dir == 'y' ? 'pageYOffset' : 'pageXOffset']
584      || document.documentElement && document.documentElement[dir=='y' ? 'scrollTop' : 'scrollLeft']
585      || document.body[dir=='y' ? 'scrollTop' : 'scrollLeft'];
586    },
587    onHide = function(){
588      this.css({bottom:''});
589    },
590    onBeforeShow = function(){
591      this.each(function(){
592        var $u = $(this);
593        $u.css('display','block');
594        var menuWidth = $u.width(),
595        menuParentWidth = $u.closest('li').outerWidth(true),
596        menuParentLeft = $u.closest('li').offset().left,
597        totalRight = $w.width() + _offset('x'),
598        menuRight = $u.offset().left + menuWidth,
599        exactMenuWidth = (menuRight > (menuParentWidth + menuParentLeft)) ? menuWidth - (menuRight - (menuParentWidth + menuParentLeft)) : menuWidth;  
600        if ($u.parents('.sf-js-enabled').hasClass('rtl')) {
601          if (menuParentLeft < exactMenuWidth) {
602            $u.css('left', menuParentWidth + 'px');
603            $u.css('right', 'auto');
604          }
605        }
606        else {
607          if (menuRight > totalRight && menuParentLeft > menuWidth) {
608            $u.css('right', menuParentWidth + 'px');
609            $u.css('left', 'auto');
610          }
611        }
612        var windowHeight = $w.height(),
613        offsetTop = $u.offset().top,
614        menuParentShadow = ($u.closest('.sf-menu').hasClass('sf-shadow') && $u.css('padding-bottom').length > 0) ? parseInt($u.css('padding-bottom').slice(0,-2)) : 0,
615        menuParentHeight = ($u.closest('.sf-menu').hasClass('sf-vertical')) ? '-' + menuParentShadow : $u.parent().outerHeight(true) - menuParentShadow,
616        menuHeight = $u.height(),
617        baseline = windowHeight + _offset('y');
618        var expandUp = ((offsetTop + menuHeight > baseline) && (offsetTop > menuHeight));
619        if (expandUp) {
620          $u.css('bottom', menuParentHeight + 'px');
621          $u.css('top', 'auto');
622        }
623        $u.css('display','none');
624      });
625    };
626
627    return this.each(function() {
628      var o = $.fn.superfish.o[this.serial]; /* get this menu's options */
629
630      /* if callbacks already set, store them */
631      var _onBeforeShow = o.onBeforeShow,
632      _onHide = o.onHide;
633
634      $.extend($.fn.superfish.o[this.serial],{
635        onBeforeShow: function() {
636          onBeforeShow.call(this); /* fire our Supposition callback */
637          _onBeforeShow.call(this); /* fire stored callbacks */
638        },
639        onHide: function() {
640          onHide.call(this); /* fire our Supposition callback */
641          _onHide.call(this); /* fire stored callbacks */
642        }
643      });
644    });
645  };
646})(jQuery);;
647/*
648 * Superfish v1.4.8 - jQuery menu widget
649 * Copyright (c) 2008 Joel Birch
650 *
651 * Dual licensed under the MIT and GPL licenses:
652 *  http://www.opensource.org/licenses/mit-license.php
653 *  http://www.gnu.org/licenses/gpl.html
654 *
655 * CHANGELOG: http://users.tpg.com.au/j_birch/plugins/superfish/changelog.txt
656 */
657/*
658 * This is not the original jQuery Supersubs plugin.
659 * Please refer to the README for more information.
660 */
661
662(function($){
663  $.fn.superfish = function(op){
664    var sf = $.fn.superfish,
665      c = sf.c,
666      $arrow = $(['<span class="',c.arrowClass,'"> &#187;</span>'].join('')),
667      over = function(){
668        var $$ = $(this), menu = getMenu($$);
669        clearTimeout(menu.sfTimer);
670        $$.showSuperfishUl().siblings().hideSuperfishUl();
671      },
672      out = function(){
673        var $$ = $(this), menu = getMenu($$), o = sf.op;
674        clearTimeout(menu.sfTimer);
675        menu.sfTimer=setTimeout(function(){
676          o.retainPath=($.inArray($$[0],o.$path)>-1);
677          $$.hideSuperfishUl();
678          if (o.$path.length && $$.parents(['li.',o.hoverClass].join('')).length<1){over.call(o.$path);}
679        },o.delay);
680      },
681      getMenu = function($menu){
682        var menu = $menu.parents(['ul.',c.menuClass,':first'].join(''))[0];
683        sf.op = sf.o[menu.serial];
684        return menu;
685      },
686      addArrow = function($a){ $a.addClass(c.anchorClass).append($arrow.clone()); };
687
688    return this.each(function() {
689      var s = this.serial = sf.o.length;
690      var o = $.extend({},sf.defaults,op);
691      o.$path = $('li.'+o.pathClass,this).slice(0,o.pathLevels).each(function(){
692        $(this).addClass([o.hoverClass,c.bcClass].join(' '))
693          .filter('li:has(ul)').removeClass(o.pathClass);
694      });
695      sf.o[s] = sf.op = o;
696
697      $('li:has(ul)',this)[($.fn.hoverIntent && !o.disableHI) ? 'hoverIntent' : 'hover'](over,out).each(function() {
698        if (o.autoArrows) addArrow( $('>a:first-child',this) );
699      })
700      .not('.'+c.bcClass)
701        .hideSuperfishUl();
702
703      var $a = $('a',this);
704      $a.each(function(i){
705        var $li = $a.eq(i).parents('li');
706        $a.eq(i).focus(function(){over.call($li);}).blur(function(){out.call($li);});
707      });
708      o.onInit.call(this);
709
710    }).each(function() {
711      var menuClasses = [c.menuClass];
712      if (sf.op.dropShadows  && !(navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.match(/msie 6/i))) menuClasses.push(c.shadowClass);
713      $(this).addClass(menuClasses.join(' '));
714    });
715  };
716
717  var sf = $.fn.superfish;
718  sf.o = [];
719  sf.op = {};
720  sf.IE7fix = function(){
721    var o = sf.op;
722    if (navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.match(/msie /i) && o.dropShadows && o.animation.opacity!=undefined)
723      this.toggleClass(sf.c.shadowClass+'-off');
724  };
725  sf.c = {
726    bcClass: 'sf-breadcrumb',
727    menuClass: 'sf-js-enabled',
728    anchorClass: 'sf-with-ul',
729    arrowClass: 'sf-sub-indicator',
730    shadowClass: 'sf-shadow'
731  };
732  sf.defaults = {
733    hoverClass: 'sfHover',
734    pathClass: 'overideThisToUse',
735    pathLevels: 1,
736    delay: 800,
737    animation: {opacity:'show'},
738    speed: 'normal',
739    autoArrows: true,
740    dropShadows: true,
741    disableHI: false, // true disables hoverIntent detection
742    onInit: function(){}, // callback functions
743    onBeforeShow: function(){},
744    onShow: function(){},
745    onHide: function(){}
746  };
747  $.fn.extend({
748    hideSuperfishUl : function(){
749      var o = sf.op,
750        not = (o.retainPath===true) ? o.$path : '';
751      o.retainPath = false;
752      var $ul = $(['li.',o.hoverClass].join(''),this).add(this).not(not).removeClass(o.hoverClass)
753          .find('>ul').css({top: '-99999em'}).addClass('sf-hidden');
754      o.onHide.call($ul);
755      return this;
756    },
757    showSuperfishUl : function(){
758      var o = sf.op,
759        sh = sf.c.shadowClass+'-off',
760        $ul = this.addClass(o.hoverClass)
761          .find('>ul.sf-hidden').css({display: 'none', top: ''}).removeClass('sf-hidden');
762      sf.IE7fix.call($ul);
763      o.onBeforeShow.call($ul);
764      $ul.animate(o.animation,o.speed,function(){ sf.IE7fix.call($ul); o.onShow.call($ul); });
765      return this;
766    }
767  });
768})(jQuery);;
769/*
770 * Supersubs v0.2b - jQuery plugin
771 * Copyright (c) 2008 Joel Birch
772 *
773 * Dual licensed under the MIT and GPL licenses:
774 *  http://www.opensource.org/licenses/mit-license.php
775 *  http://www.gnu.org/licenses/gpl.html
776 *
777 * This plugin automatically adjusts submenu widths of suckerfish-style menus to that of
778 * their longest list item children. If you use this, please expect bugs and report them
779 * to the jQuery Google Group with the word 'Superfish' in the subject line.
780 *
781 */
782/*
783 * This is not the original jQuery Supersubs plugin.
784 * Please refer to the README for more information.
785 */
786
787(function($){ // $ will refer to jQuery within this closure
788  $.fn.supersubs = function(options){
789    var opts = $.extend({}, $.fn.supersubs.defaults, options);
790    // return original object to support chaining
791    return this.each(function() {
792      // cache selections
793      var $$ = $(this);
794      // support metadata
795      var o = $.meta ? $.extend({}, opts, $$.data()) : opts;
796      // get the font size of menu.
797      // .css('fontSize') returns various results cross-browser, so measure an em dash instead
798      var fontsize = $('<li id="menu-fontsize">&#8212;</li>').css({
799        'padding' : 0,
800        'position' : 'absolute',
801        'top' : '-99999em',
802        'width' : 'auto'
803      }).appendTo($$).width(); //clientWidth is faster, but was incorrect here
804      // remove em dash
805      $('#menu-fontsize').remove();
806
807      // Jump on level if it's a "NavBar"
808      if ($$.hasClass('sf-navbar')) {
809        $$ = $('li > ul', $$);
810      }
811      // cache all ul elements 
812      $ULs = $$.find('ul:not(.sf-megamenu)');
813      // loop through each ul in menu
814      $ULs.each(function(i) {
815        // cache this ul
816        var $ul = $ULs.eq(i);
817        // get all (li) children of this ul
818        var $LIs = $ul.children();
819        // get all anchor grand-children
820        var $As = $LIs.children('a');
821        // force content to one line and save current float property
822        var liFloat = $LIs.css('white-space','nowrap').css('float');
823        // remove width restrictions and floats so elements remain vertically stacked
824        var emWidth = $ul.add($LIs).add($As).css({
825          'float' : 'none',
826          'width'  : 'auto'
827        })
828        // this ul will now be shrink-wrapped to longest li due to position:absolute
829        // so save its width as ems. Clientwidth is 2 times faster than .width() - thanks Dan Switzer
830        .end().end()[0].clientWidth / fontsize;
831        // add more width to ensure lines don't turn over at certain sizes in various browsers
832        emWidth += o.extraWidth;
833        // restrict to at least minWidth and at most maxWidth
834        if (emWidth > o.maxWidth)    { emWidth = o.maxWidth; }
835        else if (emWidth < o.minWidth)  { emWidth = o.minWidth; }
836        emWidth += 'em';
837        // set ul to width in ems
838        $ul.css('width',emWidth);
839        // restore li floats to avoid IE bugs
840        // set li width to full width of this ul
841        // revert white-space to normal
842        $LIs.css({
843          'float' : liFloat,
844          'width' : '100%',
845          'white-space' : 'normal'
846        })
847        // update offset position of descendant ul to reflect new width of parent
848        .each(function(){
849          var $childUl = $('>ul',this);
850          var offsetDirection = $childUl.css('left')!==undefined ? 'left' : 'right';
851          $childUl.css(offsetDirection,emWidth);
852        });
853      });
854    });
855  };
856  // expose defaults
857  $.fn.supersubs.defaults = {
858    minWidth: 9, // requires em unit.
859    maxWidth: 25, // requires em unit.
860    extraWidth: 0 // extra width can ensure lines don't sometimes turn over due to slight browser differences in how they round-off values
861  };
862})(jQuery); // plugin code ends;
863/**
864 * @file
865 * The Superfish Drupal Behavior to apply the Superfish jQuery plugin to lists.
866 */
867
868(function ($) {
869  Drupal.behaviors.superfish = {
870    attach: function (context, settings) {
871      // Take a look at each list to apply Superfish to.
872      $.each(settings.superfish || {}, function(index, options) {
873        // Process all Superfish lists.
874        $('#superfish-' + options.id, context).once('superfish', function() {
875          var list = $(this);
876
877          // Check if we are to apply the Supersubs plug-in to it.
878          if (options.plugins || false) {
879            if (options.plugins.supersubs || false) {
880              list.supersubs(options.plugins.supersubs);
881            }
882          }
883
884          // Apply Superfish to the list.
885          list.superfish(options.sf);
886
887          // Check if we are to apply any other plug-in to it.
888          if (options.plugins || false) {
889            if (options.plugins.touchscreen || false) {
890              list.sftouchscreen(options.plugins.touchscreen);
891            }
892            if (options.plugins.smallscreen || false) {
893              list.sfsmallscreen(options.plugins.smallscreen);
894            }
895            if (options.plugins.supposition || false) {
896              list.supposition();
897            }
898            if (options.plugins.bgiframe || false) {
899              list.find('ul').bgIframe({opacity:false});
900            }
901          }
902        });
903      });
904    }
905  };
906})(jQuery);;

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.