1/** 2 * aviapoly Slider - A responsive jQuery image slider with advanced transition effects 3 * (c) Copyright Christian "Kriesi" Budschedl 4 * http://www.kriesi.at 5 * http://www.twitter.com/kriesi/ 6 * 7 */ 8 9 10(function($) 11{ 12 $.fn.aviapoly = function(set_options, overwrite_methods) 13 { 14 var defaults = 15 { 16 animation: false, 17 pluginNameSpace: 'aviapoly', 18 transition: 'aviapoly_fx', 19 blockHeight: 'full', 20 blockWidth: 'full', 21 transitionFx: 'fade', 22 betweenBlockDelay: 100, 23 transitionSpeed:600, 24 cssEasing: 'cubic-bezier(0.250, 0.460, 0.450, 0.940)', // easing for CSS transition 25 easing: 'easeOutQuad' // easing for JS transitions 26 }, 27 28 options = $.extend({}, defaults, set_options), 29 30 methods = 31 { 32 33 aviapoly_fx: function(slider) 34 { 35 //set height and widh of the slider 36 methods.set_slide_option(slider); 37 38 //generate the blocks for the next transition based on the slide options set above 39 methods.generate_blocks(slider); 40 41 //get all blocks, sort them and position them as needed 42 methods.perpare_blocks(slider); 43 44 //fire the transition 45 setTimeout(function(){ methods.start_block_transition(slider); }, 100); 46 }, 47 48 set_slide_option: function(slider) 49 { 50 var cur_height, cur_width, slideWidth = slider.width(), slideHeight = slider.height(); 51 //check if either width or height should be full container width 52 cur_height = options.blockHeight == 'full'? slideHeight: options.blockHeight; 53 cur_width = options.blockWidth == 'full' ? slideWidth : options.blockWidth; 54 55 slider.currentOptions = 56 { 57 blockHeight: cur_height, 58 blockWidth: cur_width, 59 slideHeight: slideHeight, 60 slideWidth: slideWidth 61 }; 62 63 slider.currentOptions = $.extend({}, slider.options, slider.currentOptions); 64 slider.methods.overwrite_options(slider.currentSlide, slider.currentOptions); 65 66 67 if(slider.currentOptions.animation) 68 { 69 slider.methods.use_preset_animation(slider, slider.currentOptions.animation); 70 } 71 }, 72 73 74 75 perpare_blocks: function(slider) 76 { 77 slider.blocks = slider.find('.avBlock'); 78 79 if(slider.css_active && slider.isMobile) 80 { 81 if (slider.moveDirection > 0) 82 { 83 slider.blocks = $(slider.blocks.get().reverse()); 84 } 85 } 86 else if (slider.moveDirection < 0) 87 { 88 slider.blocks = $(slider.blocks.get().reverse()); 89 } 90 91 switch(slider.currentOptions.order) 92 { 93 case 'diagonal': slider.blocks = slider.methods.diagonal(slider.blocks, slider); break; 94 case 'random' : slider.blocks = slider.methods.fyrandomize(slider.blocks, slider); break; 95 } 96 }, 97 98 generate_blocks: function(slider) 99 { 100 slider.blockNumber = 0; 101 var posX = 0, 102 posY = 0, 103 generateBlocks = true, 104 nextImage = slider.nextSlide.find('img:eq(0)').attr('src'); 105 106 107 108 // start generating the blocks and add them until the whole image area 109 // is filled. Depending on the options that can be only one div or quite many ;) 110 while(generateBlocks) 111 { 112 slider.blockNumber ++; 113 114 var block = $('<div class="avBlock avBlock'+slider.blockNumber+'"></div>').appendTo(slider).css({ 115 zIndex:20, 116 position:'absolute', 117 overflow:'hidden', 118 display:'none', 119 left:posX, 120 top:posY, 121 height:slider.currentOptions.blockHeight, 122 width:slider.currentOptions.blockWidth 123 }); 124 125 var imagestring = ''; 126 if(nextImage) imagestring = '<img src="'+ nextImage +'" title="" alt="" />'; 127 128 var innerBlock = $('<div class="av_innerBlock">'+imagestring+'</div>').appendTo(block).css({ 129 position:'absolute', 130 left:-posX, 131 top:-posY, 132 height: slider.currentOptions.slideHeight, 133 width:slider.currentOptions.slideWidth 134 }); 135 136 posX += slider.currentOptions.blockWidth; 137 138 if(posX >= slider.currentOptions.slideWidth) 139 { 140 posX = 0; 141 posY += slider.currentOptions.blockHeight; 142 } 143 144 if(posY >= slider.currentOptions.slideHeight) 145 { 146 //end adding Blocks 147 generateBlocks = false;
148 } 149 } // end while 150 }, 151 152 use_preset_animation: function(slider, animation) 153 { 154 var options = {}, 155 animationOptions = ["fade", "slide", "square", "square-fade", "square-random", "square-random-fade", "bar-vertical-top", "bar-vertical-side", "bar-vertical-mesh", "bar-vertical-random", "bar-horizontal-top", "bar-horizontal-side", "bar-horizontal-mesh", "bar-horizontal-random", "square-zoom", "bar-vertical-zoom", "bar-horizontal-zoom"], 156 x = slider.currentOptions.slideWidth, 157 y = slider.currentOptions.slideHeight, 158 randomCount = animationOptions.length; 159 160 if(!slider.css_active) randomCount -= 3; //subtract the css3 transitions 161 if(animation == 'random') animation = animationOptions[Math.floor(Math.random() * randomCount)]; 162 var squares = 8; 163 164 switch(animation) 165 { 166 case "fade": options = { blockHeight: y, blockWidth: x, transitionFx: 'fade', betweenBlockDelay: 50, transitionSpeed:600, order:'' }; break; 167 case "slide": options = { blockHeight: y, blockWidth: x, transitionFx: 'side', betweenBlockDelay: 50, transitionSpeed:600, order:'' }; break; 168 169 case "square": options = { blockHeight: Math.ceil(x/squares), blockWidth: Math.ceil(x/squares), transitionFx: 'slide', betweenBlockDelay: 50, transitionSpeed:600, order:'diagonal' }; break; 170 case "square-fade": options = { blockHeight: Math.ceil(x/squares), blockWidth: Math.ceil(x/squares), transitionFx: 'fade', betweenBlockDelay: 50, transitionSpeed:600, order:'diagonal' }; break; 171 case "square-random": options = { blockHeight: Math.ceil(x/squares), blockWidth: Math.ceil(x/squares), transitionFx: 'slide', betweenBlockDelay: 50, transitionSpeed:600, order:'random' }; break; 172 case "square-random-fade": options = { blockHeight: Math.ceil(x/squares), blockWidth: Math.ceil(x/squares), transitionFx: 'fade', betweenBlockDelay: 50, transitionSpeed:600, order:'random' }; break; 173 case "square-zoom": options = { blockHeight: Math.ceil(x/squares), blockWidth: Math.ceil(x/squares), transitionFx: 'zoom', betweenBlockDelay: 50, transitionSpeed:600, order:'diagonal' }; break; 174 175 case "bar-vertical-top": options = { blockHeight: y, blockWidth: Math.ceil(x/12), transitionFx: 'drop', betweenBlockDelay: 100, transitionSpeed:600, order:'' }; break; 176 case "bar-vertical-side": options = { blockHeight: y, blockWidth: Math.ceil(x/12), transitionFx: 'side-stay', betweenBlockDelay: 100, transitionSpeed:600, order:'' }; break; 177 case "bar-vertical-mesh": options = { blockHeight: y, blockWidth: Math.ceil(x/12), transitionFx: 'mesh-vert', betweenBlockDelay: 100, transitionSpeed:600, order:'' }; break; 178 case "bar-vertical-random": options = { blockHeight: y, blockWidth: Math.ceil(x/12), transitionFx: 'fade', betweenBlockDelay: 100, transitionSpeed:600, order:'random' }; break; 179 case "bar-vertical-zoom": options = { blockHeight: y, blockWidth: Math.ceil(x/12), transitionFx: 'zoom', betweenBlockDelay: 100, transitionSpeed:600, order:'' }; break; 180 181 case "bar-horizontal-top": options = { blockHeight: Math.ceil(y/6), blockWidth: x, transitionFx: 'drop', betweenBlockDelay: 100, transitionSpeed:600, order:'' }; break; 182 case "bar-horizontal-side": options = { blockHeight: Math.ceil(y/6), blockWidth: x, transitionFx: 'side', betweenBlockDelay: 100, transitionSpeed:600, order:'' }; break; 183 case "bar-horizontal-mesh": options = { blockHeight: Math.ceil(y/6), blockWidth: x, transitionFx: 'mesh-hor', betweenBlockDelay: 100, transitionSpeed:600, order:'' }; break; 184 case "bar-horizontal-random": options = { blockHeight: Math.ceil(y/6), blockWidth: x, transitionFx: 'fade', betweenBlockDelay: 100, transitionSpeed:600, order:'random' }; break; 185 case "bar-horizontal-zoom": options = { blockHeight: Math.ceil(y/6), blockWidth: x, transitionFx: 'zoom', betweenBlockDelay: 100, transitionSpeed:600, order:'' }; break; 186 } 187 188 $.extend(slider.currentOptions, options); 189 190 }, 191 192 start_block_transition: function(slider) 193 { 194 //fire transition 195 slider.blocks.each(function(i) 196 { 197 var currentBlock = $(this); 198 199 setTimeout(function() 200 { 201 var transitionObject = {}; 202 transitionObject['css'] = {display:'block',opacity:0}
202; 203 transitionObject['anim'] = {opacity:1}; 204 205 switch(slider.currentOptions.transitionFx) 206 { 207 case 'fade': 208 //default opacity fade defined above 209 break; 210 211 case 'drop': 212 if(slider.isMobile) 213 { 214 var modifier = 1; 215 if(slider.moveDirection < 0) modifier = modifier * -1; 216 217 transitionObject['css'][slider.css_prefix+'transform-origin'] = '0 0'; 218 transitionObject['css'][slider.css_prefix+'transform'] = 'rotate(0deg) scale(1, 0.1) skew(0deg, 0deg)'; 219 transitionObject['anim'][slider.css_prefix+'transform'] ='rotate(0deg) scale(1,1) skew(0deg, 0deg)'; 220 } 221 else 222 { 223 transitionObject['css']['height'] = 1; 224 transitionObject['css']['width'] = slider.currentOptions.blockWidth; 225 226 transitionObject['anim']['height'] = slider.currentOptions.blockHeight; 227 transitionObject['anim']['width'] = slider.currentOptions.blockWidth; 228 } 229 break; 230 231 case 'side': 232 233 var modifier = -1; 234 if(slider.moveDirection < 0) modifier = 1; 235 if(slider.isMobile) 236 { 237 modifier = modifier * -1; 238 transitionObject['css'][slider.css_prefix+'transform'] = 'translateX('+( slider.currentOptions.slideWidth * modifier) +'px)'; 239 transitionObject['anim'][slider.css_prefix+'transform'] ='translateX(0px)'; 240 241 } 242 else 243 { 244 transitionObject['css']['left'] = slider.currentOptions.slideWidth * modifier; 245 transitionObject['anim']['left'] = parseInt(currentBlock.css('left'),10); 246 } 247 break; 248 249 250 case 'side-stay': 251 if(slider.isMobile) 252 { 253 transitionObject['css'][slider.css_prefix+'transform'] = 'rotate(0deg) scale(0.1,1) skew(0deg, 0deg)'; 254 transitionObject['anim'][slider.css_prefix+'transform'] ='rotate(0deg) scale(1,1) skew(0deg, 0deg)'; 255 } 256 else 257 { 258 transitionObject['css']['width'] = 1; 259 transitionObject['anim']['width'] = slider.currentOptions.blockWidth; 260 } 261 break; 262 263 264 case 'zoom': 265 transitionObject['css'][slider.css_prefix+'transform'] = 'rotate(0deg) scale(2) skew(0deg, 0deg)'; 266 transitionObject['anim'][slider.css_prefix+'transform'] ='rotate(0deg) scale(1) skew(0deg, 0deg)'; 267 break; 268 269 270 case 'mesh-vert': 271 272 var modifier = -1; 273 if(i % 2) modifier = 1; 274 275 if(slider.isMobile) 276 { 277 transitionObject['css'][slider.css_prefix+'transform'] = 'translateY('+( slider.currentOptions.slideWidth * modifier) +'px)'; 278 transitionObject['anim'][slider.css_prefix+'transform'] ='translateY(0px)'; 279 } 280 else 281 { 282 transitionObject['css']['top'] = slider.currentOptions.slideHeight * modifier; 283 transitionObject['anim']['top'] = parseInt(currentBlock.css('top'),10); 284 } 285 break; 286 287 case 'mesh-hor': 288 var modifier = -1; 289 if(i % 2) modifier = 1; 290 291 if(slider.isMobile) 292 { 293 transitionObject['css'][slider.css_prefix+'transform'] = 'translateX('+( slider.currentOptions.slideWidth * modifier) +'px)'; 294 transitionObject['anim'][slider.css_prefix+'transform'] ='translateX(0px)'; 295 } 296 else 297 { 298 transitionObject['css']['left'] = slider.currentOptions.slideWidth * modifier; 299 transitionObject['anim']['left'] = parseInt(currentBlock.css('left'),10); 300 } 301 302 break; 303 304 case 'slide': 305 if(slider.isMobile) 306 { 307 transitionObject['css'][slider.css_prefix+'transform'] = 'rotate(0deg) scale(0.1) skew(0deg, 0deg)'; 308 transitionObject['anim'][slider.css_prefix+'transform'] ='rotate(0deg) scale(1) skew(0deg, 0deg)'; 309 } 310 else 311 { 312 transitionObject['css']['height'] = 1; 313 transitionObject['css']['width'] = 1; 314 315 transitionObject['anim']['height'] = slider.currentOptions.blockHeight; 316 transitionObject['anim']['width'] = slider.currentOptions.blockWidth; 317 } 318 break; 319 320 321 } 322 323 324 currentBlock.css(transitionObject['css']); 325 326 slider.methods.animate(currentBlock, transitionObject['anim'], function() 327 { 328 if(i+1 == slider.blockNumber) 329 { 330 slider.methods.change_finished(false, slider); 331 } 332 }, true); 333 334 335 }, i*slider.currentOptions.betweenBlockDelay); 336 }); 337 }, 338 339 clean_up_hook: function(slider) 340 {
341 if(!slider.blocks || !slider.blocks.length) return; 342 343 slider.methods.remove_css_transition(slider.blocks); 344 345 var fadeOut = 10; 346 if(slider.currentSlide.is('.withCaption')) fadeOut = 500; 347 348 slider.blocks.animate({opacity:0}, fadeOut, function() 349 { 350 slider.blocks.remove(); 351 slider.animating = false; 352 }); 353 }, 354 355 // array sorting 356 fyrandomize: function(object) 357 { 358 var length = object.length, 359 objectSorted = $(object); 360 361 if ( length == 0 ) return false; 362 363 while ( --length ) 364 { 365 var newObject = Math.floor( Math.random() * ( length + 1 ) ), 366 temp1 = objectSorted[length], 367 temp2 = objectSorted[newObject]; 368 objectSorted[length] = temp2; 369 objectSorted[newObject] = temp1; 370 } 371 return objectSorted; 372 }, 373 374 diagonal: function(object, slider) 375 { 376 var length = object.length, 377 objectSorted = $(object), 378 currentIndex = 0, //index of the object that should get the object in "i" applied 379 rows = Math.ceil(slider.currentOptions.slideHeight / slider.currentOptions.blockHeight), 380 columns = Math.ceil(slider.currentOptions.slideWidth / slider.currentOptions.blockWidth), 381 oneColumn = slider.blockNumber/columns, 382 oneRow = slider.blockNumber/rows, 383 modX = 0, 384 modY = 0, 385 i = 0, 386 rowend = 0, 387 endreached = false, 388 onlyOne = false; 389 390 if ( length == 0 ) return false; 391 for (i = 0; i<length; i++ ) 392 { 393 objectSorted[i] = object[currentIndex]; 394 395 if((currentIndex % oneRow == 0 && slider.blockNumber - i > oneRow)|| (modY + 1) % oneColumn == 0) 396 { 397 currentIndex -= (((oneRow - 1) * modY) - 1); modY = 0; modX ++; onlyOne = false;
398 399 if (rowend > 0) 400 { 401 modY = rowend; currentIndex += (oneRow -1) * modY; 402 } 403 } 404 else 405 { 406 currentIndex += oneRow -1; modY ++; 407 } 408 409 if((modX % (oneRow-1) == 0 && modX != 0 && rowend == 0) || (endreached == true && onlyOne == false) ) 410 { 411 modX = 0.1; rowend ++; endreached = true; onlyOne = true; 412 } 413 } 414 415 return objectSorted; 416 } 417 418 }; 419 420 return this.avia_base_slider(options, methods); 421 } 422 423})(jQuery); 424 425 426 427/** 428 * Avia Base Slider - A responsive jQuery image slider, capable of displaying video and a good starting point for modified slideshows 429 * (c) Copyright Christian "Kriesi" Budschedl 430 * http://www.kriesi.at 431 * http://www.twitter.com/kriesi/ 432 * 433 * Help Sources: 434 * http://www.w3schools.com/css3/css3_user_interface.asp 435 * http://googlecode.blogspot.com/2010/08/css3-transitions-and-transforms-in.html 436 * http://stackoverflow.com/questions/5819912/webkit-transition-end-in-mozilla-and-opera 437 * http://www.the-art-of-web.com/css/css-animation/ 438 * http://matthewlein.com/ceaser/ 439 * http://www.zackgrossbart.com/hackito/touchslider/ 440 * http://www.sitepen.com/blog/2008/07/10/touching-and-gesturing-on-the-iphone/ 441 * http://www.learningjquery.com/2007/10/a-plugin-development-pattern 442 * http://fluidproject.org/blog/2008/08/04/in-praise-of-jqueryextend/ 443 */ 444 445 446/* this prevents dom flickering, needs to be outside of dom.ready event: */ 447document.documentElement.className += ' js_active '; 448/*end dom flickering =) */ 449 450 451(function($) 452{ 453 var slideshow_counter = 0; 454 455 $.fn.avia_base_slider = function(options, overwrite_methods) 456 { 457 var pluginNameSpace = 'avia_base', 458 459 resize_helper = function() 460 { 461 var $window = $(window), resize_timeout = ""; 462 $window.bind('resize.'+pluginNameSpace, function(){ 463 clearTimeout(resize_timeout); 464 resize_timeout = setTimeout(function(){$window.trigger('resize_finished.'+pluginNameSpace)}, 500); 465 }); 466 }; 467 468 469 //activate helper 470 if(this.length) 471 { 472 resize_helper(); 473 } 474 475 //iterate over all slideshows 476 return this.each(function() 477 { 478 slideshow_counter++; 479 480 var slider = $(this), 481 482 methods = { 483 484 preload: function(slider) 485 { 486 methods.append_caption(); 487 var delay = 0, fadeInSpeed = 0; 488 if(slider.options.globalDelay) 489 { 490 delay = slideshow_counter * slider.options.globalDelay; 491 fadeInSpeed = 10; 492 } 493 494 slider.aviaImagePreloader({fadeInSpeed: fadeInSpeed, globalDelay: delay },function(){ methods.init.apply( slider ); }); 495 }, 496 497 init: function() 498 { 499 500 methods.init_hook(slider); 501 methods.overwrite_options(slider, slider.options); 502 methods.set_slide_proportions(false, function(){ methods.img_ready_hook(slider) }, true); 503 methods.set_video_slides(); 504 methods.bind_events(); 505 methods.css_setup_and_display(); 506 methods.append_controls(); 507 methods.activate_touch_control(); 508 methods.start_autorotation(); 509 }, 510 511 init_hook: function(slider) 512 { 513 //blank function which can be used to modify the slider behaviour by another plugin building upon it 514 }, 515 516 img_ready_hook: function(slider) 517 { 518 //blank function which can be used to modify the slider behaviour by another plugin building upon it 519 }, 520 521 first_img_displayed_hook: function(slider) 522 { 523 //blank function which can be used to modify the slider behaviour by another plugin building upon it 524 slider.removeClass('preloading'); 525 }, 526 527 bind_events: function() 528 { 529 //handle resizing 530 var win = $(window); 531 win.bind('resize.'+pluginNameSpace, methods.set_slide_proportions); 532 533 //handle clicking on slide controls 534 slider.bind('switch.'+pluginNameSpace , methods.try_slide_transition); 535 536 //slide transitioning 537 slider.slides.bind("webkitTransitionEnd oTransitionEnd OTransitionEnd transitionend mozTransitionEnd", methods.change_finished); 538 539 //stop autorotation if link inside the slider is clicked 540 slider.find('a').bind('click.'+pluginNameSpace, methods.pause_slider); 541 542 //show videos 543 slider.slides.bind('click.'+pluginNameSpace, function() 544 { 545 var clicked_item = $(this); 546
547 if(clicked_item.is('.comboslide')) 548 { 549 if(clicked_item.find('img:visible').length) 550 { 551 methods.showvideo(clicked_item); 552 methods.pause_slider(); 553 return false; 554 } 555 } 556 }); 557 }, 558 559 set_slide_proportions: function(event, callback) 560 { 561 slider.proportions = 16 / 9; //default width if no image is available 562 if(slider.currentImg) slider.proportions = slider.currentImg.width / slider.currentImg.height; 563 var properties = {height:slider.width() / slider.proportions}; 564 565 if(event && event.originalEvent && event.originalEvent.type == 'resize') 566 { 567 methods.remove_css_transition(slider); 568 slider.css(properties); 569 } 570 else 571 { 572 methods.animate(slider, properties, callback, true); 573 } 574 }, 575 576 try_set_slide_proportions: function() //checks if the next image is smaller and resizes the container at the start of the transition 577 { 578 var nextImg = slider.nextSlide.find('img').get(0); 579 580 if(nextImg) 581 { 582 var nextProportions = nextImg.width / nextImg.height; 583 584 if(nextProportions > slider.proportions) 585 { 586 slider.currentImg = nextImg; 587 methods.set_slide_proportions(false); 588 } 589 } 590 }, 591 592 css_setup_and_display: function() 593 { 594 slider.currentSlide.css({zIndex: 3, opacity:0, visibility:'visible'}); 595 slider.slides.each(function(i) 596 { 597 if($.browser.msie) $(this).css({backgroundColor:'#000000'}); //fix iebug where images appear buggy 598 $(this).css({position:'absolute'}).addClass('slide_number_'+ (i+1)); 599 }); 600 601 //display the fist slide. default jquery animation is sufficient 602 slider.currentSlide.animate({opacity:1}, 1200, function() 603 { 604 methods.first_img_displayed_hook(slider); 605 }); 606 607 }, 608 /************************************************************************ 609 SECTION: Video helper 610 *************************************************************************/ 611 612 set_video_slides: function() 613 { 614 slider.slides.each(function(i) 615 { 616 var currentslide = $(this); 617 var imageslide = currentslide.find('img'); 618 var videoslide = currentslide.find('video, embed, object, iframe, .avia_video').attr('wmode','opaque'); 619 var iframe = currentslide.find('iframe'); 620 var src = iframe.attr('src'); 621 var classname = 'emptyslide'; 622 623 if(src) 624 { 625 if(src.indexOf('?') !== -1) 626 { 627 src += "&wmode=opaque"; 628 } 629 else 630 { 631 src += "?wmode=opaque"; 632 } 633 634 iframe.attr('src', src); 635 } 636 637 if(imageslide.length && videoslide.length) 638 {
639 classname = 'comboslide'; 640 } 641 else if(videoslide.length) 642 { 643 classname = 'videoslide'; 644 } 645 else if(imageslide.length) 646 { 647 classname = 'imageslide'; 648 } 649 650 currentslide.addClass(classname).append('<span class="slideshow_overlay"></span>'); 651 652 // initialy google chrome youtube fix: youtube videos need to be hidden and then shown before they respond to zIndex properties 653 // now used on every video only slide 654 if(classname == 'videoslide') 655 { 656 videoslide.css({display:"none"}); 657 setTimeout(function() 658 { 659 videoslide.css({display:"block"}); 660 },10) 661 } 662 663 }); 664 }, 665 666 667 showvideo: function(clicked_item) 668 { 669 var iframe = clicked_item.find('iframe'), 670 param = clicked_item.find('param[name=movie]'), 671 embed = clicked_item.find('embed') 672 object = clicked_item.find('object') 673 src = ""; 674 675 //try to activate autoplay 676 if(iframe.length) 677 { 678 src = iframe.attr('src'); 679 if(src && slider.options.try_video_autoplay) 680 { 681 src += "&autoplay=1"; 682 iframe.attr('src', src); 683 } 684 685 iframe.css('display','block'); 686 } 687 688 if(object.length) 689 { 690 src = param.val(); 691 if(src && slider.options.try_video_autoplay) 692 { 693 if(src.indexOf('?') !== -1){ src += "&autoplay=1"; } 694 else { src += "?autoplay=1"; } 695 param.val(src); 696 } 697 object.css('display','block'); 698 } 699 700 if(embed.length) 701 { 702 src = embed.attr('src'); 703 if(src && slider.options.try_video_autoplay) 704 { 705 if(src.indexOf('?') !== -1){ src += "&autoplay=1"; } 706 else { src += "?autoplay=1"; } 707 embed.attr('src',src) 708 } 709 embed.css('display','block'); 710 } 711 712 clicked_item.find('.slideshow_overlay, .'+slider.options.captionClass).stop().animate({opacity:0}
712, function() 713 { 714 $(this).css({zIndex:0, visibility:'hidden', display:'none'}); 715 }); 716 717 setTimeout(function(){ 718 clicked_item.find('img, canvas').stop().animate({opacity:0}, function() 719 { 720 $(this).css({zIndex:0, visibility:'hidden', display:'none'}); 721 }); 722 },200); 723 }, 724 725 726 /************************************************************************ 727 SECTION: Animation helper 728 *************************************************************************/ 729 730 set_css_transition: function(element) 731 { 732 var property = slider.css_prefix + 'transition', 733 transition = {}; 734 735 transition[property] = 'all '+(slider.options.transitionSpeed/1000)+'s '+slider.options.cssEasing; 736 element.css(transition); 737 }, 738 739 remove_css_transition: function(element) 740 { 741 var property = slider.css_prefix + 'transition', 742 transition = {}; 743 744 transition[property] = "none"; 745 element.css(transition); 746 }, 747 748 animate: function(element, properties, callback, callback_by_timeout) 749 { 750 751 if(slider.css_active) 752 { 753 setTimeout(function(){ methods.set_css_transition(element); },10); 754 setTimeout(function(){ element.css(properties); },20); 755 if(callback && callback_by_timeout) setTimeout(function(){callback.call();}, slider.options.transitionSpeed); 756 } 757 else 758 { 759 element.animate(properties, slider.options.transitionSpeed, slider.options.easing, callback); 760 } 761 762 }, 763 764 765 /************************************************************************ 766 SECTION: ADD controls 767 *************************************************************************/ 768 769 append_controls: function() 770 { 771 if(slider.count > 1 && (!slider.isMobile || slider.isMobile && !slider.options.forceMobile)) 772 { 773 slider.controls.numeric = $('<div class="numeric_controls slide_controls"></div>').insertAfter(slider); 774 775 //numeric controls 776 var active_class = "class='active_item'"; 777 slider.slides.each(function(i) 778 { 779 $('<a '+active_class+' href="#" data-show-slide="'+i+'" >'+(i+1)+'</a>').appendTo(slider.controls.numeric); active_class = ""; 780 }); 781 782 783 //arrow controls 784 var labels = ['previous', 'pause_play', 'next']; 785 slider.controls.arrow = $('<div class="arrow_controls slide_controls"></div>').insertAfter(slider); 786 for (x in labels) 787 { 788 var extra_class = 'class = "ctrl_'+labels[x]+'"'; 789 790 if(labels[x] == "pause_play") 791 { 792 if(slider.options.autorotation == false) 793 { 794 labels[x] = 'Play'; 795 } 796 else 797 { 798 extra_class = 'class = "ctrl_active_rotation ctrl_'+labels[x]+'"'; 799 labels[x] = 'Pause'; 800 } 801 } 802 803 if(typeof labels[x] == 'string') 804 { 805 $('<a '+extra_class+' href="#" data-show-slide="'+labels[x]+'" >'+labels[x]+'</a>').appendTo(slider.controls.arrow); 806 } 807 } 808 809 slider.pauseButton = slider.controls.arrow.find('.ctrl_pause_play'); 810 methods.activate_controls(); 811 } 812 }, 813 814 activate_controls: function() 815 { 816 slider.pauseButton.bind('click', function(){ methods.toogle_autorotation(); return false;}) 817 818 slider.controls.numeric.find('a').bind('click', function() 819 { 820 methods.pause_slider(); slider.trigger('switch.'+pluginNameSpace, this); return false; 821 }); 822 823 slider.controls.arrow.find('a').not('.ctrl_pause_play').bind('click',function() 824 { 825 methods.pause_slider(); slider.trigger('switch.'+pluginNameSpace, this); return false; 826 }) 827 828 }, 829 830 new_active_control: function(target) 831 { 832 var controls = slider.controls.numeric.find('a').removeClass('active_item'); 833 controls.filter(':eq('+target+')').addClass('active_item'); 834 }, 835 836 activate_touch_control:function() 837 { 838 if(slider.css_active && slider.isMobile) 839 { 840 slider.touchPos = {}; 841 slider.hasMoved = false; 842 843 if(slider.options.forceMobile) slider.options.transition = 'move'; 844 845 slider.bind('touchstart', function(event) 846 { 847 slider.touchPos.X = event.originalEvent.touches[0].clientX; 848 slider.touchPos.Y = event.originalEvent.touches[0].clientY; 849 }); 850 851 slider.bind('touchend', function(event) 852 { 853 slider.touchPos = {}; 854 if(slider.hasMoved) { event.preventDefault(); } 855 slider.hasMoved = false;
856 }); 857 858 slider.bind('touchmove', function(event) 859 { 860 if(!slider.touchPos.X) 861 { 862 slider.touchPos.X = event.originalEvent.touches[0].clientX; 863 slider.touchPos.Y = event.originalEvent.touches[0].clientY; 864 } 865 else 866 { 867 var differenceX = event.originalEvent.touches[0].clientX - slider.touchPos.X; 868 var differenceY = event.originalEvent.touches[0].clientY - slider.touchPos.Y; 869 870 //check if user is scrolling the window or moving the slider 871 if(Math.abs(differenceX) > Math.abs(differenceY)) 872 { 873 event.preventDefault(); 874 875 if(!slider.animating) 876 { 877 if(slider.touchPos != event.originalEvent.touches[0].clientX) 878 { 879 if(Math.abs(differenceX) > 50) 880 { 881 var move = differenceX > 0 ? 'previous' : 'next'; 882 883 methods.pause_slider(); 884 methods.try_slide_transition(false, move); 885 slider.touchPos = {}; 886 slider.hasMoved = true; 887 return false; 888 } 889 } 890 891 } 892 } 893 } 894 }); 895 } 896 }, 897 898 899 /************************************************************************ 900 SECTION: Autorotation 901 *************************************************************************/ 902 903 start_autorotation: function() 904 { 905 if(slider.count) 906 { 907 slider.interval = setInterval(function() 908 { 909 if(slider.options.autorotation) 910 { 911 slider.trigger('switch.'+pluginNameSpace, 'next'); 912 } 913 }, 914 slider.options.autorotationTimer * 1000); 915 } 916 }, 917 918 919 toogle_autorotation: function() 920 { 921 if(slider.options.autorotation) 922 { 923 methods.pause_slider(); 924 } 925 else 926 { 927 methods.unpause_slider(); 928 } 929 }, 930 931 pause_slider: function() 932 { 933 if(slider.pauseButton.length) slider.pauseButton.removeClass('ctrl_active_rotation').text('Play'); 934 slider.options.autorotation = false; 935 clearInterval(slider.interval); 936 }, 937 938 unpause_slider: function() 939 { 940 if(slider.pauseButton.length) slider.pauseButton.addClass('ctrl_active_rotation').text('Pause'); 941 slider.options.autorotation = true; 942 methods.try_slide_transition(false, 'next'); 943 methods.start_autorotation(); 944 }, 945 946 try_slide_transition: function(event, target) 947 { 948 if(!slider.is(':visible')) 949 { 950 methods.pause_slider(); 951 return false; 952 } 953 954 slider.moveDirection = false; 955 target = methods.calculate_target(target); 956 957 if(slider.animating) return false; 958 if(target == slider.currentIndex) return false; 959 960 slider.nextIndex = target; 961 slider.animating = true; 962 methods.change_slides(target); 963 }, 964 965 /************************************************************************ 966 SECTION: Append Caption 967 *************************************************************************/ 968 969 append_caption: function(slider_passed) 970 { 971 if(slider_passed) slider = slider_passed; 972 973 slider.slides.each(function() 974 { 975 var current = $(this), 976 caption = current.data('caption'), 977 container = "div", 978 link = current.find('a'), 979 href = ""; 980 981 if(caption) 982 { 983 if(!$(caption).find('a').length && link.length) 984 { 985 href = "href='"+link.attr('href')+"'"; 986 container = "a"; 987 } 988 989 current.addClass('withCaption'); 990 var current_caption = $("<"+container+" "+href+" class='slideshow_caption'><div class='slideshow_inner_caption'><div class='slideshow_align_caption'>"+caption+"</div></div></"+container+">").appendTo(current); 991 } 992 }); 993 994 995 996 }, 997 998 /************************************************************************ 999 SECTION: CHANGE SLIDES 1000 *************************************************************************/ 1001 1002 calculate_target: function(target) 1003 { 1004 if(typeof target == 'object') target = $(target).data('show-slide'); 1005 switch(target) 1006 { 1007 case 'next': target = slider.currentIndex + 1; slider.moveDirection = 1000; break; 1008 case 'previous': target = slider.currentIndex - 1; slider.moveDirection = -1000; break; 1009 } 1010 1011 if(slider.currentIndex > target) slider.moveDirection = -1000; 1012 if(target < 0) target = slider.count - 1; 1013 if(target == slider.count) target = 0; 1014 1015 return target; 1016 }, 1017 1018 change_slides: function(target) 1019 { 1020 1021 methods.new_active_control(target); 1022 slider.nextSlide = slider.slides.filter(':eq('+target+')'); 1023 methods.try_set_slide_proportions(); 1024 methods[slider.options.transition].call(this, slider); 1025 }, 1026 1027 fade: function() 1028 { 1029 slider.nextSlide.css({display:'block', zIndex:2, opacity:1}); 1030 methods.animate(slider.currentSlide, {opacity:0}
1030, methods.change_finished); 1031 }, 1032 1033 move: function() 1034 { 1035 var sliderWidth = slider.width(), 1036 transition = {}, 1037 transition2 = {}, 1038 modifier = -1; 1039 1040 if(slider.currentIndex > slider.nextIndex) modifier = 1; 1041 if(slider.moveDirection) 1042 { 1043 if(slider.moveDirection > 0) modifier = -1; 1044 if(slider.moveDirection < 0) modifier = 1; 1045 } 1046 1047 1048 slider.nextSlide.css({display:'block', zIndex:4, opacity:1, left:0, top:0}); 1049 if(slider.css_active) 1050 { 1051 var property = slider.css_prefix + 'transform'; 1052 1053 slider.nextSlide.css(property, "translate(" + ( sliderWidth * modifier * -1) + "px,0)"); 1054 transition[property] = "translate(" + ( sliderWidth * modifier) + "px,0)"; 1055 transition2[property] = "translate(0,0)"; 1056 } 1057 else 1058 { 1059 slider.nextSlide.css({left:sliderWidth * modifier * -1}); 1060 transition['left'] = sliderWidth * modifier; 1061 transition2['left'] = 0; 1062 } 1063 1064 methods.animate(slider.nextSlide, transition2, methods.change_finished); 1065 methods.animate(slider.currentSlide, transition); 1066 }, 1067 1068 change_finished: function(event, slider_passed) 1069 { 1070 if(slider_passed) slider = slider_passed; 1071 1072 if(event) methods.remove_css_transition($(event.target)); 1073 slider.slides.css({display:'none', zIndex:1}); 1074 1075 slider.currentSlide = slider.nextSlide.css({display:'block', zIndex:3, left:0, top:0}); 1076 slider.currentIndex = slider.slides.index(slider.currentSlide); 1077 slider.currentImg = slider.currentSlide.find('img').get(0); 1078 methods.set_slide_proportions(); 1079 methods.clean_up_hook(slider); 1080 1081 }, 1082 1083 clean_up_hook: function(slider) 1084 { 1085 //blank fanction which can be used to modify the slider behaviour by another plugin building upon it 1086 slider.animating = false; 1087 }, 1088 1089 1090 /************************************************************************ 1091 methods.overwrite_defaults: 1092 1093 lets you overwrite options for multiple sliders on one page with different 1094 settings, without the need to call the slider function multiple times 1095 *************************************************************************/ 1096 overwrite_options: function(element, array) 1097 { 1098 var htmlData = element.data(), 1099 i = ""; 1100 1101 for (i in htmlData) 1102 { 1103 1104 if(typeof htmlData[i] == "string" || typeof htmlData[i] == "number" || typeof htmlData[i] == "boolean") 1105 { 1106 array[i] = htmlData[i]; 1107 } 1108 } 1109 1110 }, 1111 1112 css3_transition_check: function() 1113 { 1114 if("webkitTransition" in document.body.style) 1115 { 1116 slider.css_active = true; 1117 slider.css_prefix = "-webkit-"; 1118 } 1119 1120 if("msTransition" in document.body.style) 1121 { 1122 slider.css_active = true; 1123 slider.css_prefix = "-ms-"; 1124 } 1125 1126 if("MozTransition" in document.body.style) 1127 { 1128 slider.css_active = true; 1129 slider.css_prefix = "-moz-"; 1130 } 1131 1132 if("OTransition" in document.body.style) 1133 { 1134 slider.css_active = true; 1135 slider.css_prefix = "-o-"; 1136 } 1137 1138 if("transition" in document.body.style) 1139 { 1140 slider.css_active = true; 1141 slider.css_prefix = ""; 1142 } 1143 /**/ 1144 1145 } 1146 1147 }, 1148 1149 //default slideshow settings. can be overwritten by passing different values when calling the function 1150 defaults = 1151 { 1152 autorotation: false, // autorotation true or false? 1153 autorotationTimer: 6, // duration between autorotation switch in Seconds 1154 transitionSpeed: 400, // animation speed 1155 cssEasing: 'cubic-bezier(0.560, 0.000, 0.070, 1.000)', // easing for CSS transition 1156 easing: 'easeInOutQuint', // easing for JS transitions 1157 slides: 'li', // wich element inside the container should serve as slide 1158 pluginNameSpace: 'avia_base', // define a plugin namespace 1159 transition: 'move', // fade or move the slider 1160 forceMobile: false, // forces the mobile version to mobile devices: only fade animation and touch gestures
1161 captionClass: 'slideshow_caption',// 1162 try_video_autoplay: true, // try to start video autoplay once a user opens a slideshow video for the first time 1163 globalDelay: 0 // delay of appearance for multiple slideshows 1164 }; 1165 1166 //merge default options and options passed by the user, then collect some slider data 1167 slider.methods = $.extend(methods, $.fn.avia_base_slider.methods , overwrite_methods); 1168 slider.options = $.extend({}, defaults, $.fn.avia_base_slider.defaults, options); 1169 slider.slides = slider.find(slider.options.slides); 1170 slider.count = slider.slides.length; 1171 slider.animating = false; 1172 slider.currentIndex = 0; 1173 slider.nextIndex = 0; 1174 slider.currentSlide = slider.slides.filter(':eq('+slider.currentIndex+')'); 1175 slider.nextSlide = slider.currentSlide; 1176 slider.moveDirection = false; 1177 slider.currentImg = slider.currentSlide.find('img').get(0); 1178 slider.isMobile = 'ontouchstart' in document.documentElement; 1179 slider.proportions = 16 / 9; //default value if we got a pure video slideshow 1180 slider.controls = {}; 1181 slider.pauseButton = {}; 1182 slider.interval = false; 1183 slider.css_active = false; 1184 slider.css_prefix = false;
1185 1186 if(slider.options.pluginNameSpace) pluginNameSpace = slider.options.pluginNameSpace; 1187 1188 methods.css3_transition_check(); 1189 methods.preload(slider); 1190 1191 }); 1192 1193} 1194 1195})(jQuery); 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211// ------------------------------------------------------------------------------------------- 1212// show/hide controls 1213// ------------------------------------------------------------------------------------------- 1214 1215(function($) 1216{ 1217 $.fn.avia_base_control_hide = function() 1218 { 1219 return this.each(function() 1220 { 1221 var container = $(this).parent(); 1222 var controls; 1223 var isMobile = 'ontouchstart' in document.documentElement 1224 1225 if(!isMobile) 1226 { 1227 //next button click 1228 container.delegate('.nextSlide', 'click', function() 1229 { 1230 container.find('.ctrl_next').trigger('click'); 1231 }); 1232 1233 1234 /* 1235 container.delegate('.slideshow_caption, .slideshow_inner_caption', 'mouseleave', function(event) 1236 { 1237 container.trigger('mouseenter'); 1238 }); 1239 1240 container.delegate('.slideshow_caption, .slideshow_inner_caption', 'mouseenter', function(event) 1241 { 1242 container.trigger('mouseleave'); 1243 }); 1244 */ 1245 1246 1247 //hover event 1248 container.hover(function(event) 1249 { 1250 //if($(event.target).is('.slideshow_caption, .slideshow_inner_caption')) return; 1251 controls = container.find('.slide_controls a').stop().css({display:'block', opacity:0}).animate({opacity:0.9}); 1252 }, 1253 1254 function(event) 1255 { 1256 if(!controls) return; 1257 1258 controls.stop().animate({opacity:0}
1258, function() 1259 { 1260 controls.css({opacity:0}); 1261 }); 1262 }); 1263 1264 } 1265 1266 }); 1267 }; 1268})(jQuery); 1269 1270 1271 1272// ------------------------------------------------------------------------------------------- 1273// external controls 1274// ------------------------------------------------------------------------------------------- 1275 1276(function($) 1277{ 1278 $.fn.avia_external_controls = function() 1279 { 1280 return this.each(function() 1281 { 1282 var container = $(this).parent(); 1283 var controls = container.next('.thumbnails_container'), 1284 thumbs = controls.find('.slideThumb'); 1285 1286 if(!controls.length) return; 1287 1288 //next button click 1289 controls.delegate('.slideThumb', 'click', function(event) 1290 { 1291 thumbs.removeClass('activeslideThumb'); 1292 var current = $(this).addClass('activeslideThumb'); 1293 var index = thumbs.index(this); 1294 container.find('.numeric_controls a:eq('+index+')').trigger('click'); 1295 }); 1296 1297 }); 1298 }; 1299})(jQuery); 1300 1301 1302 1303// ------------------------------------------------------------------------------------------- 1304// image preloader 1305// ------------------------------------------------------------------------------------------- 1306 1307(function($) 1308{ 1309 var aviaGlobalCount = 0 1310 1311 $.fn.aviaImagePreloader = function(variables, callback) 1312 { 1313 var defaults = 1314 { 1315 css_before_show:{}, 1316 css_show:{}, 1317 fadeInSpeed: 800, 1318 delay:0, 1319 maxLoops: 10, 1320 thisData: {}, 1321 globalDelay:0, 1322 data: '' 1323 }; 1324 1325 var options = $.extend(defaults, variables), 1326 isMobile = 'ontouchstart' in document.documentElement; 1327 1328 aviaGlobalCount = aviaGlobalCount + this.find('img').length; 1329 1330 return this.each(function() 1331 { 1332 var container = $(this), 1333 images = $('img', this), 1334 parent = images.parent(), 1335 imageCount = images.length, 1336 interval = '', 1337 animTime = 300, 1338 greyscale_active = container.parents('.greyscale-active').length || container.is('.greyscale-active'), 1339 allImages = images ; 1340 1341 if(isMobile) greyscale_active = false; 1342 1343 var methods = 1344 { 1345 checkImage: function() 1346 { 1347 images.each(function(i) 1348 { 1349 if(this.complete == true) 1350 { 1351 images = images.not(this); 1352 if(greyscale_active) methods.greyscaler(this); 1353 } 1354 }); 1355 1356 if(images.length && options.maxLoops >= 0) 1357 { 1358 options.maxLoops--; 1359 setTimeout(methods.checkImage, 500); 1360 } 1361 else 1362 { 1363 methods.showImages(); 1364 } 1365 1366 1367 }, 1368 1369 showImages: function() 1370 { 1371 setTimeout(function() 1372 { 1373 allImages.each(function(i) 1374 { 1375 var currentImage = $(this); 1376 methods.showSingleImage(currentImage, i); 1377 }); 1378 }, 1379 options.globalDelay); 1380 }, 1381 1382 showSingleImage: function(currentImage, i) 1383 { 1384 aviaGlobalCount --; 1385 1386 if(options.css_before_show) currentImage.css(options.css_before_show); 1387 if(options.css_show) currentImage.animate(options.css_show, options.fadeInSpeed); 1388 1389 if(allImages.length == i+1) 1390 { 1391 if(aviaGlobalCount == 0) { $(window).trigger('avia_images_loaded'); } 1392 1393 methods.callback(i); 1394 } 1395 }, 1396 1397 callback: function() 1398 { 1399 if (variables instanceof Function) { callback = variables; } 1400 if (callback instanceof Function) { callback.call(options.thisData, options.data); } 1401 }, 1402 1403 greyscaler: function(image) 1404 { 1405 var clone, $img = $(image); 1406 1407 if ($.browser.msie && $.browser.version < 9) 1408 { 1409 clone = $img.clone().addClass('greyscale-image').insertBefore($img); 1410 1411 var cloneEl = clone.get(0); 1412 cloneEl.style.filter = "progid:DXImageTransform.Microsoft.BasicImage(grayScale=1)"; 1413 } 1414 else 1415 { 1416 clone = avia_grayscale(image, $img) 1417 clone.insertAfter($img).addClass('greyscale-image'); 1418 } 1419 }, 1420 1421 greyscale_bindings: function() 1422 { 1423 $(".greyscale-active").delegate(".flex_column", "mouseenter", function() 1424 { 1425 var column = $(this), image = column.find('.greyscale-image'); 1426 image.stop().animate({opacity:0}
1426,animTime); 1427 } 1428 ).delegate(".flex_column", "mouseleave", function() 1429 { 1430 var column = $(this), image = column.find('.greyscale-image'); 1431 image.stop().animate({opacity:1},animTime); 1432 }); 1433 1434 } 1435 }; 1436 if ($.browser.msie && $.browser.version < 9) { animTime = 600; } 1437 if(greyscale_active) methods.greyscale_bindings(); 1438 if(!images.length) { methods.callback(); if(aviaGlobalCount == 0) { $(window).trigger('avia_images_loaded'); } return } 1439 1440 methods.checkImage(); 1441 1442 }); 1443 }; 1444})(jQuery); 1445 1446 1447 1448 1449 1450 1451function avia_grayscale(image, $img) 1452{ 1453 1454 var canvas = document.createElement('canvas'); 1455 var ctx = canvas.getContext('2d'); 1456 var newData = $img.data(); 1457 1458 if(newData.imgh > 0) 1459 { 1460 canvas.width = newData.imgw; 1461 canvas.height = newData.imgh; 1462 } 1463 else 1464 { 1465 var w = $img.attr('width'), h = $img.attr('height'); 1466 if(w && h) 1467 { 1468 canvas.width = w; 1469 canvas.height = h; 1470 } 1471 } 1472 1473 1474 1475 ctx.drawImage(image, 0, 0); 1476 var imgPixels = ctx.getImageData(0, 0, canvas.width, canvas.height); 1477 for(var y = 0; y < imgPixels.height; y++){ 1478 for(var x = 0; x < imgPixels.width; x++){ 1479 var i = (y * 4) * imgPixels.width + x * 4; 1480 var avg = (imgPixels.data[i] + imgPixels.data[i + 1] + imgPixels.data[i + 2]) / 3; 1481 imgPixels.data[i] = avg; 1482 imgPixels.data[i + 1] = avg; 1483 imgPixels.data[i + 2] = avg; 1484 } 1485 } 1486 ctx.putImageData(imgPixels, 0, 0, 0, 0, imgPixels.width, imgPixels.height); 1487 1488 return jQuery(canvas); 1489 1490 1491 } 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501jQuery.easing['jswing'] = jQuery.easing['swing']; 1502 1503jQuery.extend( jQuery.easing, 1504{ 1505 def: 'easeOutQuad', 1506 swing: function (x, t, b, c, d) { 1507 //alert(jQuery.easing.default); 1508 return jQuery.easing[jQuery.easing.def](x, t, b, c, d); 1509 }, 1510 easeInQuad: function (x, t, b, c, d) { 1511 return c*(t/=d)*t + b; 1512 }, 1513 easeOutQuad: function (x, t, b, c, d) { 1514 return -c *(t/=d)*(t-2) + b; 1515 }, 1516 easeInOutQuad: function (x, t, b, c, d) { 1517 if ((t/=d/2) < 1) return c/2*t*t + b; 1518 return -c/2 * ((--t)*(t-2) - 1) + b; 1519 }, 1520 easeInCubic: function (x, t, b, c, d) { 1521 return c*(t/=d)*t*t + b; 1522 }, 1523 easeOutCubic: function (x, t, b, c, d) { 1524 return c*((t=t/d-1)*t*t + 1) + b; 1525 }, 1526 easeInOutCubic: function (x, t, b, c, d) { 1527 if ((t/=d/2) < 1) return c/2*t*t*t + b; 1528 return c/2*((t-=2)*t*t + 2) + b; 1529 }, 1530 easeInQuart: function (x, t, b, c, d) { 1531 return c*(t/=d)*t*t*t + b; 1532 }, 1533 easeOutQuart: function (x, t, b, c, d) { 1534 return -c * ((t=t/d-1)*t*t*t - 1) + b; 1535 }, 1536 easeInOutQuart: function (x, t, b, c, d) { 1537 if ((t/=d/2) < 1) return c/2*t*t*t*t + b; 1538 return -c/2 * ((t-=2)*t*t*t - 2) + b; 1539 }, 1540 easeInQuint: function (x, t, b, c, d) { 1541 return c*(t/=d)*t*t*t*t + b; 1542 }, 1543 easeOutQuint: function (x, t, b, c, d) { 1544 return c*((t=t/d-1)*t*t*t*t + 1) + b; 1545 }, 1546 easeInOutQuint: function (x, t, b, c, d) { 1547 if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; 1548 return c/2*((t-=2)*t*t*t*t + 2) + b; 1549 }, 1550 easeInSine: function (x, t, b, c, d) { 1551 return -c * Math.cos(t/d * (Math.PI/2)) + c + b; 1552 }, 1553 easeOutSine: function (x, t, b, c, d) { 1554 return c * Math.sin(t/d * (Math.PI/2)) + b; 1555 }, 1556 easeInOutSine: function (x, t, b, c, d) { 1557 return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; 1558 }, 1559 easeInExpo: function (x, t, b, c, d) { 1560 return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; 1561 }, 1562 easeOutExpo: function (x, t, b, c, d) { 1563 return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; 1564 }, 1565 easeInOutExpo: function (x, t, b, c, d) { 1566 if (t==0) return b; 1567 if (t==d) return b+c; 1568 if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; 1569 return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; 1570 }, 1571 easeInCirc: function (x, t, b, c, d) { 1572 return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; 1573 }, 1574 easeOutCirc: function (x, t, b, c, d) { 1575 return c * Math.sqrt(1 - (t=t/d-1)*t) + b; 1576 }, 1577 easeInOutCirc: function (x, t, b, c, d) { 1578 if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; 1579 return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; 1580 }, 1581 easeInElastic: function (x, t, b, c, d) { 1582 var s=1.70158;var p=0;var a=c; 1583 if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; 1584 if (a < Math.abs(c)) { a=c; var s=p/4; } 1585 else var s = p/(2*Math.PI) * Math.asin (c/a); 1586 return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; 1587 }, 1588 easeOutElastic: function (x, t, b, c, d) { 1589 var s=1.70158;var p=0;var a=c; 1590 if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; 1591 if (a < Math.abs(c)) { a=c; var s=p/4; } 1592 else var s = p/(2*Math.PI) * Math.asin (c/a); 1593 return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; 1594 }, 1595 easeInOutElastic: function (x, t, b, c, d) { 1596 var s=1.70158;var p=0;var a=c; 1597 if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5); 1598 if (a < Math.abs(c)) { a=c; var s=p/4; } 1599 else var s = p/(2*Math.PI) * Math.asin (c/a); 1600 if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; 1601 return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; 1602 }, 1603 easeInBack: function (x, t, b, c, d, s) { 1604 if (s == undefined) s = 1.70158; 1605 return c*(t/=d)*t*((s+1)*t - s) + b; 1606 }, 1607 easeOutBack: function (x, t, b, c, d, s) { 1608 if (s == undefined) s = 1.70158; 1609 return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; 1610 }, 1611 easeInOutBack: function (x, t, b, c, d, s) { 1612 if (s == undefined) s = 1.70158; 1613 if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; 1614 return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; 1615 }, 1616 easeInBounce: function (x, t, b, c, d) { 1617 return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b; 1618 }, 1619 easeOutBounce: function (x, t, b, c, d) { 1620 if ((t/=d) < (1/2.75)) { 1621 return c*(7.5625*t*t) + b; 1622 } else if (t < (2/2.75)) { 1623 return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; 1624 } else if (t < (2.5/2.75)) { 1625 return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; 1626 } else { 1627 return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; 1628 } 1629 }, 1630 easeInOutBounce: function (x, t, b, c, d) { 1631 if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b; 1632 return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b; 1633 } 1634}); 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644function avia_log(text) 1645{
1646 var ios = navigator.userAgent.toLowerCase().match(/(iphone|ipod|ipad)/); 1647 ( (window.console && console.log && !ios) || (window.opera && opera.postError && !ios) || avia_text_log).call(this, text); 1648 1649 function avia_text_log(text) 1650 { 1651 var logfield = jQuery('.avia_logfield'); 1652 if(!logfield.length) logfield = jQuery('<pre class="avia_logfield"></pre>').appendTo('body').css({ zIndex:100000, 1653 padding:"20px", 1654 backgroundColor:"#ffffff", 1655 position:"fixed", 1656 top:0, right:0, 1657 width:"300px", 1658 borderColor:"#cccccc", 1659 borderWidth:"1px", 1660 borderStyle:'solid', 1661 height:"600px", 1662 overflow:'scroll', 1663 display:'block', 1664 zoom:1 1665 }); 1666 var val = logfield.html(); 1667 var text = avia_get_object(text); 1668 logfield.html(val + "\n<br/>" + text); 1669 } 1670 1671 function avia_get_object(obj) 1672 { 1673 var sendreturn = obj; 1674 1675 if(typeof obj == 'object' || typeof obj == 'array') 1676 { 1677 for (i in obj) 1678 { 1679 sendreturn += "'"+i+"': "+obj[i] + "<br/>"; 1680 } 1681 } 1682 1683 return sendreturn; 1684 } 1685} 1686 1687 1688 1689
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.