PageSourceSearch

https://www.helictit.info/sites/default/files/advagg_js/js__3S7nTy…jc6Le8qq6mHSjnrYVeVaYBSWTz_ji3Wh0YZB8yYE.js

js helictit.info collected 2026-10-02 21:22:15 UTC 31,423 bytes, 817 lines download raw bytes

1/*jslint browser: true */ /*global jQuery: true */
2
3/**
4 * jQuery Cookie plugin
5 *
6 * Copyright (c) 2010 Klaus Hartl (stilbuero.de)
7 * Dual licensed under the MIT and GPL licenses:
8 * http://www.opensource.org/licenses/mit-license.php
9 * http://www.gnu.org/licenses/gpl.html
10 *
11 */
12
13// TODO JsDoc
14
15/**
16 * Create a cookie with the given key and value and other optional parameters.
17 *
18 * @example $.cookie('the_cookie', 'the_value');
19 * @desc Set the value of a cookie.
20 * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });
21 * @desc Create a cookie with all available options.
22 * @example $.cookie('the_cookie', 'the_value');
23 * @desc Create a session cookie.
24 * @example $.cookie('the_cookie', null);
25 * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain
26 *       used when the cookie was set.
27 *
28 * @param String key The key of the cookie.
29 * @param String value The value of the cookie.
30 * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
31 * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
32 *                             If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
33 *                             If set to null or omitted, the cookie will be a session cookie and will not be retained
34 *                             when the the browser exits.
35 * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
36 * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
37 * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
38 *                        require a secure protocol (like HTTPS).
39 * @type undefined
40 *
41 * @name $.cookie
42 * @cat Plugins/Cookie
43 * @author Klaus Hartl/[email protected]
44 */
45
46/**
47 * Get the value of a cookie with the given key.
48 *
49 * @example $.cookie('the_cookie');
50 * @desc Get the value of a cookie.
51 *
52 * @param String key The key of the cookie.
53 * @return The value of the cookie.
54 * @type String
55 *
56 * @name $.cookie
57 * @cat Plugins/Cookie
58 * @author Klaus Hartl/[email protected]
59 */
60jQuery.cookie = function (key, value, options) {
61
62    // key and value given, set cookie...
63    if (arguments.length > 1 && (value === null || typeof value !== "object")) {
64        options = jQuery.extend({}, options);
65
66        if (value === null) {
67            options.expires = -1;
68        }
69
70        if (typeof options.expires === 'number') {
71            var days = options.expires, t = options.expires = new Date();
72            t.setDate(t.getDate() + days);
73        }
74
75        return (document.cookie = [
76            encodeURIComponent(key), '=',
77            options.raw ? String(value) : encodeURIComponent(String(value)),
78            options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
79            options.path ? '; path=' + options.path : '',
80            options.domain ? '; domain=' + options.domain : '',
81            options.secure ? '; secure' : ''
82        ].join(''));
83    }
84
85    // key and possibly options given, get cookie...
86    options = value || {};
87    var result, decode = options.raw ? function (s) { return s; } : decodeURIComponent;
88    return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? decode(result[1]) : null;
89};
90
91;/*})'"*/
92;/*})'"*/
93(function ($) {
94Drupal.behaviors.actionZircon = {
95  attach: function (context) {
96    $(window).load(function() {
97      window.setTimeout(function() {
98        Drupal.Zircon.equalHeight($('#panel-first-wrapper .block-inner'));
99        Drupal.Zircon.equalHeight($('#panel-second-wrapper .block-inner'))
100        Drupal.Zircon.equalHeight($('#panel-third-wrapper .block-inner'));
101        Drupal.Zircon.equalHeight($('.region-content .views-view-grid .views-col .grid-inner'));
102      }, 100);
103    });
104    Drupal.Zircon.putLabelToInput("search_block_form", "Search...");
105    $('#subscribe').find('input[type="submit"]').val(Drupal.t("Go"));
106	$(".change-skin-button").click(function() {
107	  parts = this.href.split("/");
108	  style = parts[parts.length - 1];
109   	  $.cookie("nucleus_skin", style, {path: '/'});
110      window.location.reload();
111	  return false;
112    });
113	$("#change_skin_menu_wrapper").mouseenter(function() {
114      $('#change_skin_menu_wrapper').stop(true, false).animate({left: 0}, 1000);	  
115    }).mouseleave(function() {
116      $('#change_skin_menu_wrapper').stop(true, false).animate({left: -61}, 1000);
117	});	
118  }
119};
120
121Drupal.Zircon = Drupal.Zircon || {};
122
123Drupal.Zircon.putLabelToInput = function(name, text) {
124  jQuery('input[name="' + name + '"]').val(Drupal.t(text));
125  jQuery('input[name="' + name + '"]').focus(function(){
126    if(this.value == Drupal.t(text)) {
127      this.value='';
128    }
129  }).blur(function(){
130    if(this.value == '') {
131      this.value=Drupal.t(text);
132    }
133  });
134}
135
136Drupal.Zircon.equalHeight = function(elements) {
137  highest = 0;
138  elements.each(function() {
139    if($(this).innerHeight() > highest) {
140      highest = $(this).outerHeight();
141    }
142  });
143  return elements.each(function() {
144    padding = $(this).innerHeight() - $(this).height();
145    extra = padding + ($(this).outerHeight() - $(this).innerHeight());
146    if(($.browser.msie && $.browser.version == 6.0)) {
147      $(this).css({'height': highest - extra, 'overflow': 'hidden'});
148    }
149    else {
150      $(this).css({'min-height': highest - extra});
151    }
152  });
153}
154})(jQuery);
155
156;/*})'"*/
157;/*})'"*/
158(function ($) {
159  Drupal.Responsive = Drupal.Responsive || {};
160  Drupal.Responsive.supportedScreens = [0.5, 479.5, 719.5, 959.5, 1049.5];
161  Drupal.Responsive.oldWindowWidth = 0;
162  Drupal.Responsive.masonry_containers = [];
163  Drupal.Responsive.masonry_widths = [];
164
165  Drupal.Responsive.updateResponsiveMenu = function(){
166    var windowWidth = window.innerWidth ? window.innerWidth : $(window).width();
167    if ( $('#block-tb-megamenu-main-menu').length > 0 ) return;
168    
169    if(windowWidth < Drupal.Responsive.supportedScreens[3]){
170      $('.region-menu-bar').css('display', 'none');
171      $('.responsive-menu-button').css('display', 'block');
172    }
173    else{
174      $('.responsive-menu-button').css('display', 'none');
175      $('.region-menu-bar').css('display', 'block');
176    }
177  }
178
179  Drupal.Responsive.initResponsiveMenu = function(){
180    Drupal.Responsive.updateResponsiveMenu();
181    $('.tb-main-menu-button').bind('click',function(e){
182      var target = $('.region-menu-bar');
183      if(target.css('display') == 'none') {
184        window.scrollTo(0, 0);
185        target.css({display: 'block'});
186      }
187      else {
188        target.css({display: 'none'});
189      }
190    });
191  }
192
193  Drupal.Responsive.setSlideshowHeight = function() {
194    var imgs = $('#slideshow-wrapper .view .views-field img')
195    if(imgs.length) {
196      if(!Drupal.Responsive.slideshowSize) {
197        var img = new Image();
198        img.src = $(imgs[0]).attr('src');
199        Drupal.Responsive.getImageSize(img);
200        setTimeout(Drupal.Responsive.setSlideshowHeight, 200)
201        return;
202      }
203
204      var page_width = $('#page').width();
205      if(page_width < Drupal.Responsive.supportedScreens[3]) {
206        var width = Drupal.Responsive.slideshowSize.width;
207        var height = Drupal.Responsive.slideshowSize.height;
208        var new_height = Math.floor(page_width * height / width);
209        $('#slideshow-wrapper .view .views-field img, #slideshow-wrapper .view .views_slideshow_cycle_main, #slideshow-wrapper .views-slideshow-cycle-main-frame-row, #slideshow-wrapper .views-slideshow-cycle-main-frame').css({height: new_height + "px"});
210      }
211      else {
212        $('#slideshow-wrapper .view .views-field img, #slideshow-wrapper .view .views_slideshow_cycle_main, #slideshow-wrapper .views-slideshow-cycle-main-frame-row, #slideshow-wrapper .views-slideshow-cycle-main-frame').css({height: Drupal.Responsive.slideshowSize.height + "px"});
213      }
214      $('#slideshow-wrapper .views-slideshow-cycle-main-frame').cycle('destroy');
215      $('#slideshow-wrapper .views-slideshow-cycle-main-frame').cycle();
216    }
217  }
218
219  Drupal.Responsive.getImageSize = function(img) {
220    if(img.height == 0) {
221      setTimeout(function() {
222        Drupal.Responsive.getImageSize(img);
223      }, 200);
224      return;
225    }
226    if(!Drupal.Responsive.slideshowSize) {
227      Drupal.Responsive.slideshowSize = {height: img.height, width: img.width};
228    }
229  }
230  
231  Drupal.behaviors.actionResponsive = {
232    attach: function (context) {
233      $(window).load(function() {
234        Drupal.Responsive.initResponsiveMenu();
235        //Drupal.Responsive.initMasonry();
236        $(window).resize(function(){
237          var windowWidth = window.innerWidth ? window.innerWidth : $(window).width();
238          if(windowWidth != Drupal.Responsive.oldWindowWidth){
239            Drupal.Responsive.updateResponsiveMenu();
240            Drupal.Responsive.oldWindowWidth = windowWidth;
241          }
242          Drupal.Responsive.setSlideshowHeight();
243		  /*
244          for($i = 0; $i < Drupal.Responsive.masonry_containers.length; $i ++) {
245        	Drupal.Responsive.updateColumnWidth($i);        	  
246            $(Drupal.Responsive.masonry_containers).masonry('reload');
247          }
248		  */
249        });
250      });
251    }
252  };
253  
254  Drupal.Responsive.updateColumnWidth = function(index) {
255	container = $(Drupal.Responsive.masonry_containers[index]);
256	container.addClass('masonry-reload');
257    var container_width = container.width();
258    console.log(container_width);
259    var number_column = Math.round(container_width / Drupal.Responsive.masonry_widths[index]);
260    var column_width = Math.floor(container_width / number_column);
261    container.find('.block:not(.block-quicktabs .block)').css({
262      width: column_width + "px"
263    });
264    container.data('basewidth', column_width);
265    return column_width;
266  }
267
268  Drupal.Responsive.updateMasonryWidth = function(index, reload) {    
269	container = $(Drupal.Responsive.masonry_containers[index]);
270    container.addClass('masonry-reload');
271    var options = {
272      itemSelector: '.block:not(.block-quicktabs .block)',
273      isResizable: false,
274      isAnimated: false,
275      columnWidth: function() {
276    	container.removeClass('masonry-reload');
277        var basewidth = container.data('basewidth');
278        if(basewidth == undefined) {
279          return Drupal.Responsive.updateColumnWidth(index);
280        }
281    	else {
282          return basewidth;
283        }
284      }
285    }
286    container.masonry(options);
287  }
288
289  Drupal.Responsive.initMasonry = function() {
290    var container = $('.sidebar .region');
291    if(container.length) {
292      for($i = 0; $i < container.length; $i ++) {
293        Drupal.Responsive.masonry_containers.push(container[$i]);
294        Drupal.Responsive.masonry_widths.push(300);
295        Drupal.Responsive.updateMasonryWidth($i, true);
296      }
297    }
298  };
299  
300  
301})(jQuery);
302
303;/*})'"*/
304;/*})'"*/
305/**
306 * jQuery Masonry v2.1.05
307 * A dynamic layout plugin for jQuery
308 * The flip-side of CSS Floats
309 * http://masonry.desandro.com
310 *
311 * Licensed under the MIT license.
312 * Copyright 2012 David DeSandro
313 */
314
315/*jshint browser: true, curly: true, eqeqeq: true, forin: false, immed: false, newcap: true, noempty: true, strict: true, undef: true */
316/*global jQuery: false */
317
318(function( window, $, undefined ){
319
320  'use strict';
321
322  /*
323   * smartresize: debounced resize event for jQuery
324   *
325   * latest version and complete README available on Github:
326   * https://github.com/louisremi/jquery.smartresize.js
327   *
328   * Copyright 2011 @louis_remi
329   * Licensed under the MIT license.
330   */
331
332  var $event = $.event,
333      resizeTimeout;
334
335  $event.special.smartresize = {
336    setup: function() {
337      $(this).bind( "resize", $event.special.smartresize.handler );
338    },
339    teardown: function() {
340      $(this).unbind( "resize", $event.special.smartresize.handler );
341    },
342    handler: function( event, execAsap ) {
343      // Save the context
344      var context = this,
345          args = arguments;
346
347      // set correct event type
348      event.type = "smartresize";
349
350      if ( resizeTimeout ) { clearTimeout( resizeTimeout ); }
351      resizeTimeout = setTimeout(function() {
352        $.event.handle.apply( context, args );
353      }, execAsap === "execAsap"? 0 : 100 );
354    }
355  };
356
357  $.fn.smartresize = function( fn ) {
358    return fn ? this.bind( "smartresize", fn ) : this.trigger( "smartresize", ["execAsap"] );
359  };
360
361
362
363// ========================= Masonry ===============================
364
365
366  // our "Widget" object constructor
367  $.Mason = function( options, element ){
368    this.element = $( element );
369
370    this._create( options );
371    this._init();
372  };
373
374  $.Mason.settings = {
375    isResizable: true,
376    isAnimated: false,
377    animationOptions: {
378      queue: false,
379      duration: 500
380    },
381    gutterWidth: 0,
382    isRTL: false,
383    isFitWidth: false,
384    containerStyle: {
385      position: 'relative'
386    }
387  };
388
389  $.Mason.prototype = {
390
391    _filterFindBricks: function( $elems ) {
392      var selector = this.options.itemSelector;
393      // if there is a selector
394      // filter/find appropriate item elements
395      return !selector ? $elems : $elems.filter( selector ).add( $elems.find( selector ) );
396    },
397
398    _getBricks: function( $elems ) {
399      var $bricks = this._filterFindBricks( $elems )
400        .css({ position: 'absolute' })
401        .addClass('masonry-brick');
402      return $bricks;
403    },
404    
405    // sets up widget
406    _create : function( options ) {
407      
408      this.options = $.extend( true, {}, $.Mason.settings, options );
409      this.styleQueue = [];
410
411      // get original styles in case we re-apply them in .destroy()
412      var elemStyle = this.element[0].style;
413      this.originalStyle = {
414        // get height
415        height: elemStyle.height || ''
416      };
417      // get other styles that will be overwritten
418      var containerStyle = this.options.containerStyle;
419      for ( var prop in containerStyle ) {
420        this.originalStyle[ prop ] = elemStyle[ prop ] || '';
421      }
422
423      this.element.css( containerStyle );
424
425      this.horizontalDirection = this.options.isRTL ? 'right' : 'left';
426
427      this.offset = {
428        x: parseInt( this.element.css( 'padding-' + this.horizontalDirection ), 10 ),
429        y: parseInt( this.element.css( 'padding-top' ), 10 )
430      };
431      
432      this.isFluid = this.options.columnWidth && typeof this.options.columnWidth === 'function';
433
434      // add masonry class first time around
435      var instance = this;
436      setTimeout( function() {
437        instance.element.addClass('masonry');
438      }, 0 );
439      
440      // bind resize method
441      if ( this.options.isResizable ) {
442        $(window).bind( 'smartresize.masonry', function() { 
443          instance.resize();
444        });
445      }
446
447
448      // need to get bricks
449      this.reloadItems();
450
451    },
452  
453    // _init fires when instance is first created
454    // and when instance is triggered again -> $el.masonry();
455    _init : function( callback ) {
456      this._getColumns();
457      this._reLayout( callback );
458    },
459
460    option: function( key, value ){
461      // set options AFTER initialization:
462      // signature: $('#foo').bar({ cool:false });
463      if ( $.isPlainObject( key ) ){
464        this.options = $.extend(true, this.options, key);
465      } 
466    },
467    
468    // ====================== General Layout ======================
469
470    // used on collection of atoms (should be filtered, and sorted before )
471    // accepts atoms-to-be-laid-out to start with
472    layout : function( $bricks, callback ) {
473
474      // place each brick
475      for (var i=0, len = $bricks.length; i < len; i++) {
476        this._placeBrick( $bricks[i] );
477      }
478      
479      // set the size of the container
480      var containerSize = {};
481      containerSize.height = Math.max.apply( Math, this.colYs );
482      if ( this.options.isFitWidth ) {
483        var unusedCols = 0;
484        i = this.cols;
485        // count unused columns
486        while ( --i ) {
487          if ( this.colYs[i] !== 0 ) {
488            break;
489          }
490          unusedCols++;
491        }
492        // fit container to columns that have been used;
493        containerSize.width = (this.cols - unusedCols) * this.columnWidth - this.options.gutterWidth;
494      }
495      this.styleQueue.push({ $el: this.element, style: containerSize });
496
497      // are we animating the layout arrangement?
498      // use plugin-ish syntax for css or animate
499      var styleFn = !this.isLaidOut ? 'css' : (
500            this.options.isAnimated ? 'animate' : 'css'
501          ),
502          animOpts = this.options.animationOptions;
503
504      // process styleQueue
505      var obj;
506      for (i=0, len = this.styleQueue.length; i < len; i++) {
507        obj = this.styleQueue[i];
508        obj.$el[ styleFn ]( obj.style, animOpts );
509      }
510
511      // clear out queue for next time
512      this.styleQueue = [];
513
514      // provide $elems as context for the callback
515      if ( callback ) {
516        callback.call( $bricks );
517      }
518      
519      this.isLaidOut = true;
520    },
521    
522    // calculates number of columns
523    // i.e. this.columnWidth = 200
524    _getColumns : function() {
525      var container = this.options.isFitWidth ? this.element.parent() : this.element,
526          containerWidth = container.width();
527
528                         // use fluid columnWidth function if there
529      this.columnWidth = this.isFluid ? this.options.columnWidth( containerWidth ) 
529:
530                    // if not, how about the explicitly set option?
531                    this.options.columnWidth ||
532                    // or use the size of the first item
533                    this.$bricks.outerWidth(true) ||
534                    // if there's no items, use size of container
535                    containerWidth;
536
537      this.columnWidth += this.options.gutterWidth;
538
539      this.cols = Math.floor( ( containerWidth + this.options.gutterWidth ) / this.columnWidth );
540      this.cols = Math.max( this.cols, 1 );
541
542    },
543
544    // layout logic
545    _placeBrick: function( brick ) {
546      var $brick = $(brick),
547          colSpan, groupCount, groupY, groupColY, j;
548
549      //how many columns does this brick span
550      colSpan = Math.ceil( $brick.outerWidth(true) / this.columnWidth );
551      colSpan = Math.min( colSpan, this.cols );
552
553      if ( colSpan === 1 ) {
554        // if brick spans only one column, just like singleMode
555        groupY = this.colYs;
556      } else {
557        // brick spans more than one column
558        // how many different places could this brick fit horizontally
559        groupCount = this.cols + 1 - colSpan;
560        groupY = [];
561
562        // for each group potential horizontal position
563        for ( j=0; j < groupCount; j++ ) {
564          // make an array of colY values for that one group
565          groupColY = this.colYs.slice( j, j+colSpan );
566          // and get the max value of the array
567          groupY[j] = Math.max.apply( Math, groupColY );
568        }
569
570      }
571
572      // get the minimum Y value from the columns
573      var minimumY = Math.min.apply( Math, groupY ),
574          shortCol = 0;
575      
576      // Find index of short column, the first from the left
577      for (var i=0, len = groupY.length; i < len; i++) {
578        if ( groupY[i] === minimumY ) {
579          shortCol = i;
580          break;
581        }
582      }
583
584      // position the brick
585      var position = {
586        top: minimumY + this.offset.y
587      };
588      // position.left or position.right
589      position[ this.horizontalDirection ] = this.columnWidth * shortCol + this.offset.x;
590      this.styleQueue.push({ $el: $brick, style: position });
591
592      // apply setHeight to necessary columns
593      var setHeight = minimumY + $brick.outerHeight(true),
594          setSpan = this.cols + 1 - len;
595      for ( i=0; i < setSpan; i++ ) {
596        this.colYs[ shortCol + i ] = setHeight;
597      }
598
599    },
600    
601    
602    resize: function() {
603      var prevColCount = this.cols;
604      // get updated colCount
605      this._getColumns();
606      if ( this.isFluid || this.cols !== prevColCount ) {
607        // if column count has changed, trigger new layout
608        this._reLayout();
609      }
610    },
611    
612    
613    _reLayout : function( callback ) {
614      // reset columns
615      var i = this.cols;
616      this.colYs = [];
617      while (i--) {
618        this.colYs.push( 0 );
619      }
620      // apply layout logic to all bricks
621      this.layout( this.$bricks, callback );
622    },
623    
624    // ====================== Convenience methods ======================
625    
626    // goes through all children again and gets bricks in proper order
627    reloadItems : function() {
628      this.$bricks = this._getBricks( this.element.children() );
629    },
630    
631    
632    reload : function( callback ) {
633      this.reloadItems();
634      this._init( callback );
635    },
636    
637
638    // convienence method for working with Infinite Scroll
639    appended : function( $content, isAnimatedFromBottom, callback ) {
640      if ( isAnimatedFromBottom ) {
641        // set new stuff to the bottom
642        this._filterFindBricks( $content ).css({ top: this.element.height() });
643        var instance = this;
644        setTimeout( function(){
645          instance._appended( $content, callback );
646        }, 1 );
647      } else {
648        this._appended( $content, callback );
649      }
650    },
651    
652    _appended : function( $content, callback ) {
653      var $newBricks = this._getBricks( $content );
654      // add new bricks to brick pool
655      this.$bricks = this.$bricks.add( $newBricks );
656      this.layout( $newBricks, callback );
657    },
658    
659    // removes elements from Masonry widget
660    remove : function( $content ) {
661      this.$bricks = this.$bricks.not( $content );
662      $content.remove();
663    },
664    
665    // destroys widget, returns elements and container back (close) to original style
666    destroy : function() {
667
668      this.$bricks
669        .removeClass('masonry-brick')
670        .each(function(){
671          this.style.position = '';
672          this.style.top = '';
673          this.style.left = '';
674        });
675      
676      // re-apply saved container styles
677      var elemStyle = this.element[0].style;
678      for ( var prop in this.originalStyle ) {
679        elemStyle[ prop ] = this.originalStyle[ prop ];
680      }
681
682      this.element
683        .unbind('.masonry')
684        .removeClass('masonry')
685        .removeData('masonry');
686      
687      $(window).unbind('.masonry');
688
689    }
690    
691  };
692  
693  
694  // ======================= imagesLoaded Plugin ===============================
695  /*!
696   * jQuery imagesLoaded plugin v1.1.0
697   * http://github.com/desandro/imagesloaded
698   *
699   * MIT License. by Paul Irish et al.
700   */
701
702
703  // $('#my-container').imagesLoaded(myFunction)
704  // or
705  // $('img').imagesLoaded(myFunction)
706
707  // execute a callback when all images have loaded.
708  // needed because .load() doesn't work on cached images
709
710  // callback function gets image collection as argument
711  //  `this` is the container
712
713  $.fn.imagesLoaded = function( callback ) {
714    var $this = this,
715        $images = $this.find('img').add( $this.filter('img') ),
716        len = $images.length,
717        blank = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==',
718        loaded = [];
719
720    function triggerCallback() {
721      callback.call( $this, $images );
722    }
723
724    function imgLoaded( event ) {
725      var img = event.target;
726      if ( img.src !== blank && $.inArray( img, loaded ) === -1 ){
727        loaded.push( img );
728        if ( --len <= 0 ){
729          setTimeout( triggerCallback );
730          $images.unbind( '.imagesLoaded', imgLoaded );
731        }
732      }
733    }
734
735    // if no images, trigger immediately
736    if ( !len ) {
737      triggerCallback();
738    }
739
740    $images.bind( 'load.imagesLoaded error.imagesLoaded',  imgLoaded ).each( function() {
741      // cached images don't fire load sometimes, so we reset src.
742      var src = this.src;
743      // webkit hack from http://groups.google.com/group/jquery-dev/browse_thread/thread/eee6ab7b2da50e1f
744      // data uri bypasses webkit log warning (thx doug jones)
745      this.src = blank;
746      this.src = src;
747    });
748
749    return $this;
750  };
751
752
753  // helper function for logging errors
754  // $.error breaks jQuery chaining
755  var logError = function( message ) {
756    if ( window.console ) {
757      window.console.error( message );
758    }
759  };
760  
761  // =======================  Plugin bridge  ===============================
762  // leverages data method to either create or return $.Mason constructor
763  // A bit from jQuery UI
764  //   https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.widget.js
765  // A bit from jcarousel 
766  //   https://github.com/jsor/jcarousel/blob/master/lib/jquery.jcarou
766sel.js
767
768  $.fn.masonry = function( options ) {
769    if ( typeof options === 'string' ) {
770      // call method
771      var args = Array.prototype.slice.call( arguments, 1 );
772
773      this.each(function(){
774        var instance = $.data( this, 'masonry' );
775        if ( !instance ) {
776          logError( "cannot call methods on masonry prior to initialization; " +
777            "attempted to call method '" + options + "'" );
778          return;
779        }
780        if ( !$.isFunction( instance[options] ) || options.charAt(0) === "_" ) {
781          logError( "no such method '" + options + "' for masonry instance" );
782          return;
783        }
784        // apply method
785        instance[ options ].apply( instance, args );
786      });
787    } else {
788      this.each(function() {
789        var instance = $.data( this, 'masonry' );
790        if ( instance ) {
791          // apply options & init
792          instance.option( options || {} );
793          instance._init();
794        } else {
795          // initialize new instance
796          $.data( this, 'masonry', new $.Mason( options, this ) );
797        }
798      });
799    }
800    return this;
801  };
802
803})( window, jQuery );
804;/*})'"*/
805;/*})'"*/
806/**
807 * jQuery Masonry v2.1.05
808 * A dynamic layout plugin for jQuery
809 * The flip-side of CSS Floats
810 * http://masonry.desandro.com
811 *
812 * Licensed under the MIT license.
813 * Copyright 2012 David DeSandro
814 */
815(function(a,b,c){"use strict";var d=b.event,e;d.special.smartresize={setup:function(){b(this).bind("resize",d.special.smartresize.handler)},teardown:function(){b(this).unbind("resize",d.special.smartresize.handler)},handler:function(a,c){var d=this,f=arguments;a.type="smartresize",e&&clearTimeout(e),e=setTimeout(function(){b.event.handle.apply(d,f)},c==="execAsap"?0:100)}},b.fn.smartresize=function(a){return a?this.bind("smartresize",a):this.trigger("smartresize",["execAsap"])},b.Mason=function(a,c){this.element=b(c),this._create(a),this._init()},b.Mason.settings={isResizable:!0,isAnimated:!1,animationOptions:{queue:!1,duration:500},gutterWidth:0,isRTL:!1,isFitWidth:!1,containerStyle:{position:"relative"}},b.Mason.prototype={_filterFindBricks:function(a){var b=this.options.itemSelector;return b?a.filter(b).add(a.find(b)):a},_getBricks:function(a){var b=this._filterFindBricks(a).css({position:"absolute"}).addClass("masonry-brick");return b},_create:function(c){this.options=b.extend(!0,{},b.Mason.settings,c),this.styleQueue=[];var d=this.element[0].style;this.originalStyle={height:d.height||""};var e=this.options.containerStyle;for(var f in e)this.originalStyle[f]=d[f]||"";this.element.css(e),this.horizontalDirection=this.options.isRTL?"right":"left",this.offset={x:parseInt(this.element.css("padding-"+this.horizontalDirection),10),y:parseInt(this.element.css("padding-top"),10)},this.isFluid=this.options.columnWidth&&typeof this.options.columnWidth=="function";var g=this;setTimeout(function(){g.element.addClass("masonry")},0),this.options.isResizable&&b(a).bind("smartresize.masonry",function(){g.resize()}),this.reloadItems()},_init:function(a){this._getColumns(),this._reLayout(a)},option:function(a,c){b.isPlainObject(a)&&(this.options=b.extend(!0,this.options,a))},layout:function(a,b){for(var c=0,d=a.length;c<d;c++)this._placeBrick(a[c]);var e={};e.height=Math.max.apply(Math,this.colYs);if(this.options.isFitWidth){var f=0;c=this.cols;while(--c){if(this.colYs[c]!==0)break;f++}e.width=(this.cols-f)*this.columnWidth-this.options.gutterWidth}this.styleQueue.push({$el:this.element,style:e});var g=this.isLaidOut?this.options.isAnimated?"animate":"css":"css",h=this.options.animationOptions,i;for(c=0,d=this.styleQueue.length;c<d;c++)i=this.styleQueue[c],i.$el[g](i.style,h);this.styleQueue=[],b&&b.call(a),this.isLaidOut=!0},_getColumns:function(){var a=this.options.isFitWidth?this.element.parent():this.element,b=a.width();this.columnWidth=this.isFluid?this.options.columnWidth(b):this.options.columnWidth||this.$bricks.outerWidth(!0)||b,this.columnWidth+=this.options.gutterWidth,this.cols=Math.floor((b+this.options.gutterWidth)/this.columnWidth),this.cols=Math.max(this.cols,1)},_placeBrick:function(a){var c=b(a),d,e,f,g,h;d=Math.ceil(c.outerWidth(!0)/this.columnWidth),d=Math.min(d,this.cols);if(d===1)f=this.colYs;else{e=this.cols+1-d,f=[];for(h=0;h<e;h++)g=this.colYs.slice(h,h+d),f[h]=Math.max.apply(Math,g)}var i=Math.min.apply(Math,f),j=0;for(var k=0,l=f.length;k<l;k++)if(f[k]===i){j=k;break}var m={top:i+this.offset.y};m[this.horizontalDirection]=this.columnWidth*j+this.offset.x,this.styleQueue.push({$el:c,style:m});var n=i+c.outerHeight(!0),o=this.cols+1-l;for(k=0;k<o;k++)this.colYs[j+k]=n},resize:function(){var a=this.cols;this._getColumns(),(this.isFluid||this.cols!==a)&&this._reLayout()},_reLayout:function(a){var b=this.cols;this.colYs=[];while(b--)this.colYs.push(0);this.layout(this.$bricks,a)},reloadItems:function(){this.$bricks=this._getBricks(this.element.children())},reload:function(a){this.reloadItems(),this._init(a)},appended:function(a,b,c){if(b){this._filterFindBricks(a).css({top:this.element.height()});var d=this;setTimeout(function(){d._appended(a,c)},1)}else this._appended(a,c)},_appended:function(a,b){var c=this._getBricks(a);this.$bricks=this.$bricks.add(c),this.layout(c,b)},remove:function(a){this.$bricks=this.$bricks.not(a),a.remove()},destroy:function(){this.$bricks.removeClass("masonry-brick").each(function(){this.style.position="",this.style.top="",this.style.left=""});var c=this.element[0].style;for(var d in this.originalStyle)c[d]=this.originalStyle[d];this.element.unbind(".masonry").removeClass("masonry").removeData("masonry"),b(a).unbind(".masonry")}},b.fn.imagesLoaded=function(a){function h(){a.call(c,d)}function i(a){var c=a.target;c.src!==f&&b.inArray(c,g)===-1&&(g.push(c),--e<=0&&(setTimeout(h),d.unbind(".imagesLoaded",i)))}var c=this,d=c.find("img").add(c.filter("img")),e=d.length,f="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",g=[];return e||h(),d.bind("load.imagesLoaded error.imagesLoaded",i).each(function(){var a=this.src;this.src=f,this.src=a}),c};var f=function(b){a.console&&a.console.error(b)};
815b.fn.masonry=function(a){if(typeof a=="string"){var c=Array.prototype.slice.call(arguments,1);this.each(function(){var d=b.data(this,"masonry");if(!d){f("cannot call methods on masonry prior to initialization; attempted to call method '"+a+"'");return}if(!b.isFunction(d[a])||a.charAt(0)==="_"){f("no such method '"+a+"' for masonry instance");return}d[a].apply(d,c)})}else this.each(function(){var c=b.data(this,"masonry");c?(c.option(a||{}),c._init()):b.data(this,"masonry",new b.Mason(a,this))});return this}})(window,jQuery);
816;/*})'"*/
817;/*})'"*/

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.