1// milkychance | 4 | functions.js 2 3// ------------ scroll to 0 ------------ / 4// window.scrollTo(0,0); 5// window.onbeforeunload = function(){ window.scrollTo(0,0); }; 6var cachecontrol = getCacheControl(); 7 8function doCtrl() { 9 doLog("doCtrl()"); 10 // hi ;) 11} 12 13function onPageReady() { 14 doLog("onPageReady"); 15 getConf(); 16 initHeader(); 17 initEffects(); 18 doTruncate('.text_truncate', 9); 19 initCarousels(); 20 initSvg(); 21 if (main == "index") { 22 initNav(); 23 hidePreloader(); 24 // initMasonry(); 25 } 26 initFancybox(); 27 checkLinks(); 28 onResize(); 29 initResize(); 30 sInit(); 31 sRefresh(); 32 lazySizes.init(); 33} 34 35function onPageLoaded() { 36 doLog("onPageLoaded"); 37 sRefresh(); 38 setTimeout(function() { 39 initAudioplayer(); 40 initMusicplayer(); 41 initNewsletter(); 42 }, 5000); 43 setTimeout(function() { 44 $('.carousel-holder-size-detect-auto .carousel').flickity('resize'); 45 }, 1500); 46} 47 48function hidePreloader() { 49 $('#loading-animation').removeClass("fadeIn"); 50 $('#loading-animation').addClass("animated_manual_animation fadeOut"); 51 $('#preloader').delay(500).fadeOut(500); 52 53 setTimeout(function() { 54 $('.header_norm .social .animated_manual').each( function() { 55 var elem = $(this); 56 if ( !elem.hasClass('visible') ) { 57 var animationDelay = elem.data('animation-delay'); 58 var animation = elem.data('animation'); 59 if ( animationDelay ) { 60 setTimeout(function(){ 61 elem.addClass( animation + " animated_manual_animation visible" ); 62 }, animationDelay); 63 } else { 64 elem.addClass( animation + " animated_manual_animation visible" ); 65 } 66 } 67 }); 68 }, 2000); 69 70 $('#teaser .animated_manual').each( function() { 71 var elem = $(this); 72 if ( !elem.hasClass('visible') ) { 73 var animationDelay = elem.data('animation-delay'); 74 var animation = elem.data('animation'); 75 if ( animationDelay ) { 76 setTimeout(function(){ 77 elem.addClass( animation + " animated_manual_animation visible" ); 78 }, animationDelay); 79 } else { 80 elem.addClass( animation + " animated_manual_animation visible" ); 81 } 82 } 83 }); 84} 85 86function skipIntro() { 87 doScroll('#products'); 88 volume_bg_video(0); 89} 90 91function onResize() { 92 Waypoint.refreshAll(); 93} 94 95 96// ------------ passion-special ------------ // 97 98function initDrawPassion() { 99 100 var obj = JSON.parse(wavesPassion); 101 var c = document.getElementById("drawcanvas-passion"); 102 var ctx = c.getContext("2d"); 103 var h = c.height; 104 var w = c.width; 105 ctx.strokeStyle = '#666'; 106 ctx.lineWidth = 10; 107 var max_i = 158; // obj.data.length; 108 var i = 100; 109 var myDrawTimer; 110 111 112 var dot1 = document.getElementById("passion-dot1"); 113 var dot2 = document.getElementById("passion-dot2"); 114 var dot3 = document.getElementById("passion-dot3"); 115 var dot4 = document.getElementById("passion-dot4"); 116 var dot5 = document.getElementById("passion-dot5"); 117 var dot6 = document.getElementById("passion-dot6"); 118 var dot7 = document.getElementById("passion-dot7"); 119 var dot8 = document.getElementById("passion-dot8"); 120 var dot9 = document.getElementById("passion-dot9"); 121 var dot10 = document.getElementById("passion-dot10"); 122 123 var noise1 = document.getElementById("passion-noise1"); 124 var noise2 = document.getElementById("passion-noise2"); 125 var noise3 = document.getElementById("passion-noise3"); 126 127 var noise4 = document.getElementById("passion-noise4"); 128 var noise5 = document.getElementById("passion-noise5"); 129 var noise6 = document.getElementById("passion-noise6"); 130 131 var dot_w = 60; 132 var dot_h = 60; 133 var min_p = 100; 134 var max_p = 0; 135 136 function startDraw() { 137 myDrawTimer= setInterval(doShine, 35); 138 } 139 140 function stopDraw() { 141 clearInterval(myDrawTimer); 142 // console.log("min_p: " + min_p + ", max_p: " + max_p); 143 } 144 145 function doShine() { 146 ctx.clearRect(0, 0, w, h); 147 ctx.beginPath(); 148 149 i++; 150 if (i > max_i) { 151 i = 0; 152 } 153 154 let cx = w / 2; 155 let cy = h / 2; 156 let r = h / 4; 157 let percent = (h / 2 - r) / 255; 158 let point_count = 64; // -> 64 immer doppelt so viel wie striche erwuenscht 159 let increase = (360 / point_count) * Math.PI / 180; 160 161 for (let point = 1; point <= point_count; point++) { 162 var myPoint = point - 1; 163 let p = obj.data[i][myPoint]; // data[600 % point]; // get value 164 p *= percent; 165 // point++; //start at 1 166 let a = point * increase; 167 168 let sx = cx + r * Math.cos(a); 169 let sy = cy + r * Math.sin(a); 170 ctx.moveTo(sx, sy); 171
172 let dx = cx + (r + p) * Math.cos(a); 173 let dy = cy + (r + p) * Math.sin(a); 174 ctx.lineTo(dx, dy); 175 176 // ctx.drawImage(dot5,0,0,200,200,dx,dy,dot_w,dot_h); 177 drawDot(dx,dy,p); 178 } 179 180 var j; 181 // pink noise 182 for (j = 1; j <= 10; j++) { 183 var tmp_x = myRandom(0, (w - dot_w)); 184 var tmp_y = myRandom(0, (h - dot_h)); 185 ctx.drawImage(noise1,0,0,200,200,tmp_x,tmp_y,dot_w,dot_h); 186 } 187 for (j = 1; j <= 5; j++) { 188 var tmp_x = myRandom(0, (w - dot_w)); 189 var tmp_y = myRandom(0, (h - dot_h)); 190 ctx.drawImage(noise2,0,0,200,200,tmp_x,tmp_y,dot_w,dot_h); 191 } 192 for (j = 1; j <= 2; j++) { 193 var tmp_x = myRandom(0, (w - dot_w)); 194 var tmp_y = myRandom(0, (h - dot_h)); 195 ctx.drawImage(noise3,0,0,200,200,tmp_x,tmp_y,dot_w,dot_h); 196 } 197 198 // yellow noise 199 for (j = 1; j <= 3; j++) { 200 var tmp_x = myRandom(0, (w - dot_w)); 201 var tmp_y = myRandom(0, (h - dot_h)); 202 ctx.drawImage(noise4,0,0,200,200,tmp_x,tmp_y,dot_w,dot_h); 203 } 204 for (j = 1; j <= 3; j++) { 205 var tmp_x = myRandom(0, (w - dot_w)); 206 var tmp_y = myRandom(0, (h - dot_h)); 207 ctx.drawImage(noise5,0,0,200,200,tmp_x,tmp_y,dot_w,dot_h); 208 } 209 for (j = 1; j <= 3; j++) { 210 var tmp_x = myRandom(0, (w - dot_w)); 211 var tmp_y = myRandom(0, (h - dot_h)); 212 ctx.drawImage(noise6,0,0,200,200,tmp_x,tmp_y,dot_w,dot_h); 213 } 214 // ctx.stroke(); 215 } 216 217 218 function drawDot(a,b,p) { 219 // console.log("drawDot Before(" + a + "," + b + "," + p + ")"); 220 p = Math.round((p * 100) / 340); 221 if (p < min_p) { 222 min_p = p; 223 } 224 if (p > max_p) { 225 max_p = p; 226 } 227 // console.log("drawDot(" + a + "," + b + "," + p + ")"); 228 a = Math.round(a + myRandom(-10, 10)); 229 b = Math.round(b - 50); 230 231 // min_p: 28, max_p: 84 232 233 switch(true) { 234 case p > 80: 235 // ctx.drawImage(dot10,0,0,200,200,a,b,dot_w*2,dot_h*2); 236 ctx.drawImage(dot1,0,0,200,200,a,b,dot_w,dot_h); 237 break; 238 case p > 70: 239 // ctx.drawImage(dot9,0,0,200,200,a,b,dot_w*1.9,dot_h*1.9); 240 ctx.drawImage(dot2,0,0,200,200,a,b,dot_w,dot_h); 241 break; 242 case p > 65: 243 // ctx.drawImage(dot8,0,0,200,200,a,b,dot_w*1.8,dot_h*1.8); 244 ctx.drawImage(dot3,0,0,200,200,a,b,dot_w,dot_h); 245 break; 246 case p > 50: 247 // ctx.drawImage(dot7,0,0,200,200,a,b,dot_w*1.7,dot_h*1.7);
248 ctx.drawImage(dot4,0,0,200,200,a,b,dot_w,dot_h); 249 break; 250 case p > 55: 251 // ctx.drawImage(dot6,0,0,200,200,a,b,dot_w*1.6,dot_h*1.6); 252 ctx.drawImage(dot5,0,0,200,200,a,b,dot_w,dot_h); 253 break; 254 case p > 50: 255 // ctx.drawImage(dot5,0,0,200,200,a,b,dot_w*1.5,dot_h*1.5); 256 ctx.drawImage(dot6,0,0,200,200,a,b,dot_w,dot_h); 257 break; 258 case p > 45: 259 // ctx.drawImage(dot4,0,0,200,200,a,b,dot_w*1.4,dot_h*1.4); 260 ctx.drawImage(dot7,0,0,200,200,a,b,dot_w,dot_h); 261 break; 262 case p > 40: 263 // ctx.drawImage(dot3,0,0,200,200,a,b,dot_w*1.3,dot_h*1.3); 264 ctx.drawImage(dot8,0,0,200,200,a,b,dot_w,dot_h); 265 break; 266 case p > 30: 267 // ctx.drawImage(dot2,0,0,200,200,a,b,dot_w*1.2,dot_h*1.1); 268 ctx.drawImage(dot9,0,0,200,200,a,b,dot_w,dot_h); 269 break; 270 default: 271 // ctx.drawImage(dot1,0,0,200,200,a,b,dot_w*1.1,dot_h*1.1); 272 ctx.drawImage(dot10,0,0,200,200,a,b,dot_w,dot_h); 273 break; 274 } 275 276 } 277 278 startDraw(); 279 280} 281 282// ------------ vienna-special ------------ // 283 284function initDrawVienna() { 285 286 var obj = JSON.parse(wavesVienna); 287 var c = document.getElementById("drawcanvas-vienna"); 288 var ctx = c.getContext("2d"); 289 var h = c.height; 290 var w = c.width; 291 ctx.strokeStyle = '#fff'; 292 ctx.lineWidth = 10; 293 var max_i = 150; // obj.data.length; 294 var i = 100; 295 var myDrawTimer; 296 297 var dot1 = document.getElementById("vienna-dot1"); 298 var dot2 = document.getElementById("vienna-dot2"); 299 var dot3 = document.getElementById("vienna-dot3"); 300 var dot4 = document.getElementById("vienna-dot4"); 301 var dot5 = document.getElementById("vienna-dot5"); 302 var dot6 = document.getElementById("vienna-dot6"); 303 var dot7 = document.getElementById("vienna-dot7"); 304 var dot8 = document.getElementById("vienna-dot8"); 305 var dot9 = document.getElementById("vienna-dot9"); 306 var dot10 = document.getElementById("vienna-dot10"); 307 var dot_w = 30; 308 var dot_h = 60; 309 var min_p = 100; 310 var max_p = 0; 311 312 function startDraw() { 313 myDrawTimer= setInterval(doWave, 50); 314 } 315 316 function stopDraw() { 317 clearInterval(myDrawTimer); 318 // console.log("min_p: " + min_p + ", max_p: " + max_p); 319 } 320 321 function doWave() { 322 ctx.clearRect(0, 0, w, h); 323 i++; 324 if (i > max_i) { 325 i = 50; 326 } 327 328 var cx = w / 2; 329 var cy = h / 2; 330 var r = h / 3.5; 331 var percent = h / 255; 332 var point_count = 64; // -> 64 immer doppelt so viel wie striche erwuenscht 333 var increase = (w / point_count); 334 335 for (var point = 1; point <= point_count; point++) { 336 var myPoint = point; 337 var p = obj.data[i][myPoint]; // data[600 % point]; // get value 338 var b = Math.round(p * percent); 339 var a = Math.round(point * increase); 340 point++; // nur jeden 2. malen -> 32 striche 341 drawDot(a,b,p); 342 } 343 } 344 345 function drawDot(a,b,p) { 346 p = Math.round((p * 100) / 255); 347 if (p < min_p) { 348 min_p = p; 349 } 350 if (p > max_p) { 351 max_p = p; 352 } 353 // console.log("drawDot(" + a + "," + b + "," + p + ")"); 354 a = Math.round((a * 0.7) + myRandom(-1, 1) + (w * 0.1)); 355 b = Math.round(b / 1.5); 356 // min_p: 28, max_p: 84 357 switch(true) { 358 case p > 95: 359 ctx.drawImage(dot10,0,0,100,200,a,b,dot_w*2,dot_h*2); 360 break; 361 case p > 87: 362 ctx.drawImage(dot9,0,0,100,200,a,b,dot_w*1.9,dot_h*1.9); 363 break; 364 case p > 85: 365 ctx.drawImage(dot8,0,0,100,200,a,b,dot_w*1.8,dot_h*1.8); 366 break; 367 case p > 80: 368 ctx.drawImage(dot7,0,0,100,200,a,b,dot_w*1.7,dot_h*1.7);
369 break; 370 case p > 75: 371 ctx.drawImage(dot6,0,0,100,200,a,b,dot_w*1.6,dot_h*1.6); 372 break; 373 case p > 70: 374 ctx.drawImage(dot5,0,0,100,200,a,b,dot_w*1.5,dot_h*1.5); 375 break; 376 case p > 65: 377 ctx.drawImage(dot4,0,0,100,200,a,b,dot_w*1.4,dot_h*1.4); 378 break; 379 case p > 55: 380 ctx.drawImage(dot3,0,0,100,200,a,b,dot_w*1.3,dot_h*1.3); 381 break; 382 case p > 50: 383 ctx.drawImage(dot2,0,0,100,200,a,b,dot_w*1.2,dot_h*1.1); 384 break; 385 default: 386 ctx.drawImage(dot1,0,0,100,200,a,b,dot_w*1.1,dot_h*1.1); 387 break; 388 } 389 390 } 391 392 startDraw(); 393 394} 395 396// ------------ skrollr ------------ // 397 398var s; 399var lastDocumentWidth = 0; 400var lastDocumentHeight = 0; 401var sRefreshTimeout; 402 403function sInit() { 404 s = skrollr.init({ forceHeight:false, mobileBreakpoint:860 }); 405} 406 407function sRefresh() { 408 var width = $(document).width(); 409 var height = $(document).height(); 410 if (height !== lastDocumentHeight || width !== lastDocumentWidth) { 411 // only refresh if the size actually changed // console.log("document width/height has changed to: " + width + "/" + height); 412 lastDocumentWidth = width; 413 lastDocumentHeight = height; 414 clearTimeout(sRefreshTimeout); 415 sRefreshTimeout = setTimeout(doRefresh, 250); 416 } 417 initCopyButtons(); 418} 419 420function doRefresh() { 421 s.refresh(); 422 Waypoint.refreshAll(); 423} 424 425// ------------ effects ------------ // 426 427function unSticky(el) { 428 $(el).slideUp("fast", function() { 429 $(el).css({"position":"relative","top":"auto","display":"block"}); 430 $(el).find(".close").remove(); 431 }); 432} 433 434function initEffects() { 435 initAnims(); 436 if (document.getElementById("drawcanvas-vienna")) { 437 initDrawVienna(); 438 } 439 if (document.getElementById("drawcanvas-passion")) { 440 initDrawPassion(); 441 } 442} 443 444function initAnims() { 445 $.appear('.animated', { force_process:true }); 446 $('.animated').on('appear', function() { 447 var elem = $(this); 448 var animation = elem.data('animation'); 449 if (!elem.hasClass('visible')) { 450 var animationDelay = elem.data('animation-delay'); 451 if (animationDelay) { 452 setTimeout(function() { 453 elem.addClass(animation + " visible"); 454 }, animationDelay); 455 } else { 456 elem.addClass(animation + " visible"); 457 } 458 } 459 }); 460 $('.animated').on('disappear', function() { 461 var elem = $(this); 462 var animation = elem.data('animation'); 463 if (elem.hasClass('visible')) { 464 elem.removeClass(animation + " visible"); 465 } 466 }); 467 $(window).on("load", function() { 468 $('.onstart').each(function() { 469 var elem = $(this); 470 if (!elem.hasClass('visible')) { 471 var animationDelay = elem.data('animation-delay'); 472 var animation = elem.data('animation'); 473 if (animationDelay) { 474 setTimeout(function() { 475 elem.addClass(animation + " visible"); 476 }, animationDelay); 477 } else { 478 elem.addClass(animation + " visible"); 479 } 480 } 481 }); 482 }); 483} 484 485function initAnimsManual(target) { 486 $(target).appear(); 487 $(target).on('appear', function() { 488 var elem = $(this); 489 var animation = elem.data('animation'); 490 if (!elem.hasClass('visible')) { 491 var animationDelay = elem.data('animation-delay'); 492 if (animationDelay) { 493 setTimeout(function(){ 494 elem.addClass(animation + " visible"); 495 }, animationDelay); 496 } else { 497 elem.addClass(animation + " visible"); 498 } 499 } 500 }); 501} 502 503function doAnim(elem, effect, remove) { 504 if (remove === false) { 505 $(elem).addClass("animated_manual_animation " + effect).one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend", function() {}); 506 } else { 507 $(elem).addClass("animated_manual_animation " + effect).one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend", function() { 508 $(elem).removeClass("animated_manual_animation"); 509 $(elem).removeClass(effect); 510 }); 511 $(elem).removeClass('animated_manual'); 512 } 513} 514 515// ------------ inits ------------ / 516 517// https://stackoverflow.com/questions/9038625/#answer-9039885, https://stackoverflow.com/questions/7944460/ 518var isiOS = ['iPad Simulator','iPhone Simulator','iPod Simulator','iPad','iPhone','iPod'].includes(navigator.platform)||(navigator.userAgent.includes("Mac")&&"ontouchend"in document); 519var isSafari = navigator.vendor && navigator.vendor.indexOf('Apple') > -1 && navigator.userAgent && navigator.userAgent.indexOf('CriOS') == -1 && navigator.userAgent.indexOf('FxiOS') == -1; 520var isSafariMac = false; 521 522function getConf() { 523 if (device == "") { 524 // http://stackoverflow.com/questions/3514784/ 525 var ua = navigator.userAgent.toLowerCase(); doLog("ua: " + ua); 526 var vendor = navigator.vendor;
526 doLog("vendor: " + vendor); 527 if (ua.match(/webos/i)) { device = "webos"; } 528 if (ua.match(/opera mini/i)) { device = "opera mini"; } 529 if (ua.match(/mobile/i)) { device = "mobile"; } 530 if (ua.match(/ipad/i)) { device = "ipad"; } 531 if (ua.match(/ipod|iphone/i)) { device = "iphone"; } 532 if (ua.match(/blackberry/i)) { device = "blackberry"; } 533 if (ua.match(/android/i)) { device = "android"; } 534 if (ua.match(/kindle/i)) { device = "kindle"; } 535 if (ua.match(/windows phone/i)) { device = "windows phone"; } 536 if (ua.match(/iemobile/i)) { device = "iemobile"; } 537 if (ua.match(/tablet/i)) { device = "tablet"; } 538 } 539 if (isSafari && isiOS) { 540 isSafariMac = false; doLog("safari on ios"); 541 } else { 542 if (isSafari) { isSafariMac = true; doLog("safari on mac"); } 543 } 544 doLog("getConf() -> device: " + device); 545 if (device === "ipad" || device === "tablet") { $("#viewport_id").attr("content", "width=device-width, initial-scale=1"); } // set viewport 546 if (device !== "") { 547 $("#body_id").removeClass("desktop").addClass("device"); // set body-class, default: desktop 548 } 549 if (isiOS) { 550 $("#body_id").addClass("iOS"); 551 } 552} 553 554 555// ------------------------ gallery ------------------------ // 556var $grid; 557 558var masonryOptions = { 559 itemSelector: '.grid-item', 560 // columnWidth: 80, 561 gutter: 30 562}; 563 564function initMasonry() { 565 $grid = $('.grid').masonry(masonryOptions); 566} 567 568function destroyMasonry() { 569 $grid.masonry('destroy'); 570} 571 572 573// ------------ load section-content ------------ // 574function getItems(section,type,subtype) { 575 doLog("getItems('" + section + "," + type + "," + subtype + "')"); 576 saveHistory(section,type,subtype,""); 577 $.ajax({ 578 url: "/" + base + "/section_" + section + "_get_items.php", 579 data: "section=" + section + "&type=" + type + "&subtype=" + subtype + "&lang=" + lang + "&device=" + device + "&country=" + country, 580 method: "GET", 581 dataType: "html", 582 cache: false, 583 beforeSend: function() { 584 $("#" + section + " ul.sub_nav li").removeClass("on"); 585 $("#" + section + "_items ul.itemlist").empty(); 586 $("#" + section + "_items .more").html('<div class="loading"><div class="icon icon-spin5 animate-spin"></div></div>'); 587 if (section == "gallery") { 588 destroyMasonry(); 589 $('.grid').empty(); 590 } 591 }, 592 success: function(data) { 593 $("#" + section + "_items ul.itemlist").attr("class","itemlist type-" + type + " clearfix"); // gregorian special 594 $("#" + section + " ul.sub_nav li.type" + type).addClass("on"); 595 if (section == "gallery") { 596 initMasonry(); 597 var $content = $(data); 598 $grid.append($content).masonry('appended', $content); 599 setTimeout(function(){ $grid.masonry(); }, 100); 600 } else { 601 $("#" + section + "_items ul.itemlist").append(data); 602 initSvg("#" + section); 603 } 604 }, 605 error: function(XMLHttpRequest, textStatus, errorThrown) { 606 // alert("Error:" + errorThrown + "(" + XMLHttpRequest.status + ")"); 607 }, 608 complete: function() { 609 sRefresh(); 610 } 611 }); 612} 613 614function getMoreItems(section,start,limit,type,subtype,id,modus) { 615 doLog("getMoreItems('" + section + "," + start + "," + limit + "," + type + "," + subtype + "," + id + "," + modus + "')"); 616 if (start < 0) { start = 0; } 617 $.ajax({ 618 url: "/" + base + "/section_" + section + "_get_items.php", 619 data: "section=" + section + "&start=" + start + "&limit=" + limit + "&type=" + type + "&subtype=" + subtype + "&id=" + id + "&lang=" + lang + "&device=" + device + "&country=" + country, 620 method: "GET", 621 dataType: "html", 622 cache: false, 623 beforeSend: function() { 624 $("#" + section + "_items .more").html('<div class="loading"><div class="icon icon-spin5 animate-spin"></div></div>'); 625 }, 626 success: function(data) { 627 $("#" + section + "_items ul.itemlist").attr("class","itemlist type-" + type + " clearfix"); // gregorian special 628 if (modus === "clear") { 629 $("#" + section + "_items ul.itemlist").empty().append(data); 630 } else { 631 if (section == "gallery") { 632 var $content = $(data); 633 $grid.append($content).masonry('appended', $content); 634 setTimeout(function(){ $grid.masonry(); }, 100); 635 } else { 636 $("#" + section + "_items ul.itemlist").append(data); 637 initSvg("#" + section); 638 } 639 } 640 }, 641 error: function(XMLHttpRequest, textStatus, errorThrown) { 642 // alert("Error:" + errorThrown + "(" + XMLHttpRequest.status + ")"); 643 }, 644 complete: function() { 645 sRefresh();
646 } 647 }); 648} 649 650function getItem(section,type,subtype,id,autoplay) { 651 doLog("getItem(" + section + "," + type + "," + subtype + "," + id + "," + autoplay + ")"); 652 saveHistory(section,type,subtype,id); 653 var ausdruck = /^(\d*)?$/; // \d = digit, \w = word, ? = egal wievielmal vorher (zb. egal wieviel buchstaben) 654 if (ausdruck.exec(id)) { 655 // alert("valid request ->\n id:" + RegExp.$1); 656 var id = RegExp.$1; 657 var feedback_id = "#" + section + "_container"; 658 $.ajax({ 659 url: "/" + base + "/section_" + section + "_get_item.php", 660 data: "type=" + type + "&subtype=" + subtype + "&id=" + id + "&autoplay=" + autoplay + "&lang=" + lang + "&device=" + device + "&country=" + country, 661 method: "GET", 662 dataType: "html", 663 cache: false, 664 beforeSend: function() { 665 $("#" + section + " ul.sub_nav li").removeClass("on"); 666 $("#" + section + "_holder").removeClass(function (index, className) { return (className.match (/(^|\s)type-\S+/g) || []).join(' '); }); // https://stackoverflow.com/questions/2644299/ 667 $("#" + section + "_holder").addClass("type-" + type); 668 $("#" + section + "_holder").slideDown(1000); 669 $("#" + section + "_title").empty().append("Loading..."); 670 $(feedback_id).html('<div class="loading"><div class="icon icon-spin5 animate-spin"></div></div>'); 671 }, 672 success: function(data) { 673 $("#" + section + " ul.sub_nav li.type" + type).addClass("on"); 674 $(feedback_id).empty().append(data); 675 initSvg(feedback_id); 676 }, 677 error: function(XMLHttpRequest, textStatus, errorThrown) { 678 // alert("Error:" + errorThrown + "(" + XMLHttpRequest.status + ")"); 679 }, 680 complete: function() { 681 sRefresh(); 682 } 683 }); 684 } else { 685 alert("invalid request"); 686 } 687} 688 689function setItem(section, id, txt) { 690 // doLog("setItem(" + section + "," + id + "," + txt + ")"); 691 if (section === "video") { 692 ytFirstStart = false; 693 $("#video_title").empty().append(urldecode(txt)); 694 } 695 $("." + section + "_items ul li").removeClass("on"); 696 $("." + section + "_items ul li.item" + id).addClass("on"); 697 sRefresh(); 698} 699 700// ------------------------ history ------------------------ // 701function getContent(itemLang,itemSection,itemName,itemType,itemSubtype,itemId,itemStart) { 702 // alert("getContent(" + itemLang + "," + itemSection + "," + itemName + "," + itemType + "," + itemSubtype + "," + itemId + "," + itemStart + ")"); 703 doStop(); 704 var data = {lang:itemLang,section:itemSection,type:itemType,subtype:itemSubtype,id:itemId,start:itemStart}; 705 var theTitle = itemLang + "|" + itemSection + "|" + itemType + "|" + itemSubtype + "|" + itemId + "|" + itemStart; 706 var theUrl = "/" + itemSection + "/" + itemName + "-" + itemType + "-" + itemSubtype + "-" + itemId + "-" + itemStart + ".html"; 707 // base + "/" + // + itemLang + "/" 708 // var theUrl = "/" + itemSection + "/" + itemName + "-" + itemType + "-" + itemSubtype + "-" + itemId + "-" + itemStart + ".html"; // special: itemLang always "en" 709 if (itemName == "" && itemType == "" && itemSubtype == "" && itemId == "" && itemStart == "") { 710 theUrl = "/" + itemSection + "/"; // base + "/" 711 } 712 updateContent(data); 713 if (window.history && window.history.pushState) { 714 history.pushState(data, theTitle, theUrl); // add an item to the history log // http://stackoverflow.com/questions/11932869/ 715 } 716 // tracking: var tmp_virtualpage = "/" + base + "/" + itemLang + "/" + itemSection + "/" + itemName + "-" + itemType + "-" + itemSubtype + "-" + itemId + "/"; var tmp_title = itemSection + ": " + itemName.replace(/-/g, " "); doTrackPage(tmp_virtualpage,tmp_title); 717} 718 719function setHistory(itemLang,itemSection,itemName,itemType,itemSubtype,itemId,itemStart) { 720 doLog("setHistory(" + itemLang + "," + itemSection + "," + itemName + "," + itemType + "," + itemSubtype + "," + itemId + "," + itemStart + ")"); 721 var data = {lang:itemLang,section:itemSection,type:itemType,subtype:itemSubtype,id:itemId,start:itemStart}; 722 var theTitle = itemLang + "|" + itemSection + "|" + itemType + "|" + itemSubtype + "|" + itemId + "|" + itemStart; 723 var theUrl = "/" + itemSection + "/" + itemName + "-" + itemType + "-" + itemSubtype + "-" + itemId + "-" + itemStart + ".html";
724 // base + "/" + // + itemLang + "/" 725 // var theUrl = "/" + itemSection + "/" + itemName + "-" + itemType + "-" + itemSubtype + "-" + itemId + "-" + itemStart + ".html"; // special: itemLang always "en" 726 if (itemName == "" && itemType == "" && itemSubtype == "" && itemId == "" && itemStart == "") { 727 theUrl = "/" + itemSection + "/"; // base + "/" + // + itemLang + "/" 728 } 729 if (window.history && window.history.pushState) { 730 history.pushState(data, theTitle, theUrl); // add an item to the history log // http://stackoverflow.com/questions/11932869/ 731 } 732} 733 734if (window.history && window.history.pushState) { 735 // revert to a previously saved state 736 window.addEventListener('popstate', function(event) { 737 // doLog('popstate fired!'); 738 updateContent(event.state); 739 }); 740} 741 742function updateContent(data) { 743 if (data == null) { return; } 744 doShow(data.section,data.type,data.subtype,data.id,1); 745} 746 747function doShow(section,type,subtype,id,autoplay) { 748 doLog("doShow(" + section + "," + type + "," + subtype + "," + id + "," + autoplay + ")"); 749 /* type = parseInt(type);subtype = parseInt(subtype);id = parseInt(id);autoplay = parseInt(autoplay); */ 750 var ausdruck = /^(\w*)?$/; // \d = digit, \w = word, ? = egal wievielmal vorher (zb. egal wieviel buchstaben) 751 var yOffset = -1 * $(".header_norm").height(); 752 if (ausdruck.exec(id) && id != "" && id != 0 && id != undefined && id != null) { 753 // prio 1: id 754 var tmp_id = RegExp.$1; 755 doLog("id detected: " + tmp_id); 756 var tmp_type = ""; 757 if (ausdruck.exec(type) && type != "" && type != 0 && type != undefined && type != null) { 758 var tmp_type = RegExp.$1; 759 doLog("type detected: " + tmp_type); 760 } 761 // if onepager: 762 if (section != "dates") { 763 if (hist[section]["type"] != tmp_type) { 764 getItems(section,tmp_type,subtype); // only reload items if type changes 765 } 766 getItem(section,tmp_type,subtype,tmp_id,autoplay); 767 } 768 section = section + "_scroll"; // scrollpoint 769 yOffset -= 20; 770 } else { 771 if (ausdruck.exec(subtype) && subtype != "" && subtype != 0 && subtype != undefined && subtype != null) { 772 // prio 2: subtype 773 var tmp_subtype = RegExp.$1; 774 doLog("subtype detected: " + tmp_subtype); 775 if (hist[section]["type"] != type) { 776 getItems(section,type,tmp_subtype); // only reload items if type changes 777 } 778 getItem(section,type,tmp_subtype,id,autoplay); 779 section = section + "_scroll"; // scrollpoint 780 yOffset -= 20; 781 } else { 782 // prio 3: type 783 if (ausdruck.exec(type) && type != "" && type != 0 && type != undefined && type != null) { 784 var tmp_type = RegExp.$1; 785 doLog("type detected: " + tmp_type); 786 $("#" + section + "_holder").slideUp("fast"); 787 $("#" + section + "_holder ." + section + "_container").empty(); 788 getItems(section,tmp_type,subtype); 789 } else { 790 // prio 4: no type, no subtype, no id -> clear section_holder 791 if (type == "" && subtype == "" && id == "") { 792 doLog("clear of section detected. vars: " + section + "," + type + "," + subtype + "," + id); 793 $("#" + section + "_holder").slideUp("slow", function() { 794 $("#" + section + "_holder ." + section + "_container").empty(); 795 $("#" + section + " .itemlist_header").slideUp("fast"); 796 getItems(section,"",""); 797 }); 798 } 799 } 800 } 801 } 802 yOffset = 0; 803 $.scrollTo("#" + section, 1250, { 804 axis: "y", 805 offset: yOffset, 806 onAfter: function () { 807 } 808 }); 809} 810 811// keep tracking of sections content 812var hist = new Array(); 813hist["video"] = new Object(); hist["video"]["type"] = ""; hist["video"]["subtype"] = ""; hist["video"]["id"] = ""; hist["video"]["start"] = ""; 814hist["photos"] = new Object(); hist["photos"]["type"] = ""; hist["photos"]["subtype"] = ""; hist["photos"]["id"] = ""; hist["photos"]["start"] = ""; 815hist["music"] = new Object(); hist["music"]["type"] = ""; hist["music"]["subtype"] = ""; hist["music"]["id"] = ""; hist["music"]["start"] = ""; 816hist["news"] = new Object(); hist["news"]["type"] = ""; hist["news"]["subtype"] = ""; hist["news"]["id"] = ""; hist["news"]["start"] = ""; 817hist["bio"] = new Object(); hist["bio"]["type"] = ""; hist["bio"]["subtype"] = ""; hist["bio"]["id"] = ""; hist["bio"]["start"] = ""; 818hist["products"] = new Object(); hist["products"]["type"] = ""; hist["products"]["subtype"] = ""; hist["products"]["id"] = ""; hist["products"]["start"] = ""; 819hist["tracks"] = new Object(); hist["tracks"]["type"] = ""; hist["tracks"]["subtype"] = ""; hist["tracks"]["id"] = ""; hist["tracks"]["start"] = ""; 820hist["specials"] = new Object(); hist["specials"]["type"] = ""; hist["specials"]["subtype"] = ""; hist["specials"]["id"] = ""; hist["specials"]["start"] = ""; 821hist["remixes"] = new Object(); hist["remixes"]["type"] = ""; hist["remixes"]["subtype"] = ""; hist["remixes"]["id"] = ""; hist["remixes"]["start"] = ""; 822hist["gallery"] = new Object(); hist["gallery"]["type"] = ""; hist["gallery"]["subtype"] = ""; hist["gallery"]["id"] = ""; hist["gallery"]["start"] = ""; 823 824function saveHistory(section,type,subtype,id) { 825 hist[section]["type"] = type; hist[section]["subtype"] = subtype; hist[section]["id"] = id; hist[section]["start"] = ""; 826} 827 828 829// ------------ teaser / carousels ------------ // 830function initCarousels() { 831 $('.carousel-holder-size-auto-autoplay .carousel').flickity({ cellAlign:'center', contain:true, cellSelector:'.carousel-cell', setGallerySize:true, autoPlay:3500 }); 832 $('.carousel-holder-size-auto .carousel').flickity({ cellAlign:'center', contain:true, cellSelector:'.carousel-cell', setGallerySize:true, adaptiveHeight:true });
833 $('.carousel-holder-size-css .carousel').flickity({ cellAlign:'center', contain:true, cellSelector:'.carousel-cell', setGallerySize:false }); // autoPlay: 5000, 834 $('.carousel-holder-size-detect-auto .carousel').flickity({ cellAlign:'left', contain:true, cellSelector:'.carousel-cell', setGallerySize:true, autoPlay:5000 }); 835 836 if (isiOS) { 837 /* fix iOS touchmove issue */ 838 // https://wpdevdesign.com/fixing-flickitys-issue-with-ios15-safari/ 839 (function() { 840 let touchingCarousel = false 841 let startXCoordinate 842 843 document.body.addEventListener('touchstart', e => { 844 if (e.target.closest('.flickity-slider')) { 845 touchingCarousel = true 846 } else { 847 touchingCarousel = false 848 return 849 } 850 startXCoordinate = e.touches[0].pageX 851 }) 852 853 document.body.addEventListener('touchmove', e => { 854 if ( 855 !touchingCarousel || 856 !e.cancelable || 857 Math.abs(e.touches[0].pageX - startXCoordinate) < 8 858 ) return 859 e.preventDefault() 860 e.stopPropagation() 861 }, { 862 passive: false 863 }) 864 }()) 865 /* prevent resize in flickity if still animating */ 866 var resize = Flickity.prototype.resize; 867 Flickity.prototype.resize = function() { 868 if (!this.isAnimating) { 869 resize.call(this); 870 } 871 }; 872 } 873 874 /* 875 $('.carousel').each( function() { 876 var elem = $(this); 877 elem.on('select.flickity', function() { 878 var flkty = elem.data('flickity'); 879 elem.find(".carousel-zoom").data("index", flkty.selectedIndex); 880 }); 881 }); 882 $('.carousel-zoom').click(function(e) { 883 var sources = urldecode($(this).data("sources")); 884 var index = $(this).data("index"); 885 eval("$.fancybox.open([" + sources + "], { }, " + index + ")"); 886 return false; 887 }); 888 $("#teaser-carousel").flickity('playPlayer'); 889 */ 890 891 $("#products-carousel").on('change.flickity', function(event, index) { 892 doLog('products-carousel > slide changed to ' + index); 893 $("#products .sub_nav li").removeClass("on"); 894 $("#products .sub_nav li.thumb" + (index + 1)).addClass("on"); 895 id = $("#products .item-" + (index + 1)).data("id"); 896 nr = $("#products .item-" + (index + 1)).data("nr"); 897 var name = $("#products .item-" + (index + 1)).data("name"); 898 setHistory(lang,'products',name,'','',id,''); 899 }); 900 901 $("#tracks-carousel").on('change.flickity', function(event, index) { 902 doLog('tracks-carousel > slide changed to ' + index); 903 $("#tracks .sub_nav li").removeClass("on"); 904 $("#tracks .sub_nav li.thumb" + (index + 1)).addClass("on"); 905 id = $("#tracks .item-" + (index + 1)).data("id"); 906 nr = $("#tracks .item-" + (index + 1)).data("nr"); 907 var name = $("#tracks .item-" + (index + 1)).data("name"); 908 setHistory(lang,'tracks',name,'','',id,''); 909 }); 910 911 $("#specials-carousel").on('change.flickity', function(event, index) { 912 doLog('specials-carousel > slide changed to ' + index); 913 $("#specials .sub_nav li").removeClass("on"); 914 $("#specials .sub_nav li.thumb" + (index + 1)).addClass("on"); 915 id = $("#specials .item-" + (index + 1)).data("id"); 916 nr = $("#specials .item-" + (index + 1)).data("nr"); 917 var name = $("#specials .item-" + (index + 1)).data("name"); 918 setHistory(lang,'specials',name,'','',id,''); 919 }); 920 921 $("#remixes-carousel").on('change.flickity', function(event, index) { 922 doLog('remixes-carousel > slide changed to ' + index); 923 $("#remixes .sub_nav li").removeClass("on"); 924 $("#remixes .sub_nav li.thumb" + (index + 1)).addClass("on"); 925 id = $("#remixes .item-" + (index + 1)).data("id"); 926 nr = $("#remixes .item-" + (index + 1)).data("nr"); 927 var name = $("#remixes .item-" + (index + 1)).data("name"); 928 setHistory(lang,'remixes',name,'','',id,''); 929 });
930 931} 932 933function setCarouselCell(section,id) { 934 doLog("setCarouselCell(" + section + "," + id + ")"); 935 nr = $("#" + section + id).data("nr"); 936 $("#" + section + "-carousel").flickity('selectCell', (nr - 1)); 937} 938 939function getCarouselVideo(section,feedback_id,id) { 940 // alert("getCarouselVideo(" + section + "," + feedback_id + ","+ id + ")"); 941 $.ajax({ 942 url: "/" + base + "/section_get_carousel_video.php", 943 data: "section=" + section + "&id=" + id + "&country=" + country + "&device=" + device, 944 method: "GET", 945 dataType: "html", 946 cache: false, 947 beforeSend: function() { 948 $(feedback_id).html('<div class="loading"><div class="icon icon-spin5 animate-spin"></div></div>'); 949 }, 950 success: function(data) { 951 $(feedback_id).empty().append(data); 952 }, 953 error: function(XMLHttpRequest, textStatus, errorThrown) { 954 // alert("Error:" + errorThrown + "(" + XMLHttpRequest.status + ")"); 955 }, 956 complete: function() { 957 sRefresh(); // alert("complete"); 958 } 959 }); 960} 961 962 963// ------------- collapse ------------- // 964 965function toggleCollapse(event,target) { 966 var collapse_item = $(event.target).parents().closest('.item-collapse'); 967 var collapse = collapse_item.find('.collapse'); 968 var toggle_link = collapse_item.find('.toggle a'); 969 if (collapse_item.hasClass('on')) { 970 // close target item 971 collapse_item.removeClass('on'); 972 collapse.slideUp("fast", function() { 973 toggle_link.attr("aria-expanded","false"); 974 doScroll(collapse_item); 975 }); 976 } else { 977 // close already opened item 978 var collapse_items = $(event.target).parents().closest('.items-collapse'); 979 var collapse_item_opened = collapse_items.find('.item-collapse.on'); 980 var collapse_opened = collapse_item_opened.find('.collapse'); 981 var toggle_link_opened = collapse_item_opened.find('.toggle a'); 982 collapse_item_opened.removeClass('on'); 983 collapse_opened.slideUp("fast", function() { 984 toggle_link_opened.attr("aria-expanded","false"); 985 }); 986 // open target item 987 collapse_item.addClass('on'); 988 collapse.slideDown("slow", function() { 989 toggle_link.attr("aria-expanded","true"); 990 doScroll(collapse_item); 991 }); 992 } 993} 994 995// ------------------------ products ------------------------ // 996 997function toggleAlbumplayer(section, id) { 998 if ($("." + section + " #albumplayer" + id).css("display") === "none") { 999 // close other players 1000 $("." + section + " .albumplayer").empty(); 1001 $("." + section + " .albumplayer").css("display","none"); 1002 $("." + section + " .item li.albumplayer_trigger .title_off").css("display","block"); 1003 $("." + section + " .item li.albumplayer_trigger .title_on").css("display","none"); 1004 $("." + section + " .item .imageborder_holder").css("opacity", 1); 1005 // load specific player 1006 var txt = $("#" + section + " #albumplayer" + id).data("embedcode"); 1007 $("#" + section + " #albumplayer" + id).html(urldecode(txt)); 1008 $("#" + section + " #albumplayer" + id).css("display","block"); 1009 $("#" + section + id + " li.albumplayer_trigger .title_off").css("display","none"); 1010 $("#" + section + id + " li.albumplayer_trigger .title_on").css("display","block"); 1011 $("#" + section + id + " .imageborder_holder").css("opacity", 0); 1012 doLog("hide: " + "#" + section + id + " .imageborder_holder"); 1013 doScroll("#" + section + " #albumplayer" + id); 1014 } else { 1015 $("#" + section + " #albumplayer" + id).empty(); 1016 $("#" + section + " #albumplayer" + id).css("display","none"); 1017 $("#" + section + id + " li.albumplayer_trigger .title_off").css("display","block"); 1018 $("#" + section + id + " li.albumplayer_trigger .title_on").css("display","none"); 1019 $("#" + section + id + " .imageborder_holder").css("opacity", 1); 1020 } 1021} 1022 1023// ------------------------ dates ------------------------ // 1024function toggleDates(id) { 1025 var new_h, row_display; 1026 // get modus (compact, large) usually triggered via @media screen and (max-width:640px) { } 1027 if ($("#dates_block" + id + " .dateslist li").first().css("display") === "table") { 1028 row_display = "table"; 1029 } else { 1030 row_display = "block"; 1031 } 1032 if ($("#dates_block" + id + " .dateslist li.row-more").css("display") === "none") { 1033 // show more rows 1034 new_h = $("#dates_block" + id + " .dateslist").innerHeight(); 1035 $("#dates_block" + id + " .dateslist_holder").css("height", new_h + "px"); 1036 $("#dates_block" + id + " .dateslist li.row-more").css("display",row_display); 1037 new_h = $("#dates_block" + id + " .dateslist").innerHeight(); 1038 $("#dates_block" + id + " .dateslist_holder").animate({ height: new_h }, "slow", function() { 1039 $("#dates_block" + id + " .dateslist_holder").css("height", "auto"); 1040 $("#dates_block" + id + " .more_dates a.icon-down-open").css("display","none"); 1041 $("#dates_block" + id + " .more_dates a.icon-up-open").css("display","inline-block"); 1042 sRefresh();
1043 }); 1044 } else { 1045 // show less rows 1046 $("#dates_block" + id + " .dateslist li.row-more").css("display","none"); 1047 new_h = $("#dates_block" + id + " .dateslist").innerHeight(); 1048 $("#dates_block" + id + " .dateslist li.row-more").css("display",row_display); 1049 $("#dates_block" + id + " .dateslist_holder").animate({ height: new_h }, "slow", function() { 1050 $("#dates_block" + id + " .dateslist li.row-more").css("display","none"); 1051 $("#dates_block" + id + " .dateslist_holder").css("height", "auto"); 1052 $("#dates_block" + id + " .more_dates a.icon-down-open").css("display","inline-block"); 1053 $("#dates_block" + id + " .more_dates a.icon-up-open").css("display","none"); 1054 $.scrollTo("#dates_block" + id + " .more_dates", 1000, { 1055 axis: "y", 1056 offset: -220, 1057 onAfter: function () { 1058 } 1059 }); 1060 sRefresh(); 1061 }); 1062 } 1063} 1064 1065function toggleCalendar(id) { 1066 if ($(".calendar_links" + id).css("display") === "none") { 1067 $(".calendar_toggle" + id).text("-"); 1068 $(".calendar_links" + id).fadeIn("fast", function() { }); 1069 setTimeout(function(){ 1070 $(document).click(function(e) { 1071 if (!$(e.target).closest(".calendar_links" + id).length) { 1072 // alert('click outside!'); 1073 $(".calendar_toggle" + id).text("+"); 1074 $(".calendar_links" + id).fadeOut("fast", function() { }); 1075 $(document).unbind("click"); 1076 } 1077 }); 1078 }, 200); 1079 } else { 1080 $(".calendar_toggle" + id).text("+"); 1081 $(".calendar_links" + id).fadeOut("fast", function() { }); 1082 $(document).unbind("click"); 1083 } 1084} 1085 1086function getBio(nr,bg) { 1087 $("#bio ul.sub_nav li").removeClass("on"); 1088 $("#bio ul.sub_nav li").addClass("off"); 1089 // var bg_empty = "url(/" + base + "/images/layout/pix.gif)"; 1090 // if (bg == "") { bg = bg_empty; } 1091 $("#bio .bio_container").slideUp("slow", function() { 1092 // $("#bio").css("background-image",bg_empty); 1093 $("#bio ul.sub_nav li.type" + nr).addClass("on"); 1094 $("#bio .bio_container .item").css("display","none"); 1095 $("#bio .bio_container .item" + nr).css("display","block"); 1096 setTimeout(function(){ 1097 $("#bio .bio_container").slideDown("slow", function() { 1098 // $("#bio").css("background-image",bg); 1099 sRefresh(); 1100 }); 1101 }, 500); 1102 }); 1103} 1104 1105function getNewsletter(nr) { 1106 $("#newsletter ul.sub_nav li").removeClass("on"); 1107 $("#newsletter ul.sub_nav li").addClass("off"); 1108 $("#newsletter .newsletter_container").slideUp("fast", function() { 1109 $("#newsletter ul.sub_nav li.type" + nr).addClass("on"); 1110 $("#newsletter .newsletter_container .item").css("display","none"); 1111 $("#newsletter .newsletter_container .item" + nr).css("display","block"); 1112 setTimeout(function(){ 1113 $("#newsletter .newsletter_container").slideDown("slow", function() { 1114 sRefresh(); 1115 }); 1116 }, 100); 1117 }); 1118} 1119 1120// ------------------------ audioplayer ------------------------ // 1121 1122var audioplayerOn = false; 1123 1124function initAudioplayer() { 1125 doLog("initAudioplayer()"); 1126 var src = $('#audioplayer iframe').data("src"); 1127 $('#audioplayer iframe').attr("src", src); 1128 setTimeout(function() { 1129 $('#audioplayer').addClass("on"); 1130 audioplayerOn = true; 1131 /* 1132 var waypoint = new Waypoint({ 1133 element: $('#products h2'), 1134 handler: function(direction) { 1135 // doLog('Scrolled to #products h2, Direction: ' + direction); 1136 if (audioplayerOn == false) { 1137 $('#audioplayer').addClass("on"); 1138 audioplayerOn = true; 1139 } 1140 }, 1141 offset: 200 1142 }); 1143 */ 1144 }, 2000); 1145} 1146 1147function toggleAudioplayer() { 1148 if ($('#audioplayer').hasClass("hidden")) { 1149 $('#audioplayer').removeClass("hidden"); 1150 } else { 1151 $('#audioplayer').addClass("hidden"); 1152 } 1153} 1154 1155 1156// ------------------------ audio ------------------------ // 1157 1158var playlist; 1159var playlist_pos = -1; 1160var play_modus = "manual"; 1161var oldTrack = null; 1162var audioFirstStart = false; 1163 1164function initMusicplayer() { 1165 $("#musicplayer").attr("oncanplay", "canPlay();"); 1166 $("#musicplayer").attr("onended", "playNext();"); 1167} 1168 1169function playTrack(id) { 1170 // alert("playTrack(" + id + "), oldTrack: " + oldTrack); 1171 var audio = document.getElementById("musicplayer"); 1172 id = parseInt(id); 1173 playlist_pos = $.inArray(id, playlist); 1174 doLog("playTrack(" + id + "), my playlist_pos:" + playlist_pos); 1175 if (oldTrack == id) { 1176 if (audio.paused) { 1177 doPlay(); 1178 } else { 1179 doPause(); 1180 } 1181 } else { 1182 audio.addEventListener("timeupdate", progressBar, true); 1183 var trackname = $("#track"+ id).data("trackname"); 1184 $(".track").removeClass("track_on"); 1185 $(".track .playback_icon").html("<div class='icon icon-play'></div>"); 1186 $(".track .track_progress").css("width","0%"); 1187 $("#track"+ id).addClass("track_on"); 1188 $("#track"+ id + " .playback_icon").html("<div class='icon icon-spin5 animate-spin'></div>"); 1189 oldTrack = id; 1190 audioFirstStart = false; 1191 audio.src = $("#track"+ id).data("src"); 1192 audio.load(); 1193 } 1194} 1195 1196function canPlay() { 1197 if (play_modus == "auto" || play_modus == "manual") { 1198 doPlay(); 1199 } else { 1200 doPause(); 1201 } 1202} 1203 1204function doPlay() { 1205 var audio = document.getElementById("musicplayer"); 1206 audio.play(); 1207 $("#track"+ oldTrack + " .playback_icon").html("<div class='icon icon-pause'></div>"); 1208 if (audioFirstStart == false) { 1209 audioFirstStart = true; 1210 doTrack('Audio','AudioStart',$("#track"+ oldTrack).data("trackname"));
1211 } else { 1212 doTrack('Audio','AudioResume',$("#track"+ oldTrack).data("trackname")); 1213 } 1214} 1215 1216function doPause() { 1217 var audio = document.getElementById("musicplayer"); 1218 if (!audio.ended) { 1219 doTrack('Audio','AudioPause',$("#track"+ oldTrack).data("trackname")); 1220 } 1221 if (audio.ended) { 1222 $("#track"+ oldTrack + " .track_progress").css("width", "0%"); 1223 doTrack('Audio','AudioFinish',$("#track"+ oldTrack).data("trackname")); 1224 } 1225 audio.pause(); 1226 $("#track"+ oldTrack + " .playback_icon").html("<div class='icon icon-play'></div>"); 1227} 1228 1229function doStop() { 1230 doLog("doStop()"); 1231 var audio = document.getElementById("musicplayer"); 1232 if (audio) { 1233 audio.pause(); 1234 if (oldTrack) { 1235 doTrack('Audio','AudioStop',$("#track"+ oldTrack).data("trackname")); 1236 } 1237 $("#track"+ oldTrack + " .track_progress").css("width", "0%"); 1238 $("#track"+ oldTrack + " .playback_icon").html("<div class='icon icon-play'></div>"); 1239 oldTrack = null; 1240 playlist_pos = -1; 1241 } 1242} 1243 1244function playPause() { 1245 var audio = document.getElementById("musicplayer"); 1246 if (audio.paused) { 1247 doPlay(); 1248 } else { 1249 doPause(); 1250 } 1251} 1252 1253function playNext() { 1254 if (typeof(playlist) != "undefined") { 1255 doLog("playNext(), playlist.length:" + playlist.length + ", playlist_pos:" + playlist_pos) 1256 if (play_modus == "auto") { 1257 playlist_pos++; 1258 if (playlist_pos < playlist.length) { 1259 var next_id = playlist[playlist_pos]; 1260 doLog("next_id: " + next_id + ", playlist_pos:" + playlist_pos); 1261 doTrack('Audio','AudioGotoNextTrack',$("#track"+ next_id).data("trackname")); 1262 playTrack(next_id); 1263 } else { 1264 playlist_pos = -1; 1265 doLog("playlist end"); 1266 doPause(); 1267 } 1268 } else { 1269 doPause(); 1270 } 1271 } 1272} 1273 1274function progressBar() { 1275 var oAudio = document.getElementById("musicplayer"); 1276 var elapsedTime = Math.round(oAudio.currentTime); // get current time in seconds 1277 var w = (elapsedTime / oAudio.duration) * 100; // update the progress bar 1278 if (w >= 0 && w <= 100) { 1279 // doLog("audio-progress: " + w); 1280 $("#track"+ oldTrack + " .track_progress").css("width", w + "%"); 1281 } 1282} 1283 1284 1285// ------------ bg-video ------------ // 1286 1287function load_bg_video(src,id,loop) { 1288 // doLog("load_bg_video(" + src + "," + id + "," + loop + ")"); 1289 var loop_str = ""; 1290 var onended_str = ""; 1291 if (loop == "Y") { 1292 loop_str = "loop"; 1293 } else { 1294 onended_str = "hide_bg_video('bg_video" + id + "');"; 1295 } 1296 var txt = ""; 1297 txt += "<video id=\"bg_video" + id + "\" class=\"bg_video bg_video_off\" preload=\"auto\" muted playsinline volume=\"0\" autoplay " + loop_str + " onCanPlay=\"show_bg_video('bg_video" + id + "');\" onended=\"" + onended_str + "\">"; 1298 txt += "<source src=\"" + src + "\" type=\"video/mp4\">"; 1299 txt += "</video>"; 1300 txt += "<div class=\"fg_video fg_video_on\"></div>"; 1301 $("#bg_video_holder" + id).html(txt); 1302} 1303 1304function show_bg_video(id) { 1305 if ($("#" + id).hasClass("bg_video_off")) { 1306 if (id == "bg_video-bg-0") { 1307 var vid = document.getElementById(id); 1308 vid.playbackRate = 1; 1309 } 1310 // doLog("show_bg_video(" + id + ")"); 1311 $("#" + id).removeClass("bg_video_off"); 1312 $("#" + id).addClass("bg_video_on"); 1313 $("#" + id).attr("onCanPlay",""); 1314 } 1315} 1316 1317function hide_bg_video(id) { 1318 $("#" + id).removeClass("bg_video_on"); 1319 $("#" + id).addClass("bg_video_off"); 1320} 1321 1322 1323function volume_bg_video(vol) { 1324 var vid = $(".slides .bg_video"); 1325 vid.animate({volume: vol}, 1000, 'swing', function() { 1326 // $(".slides .bg_video").each(this.pause()); // pause video 1327 }); 1328} 1329 1330function toggle_bg_video() { 1331 /* 1332 var video = document.getElementById('bg_video_main'); 1333 if (bgVideo) { 1334 $(".bg_video_ctrl").removeClass("bg_video_ctrl_on"); 1335 if (video) { video.pause(); } 1336 $(".bg_video_holder").hide(); 1337 bgVideo = false; 1338 } else { 1339 $(".bg_video_ctrl").addClass("bg_video_ctrl_on"); 1340 if (video) { video.play(); } 1341 $(".bg_video_holder").show(); 1342 bgVideo = true; 1343 } 1344 */ 1345} 1346 1347 1348// ------------ forms + newsletter ------------ // 1349var newsletterKeyPress = false; 1350function initNewsletter() { 1351 /* 1352 $("#nl_sender_form input").keypress(function(event) { 1353 if (newsletterKeyPress == false) { 1354 newsletterKeyPress = true; 1355 window.dataLayer = window.dataLayer || []; 1356 window.dataLayer.push({ 1357 event: "Generic Event", 1358 event_name: "newsletter_soi_start", 1359 newsletter_soi_start: { 1360 newsletter_selection: nl_addressbooks, 1361 event_category: "Customer Relations", 1362 event_action: "Newsletter", 1363 event_label: "Single Opt-In - Start" 1364 } 1365 }); 1366 } 1367 });
1368 */ 1369 // rewrite browser-history for urls like /newsletter/confirm/ 1370 var res = /newsletter\/([a-zA-Z]+)/.exec(window.location.href); 1371 if (Array.isArray(res)) { 1372 // doLog("newsletter_path found: " + res[1]); 1373 if (window.history && window.history.replaceState) { 1374 history.replaceState("", window.location.host, window.location.protocol + "//" + window.location.host); 1375 } 1376 } 1377} 1378 1379function validateEmail(email) { 1380 var exp = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 1381 return exp.test(email); 1382} 1383 1384var warnTimeout; 1385 1386function doWarn(id,txt) { 1387 // alert("doWarn(" + id + "," + txt + ")"); 1388 $("#"+id).addClass("warning"); 1389 $("label[for='"+ id +"']").html("<span class='icon icon-attention'></span> " + txt); 1390 $("label[for='"+ id +"']").addClass("warning"); 1391 /* 1392 // make it shake! 1393 $(elem).addClass("animated_manual_animation shake").one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend", function(){ 1394 $(elem).removeClass("animated_manual_animation"); 1395 $(elem).removeClass("shake"); 1396 }); 1397 */ 1398 $("#"+id).disabled = false; 1399 $("#"+id).trigger("focus"); 1400 1401 clearTimeout(warnTimeout); 1402 warnTimeout = setTimeout(function(){ 1403 resetFormWarnings(); 1404 }, 5000); 1405} 1406 1407function resetFormWarnings() { 1408 $("form .text").removeClass("warning"); 1409 $("form label").removeClass("warning"); 1410 $("form label").each(function(index) { 1411 var myText = $(this).attr('data-text'); 1412 if (myText !== undefined) { 1413 $(this).html(urldecode(myText)); 1414 } 1415 }); 1416} 1417 1418function checkInput(id, title, allow_empty) { 1419 title = urldecode(title); 1420 input = $("#" + id); 1421 if (allow_empty === undefined) { allow_empty = false; } 1422 if (allow_empty == false) { 1423 if (input.val() === "" || input.val().length < 2) { 1424 doWarn(id, title + " is missing."); 1425 return false; 1426 } 1427 } 1428 var zeichen ="<>"; 1429 var eingabe = input.val(); 1430 var laenge = eingabe.length; 1431 for(i=0; i<laenge; i++) { 1432 badchar = eingabe.charAt(i); 1433 if (zeichen.indexOf(badchar)>-1) { 1434 doWarn(id, title + " contains invalid chars."); 1435 return false; 1436 } 1437 } 1438 return true; 1439} 1440 1441function checkText(id, title, allow_empty) { 1442 input = $("#" + id); 1443 if (allow_empty === undefined) { allow_empty = false; } 1444 if (allow_empty == false) { 1445 if (input.val() === "" || input.val().length < 24) { 1446 doWarn(id, title + " is missing."); 1447 return false; 1448 } 1449 } 1450 return true; 1451} 1452 1453function checkCharCount(el) { 1454 var str = $("#" + el).val(); 1455 if ($("#" + el).val().length >= maxChars) { 1456 doWarn(el, "Too many chars."); 1457 } 1458} 1459 1460function checkUrl(id, title, allow_empty) { 1461 input = $("#" + id); 1462 if (allow_empty === undefined) { allow_empty = false; } 1463 if (allow_empty == false) { 1464 if (input.val() === "" || input.val().length < 2) { 1465 doWarn(id, title + " is missing."); 1466 return false; 1467 } 1468 } 1469 var zeichen =";<>"; 1470 var eingabe = input.val(); 1471 var laenge = eingabe.length; 1472 for(i=0; i<laenge; i++) { 1473 badchar = eingabe.charAt(i); 1474 if (zeichen.indexOf(badchar)>-1) { 1475 doWarn(id, title + " contains invalid chars."); 1476 return false; 1477 } 1478 } 1479 if (eingabe.indexOf("http") !== 0) { 1480 doWarn(id, title + " must start with http or https."); 1481 return false; 1482 } 1483 return true; 1484} 1485 1486function doFeedback(id,txt) { 1487 $("#"+ id + " .content").html(txt); 1488 $("#" + id).slideDown("slow"); 1489 setTimeout(function() { $("#" + id + " a.close").fadeIn("slow"); }, 3000); 1490} 1491 1492function closeFeedback(id) { 1493 $("#" + id + " a.close").fadeOut("fast"); 1494 $("#" + id).fadeOut("slow"); 1495} 1496 1497function sendnewsletter() { 1498 doLog("sendnewsletter()"); 1499 1500 // check email 1501 if (document.getElementById("nl_email_id")) { 1502 if (!checkInput("nl_email_id", "E-Mail")) { return false; } 1503 if (!validateEmail($("#nl_email_id").val())) { 1504 doWarn("nl_email_id", "The E-Mail is invalid."); 1505 return false; 1506 } 1507 } 1508 1509 // check firstname 1510 if (document.getElementById("nl_firstname_id")) { 1511 if (!checkInput("nl_firstname_id", "First Name")) { return false; } 1512 } 1513 1514 // check nl_country 1515 if (document.getElementById("nl_country_id")) { 1516 if (!checkInput("nl_country_id", "Country")) { return false; } 1517 } 1518 1519 // send data 1520 var post_data = $("#nl_sender_form").serialize(); 1521 1522 // add pers_lytics_uid 1523 /* 1524 if (window.hasOwnProperty('lio')) { 1525 post_data += "&pers_lytics_uid=" + window.lio._uid; 1526 } else { 1527 post_data += "&pers_lytics_uid="; 1528 } 1529 // doLog("post_data:"); doLog(post_data); 1530 */ 1531 var feedback_id = "nl_feedback_id"; 1532 1533 $.ajax({
1534 url: "/" + base + "/section_newsletter_sender.php", 1535 data: post_data, 1536 method: "POST", 1537 dataType: "html", 1538 cache: false, 1539 beforeSend: function() { 1540 $("#nl_btn_send_holder").slideUp("fast"); 1541 doFeedback(feedback_id,"<span class='icon icon-spin5 animate-spin'></span> One moment please..."); 1542 }, 1543 success: function(data) { 1544 var txt; 1545 if (data.search(/error/i) == -1 && data.search(/fehler/i) == -1 && data.search(/erreur/i) == -1) { 1546 // feedback contains no errors: 1547 txt = "<h5><span class=\"icon icon-ok\"></span></h5>"; 1548 txt += data; 1549 // txt += "Please check your inbox right now and confirm your subscription.<br>"; 1550 // txt += "Advice: The confirmation-email might be found in your advertising- or spam-folder.<br>"; 1551 // when double-opt-in: "Bitte überprüfe gleich deinen Email-Briefkasten und folge den Anweisungen in der Bestätigungsemail die Du gleich erhalten wirst.<br><br>Tip: Ãberprüfe auch den Spam-Ordner."; 1552 // form hochklappen 1553 $("#nl_form_holder").slideUp("slow"); 1554 $("#newsletter .required").slideUp("fast"); 1555 $("#nl_feedback_id a.close").remove(); 1556 // doTrack("CRM", "NewsletterSubscribe", artist); 1557 } else { 1558 txt = "<h5><span class=\"icon-attention\"></span><h5>"; 1559 txt += data; 1560 document.getElementById("nl_btn_send").disabled = false; 1561 document.getElementById("nl_btn_send").value = $("#nl_btn_send").data("text"); 1562 $("#nl_btn_send_holder").slideDown("fast"); 1563 } 1564 $("#" + feedback_id).empty().append(txt); 1565 }, 1566 error: function(XMLHttpRequest, textStatus, errorThrown) { 1567 alert("Error: " + errorThrown + "(" + XMLHttpRequest.status + ")"); 1568 $("#nl_btn_send_holder").slideDown("fast"); 1569 }, 1570 complete: function() { 1571 // 1572 } 1573 }); 1574 1575 return false; 1576} 1577 1578 1579// ------------ standard functions ------------ // 1580 1581var resized; 1582 1583function initResize() { 1584 doLog("initResize"); 1585 $(window).on('resize orientationChanged', function() { 1586 $("#body_id").addClass("resize"); 1587 clearTimeout(resized); 1588 resized = setTimeout(onResize, 150); 1589 }); 1590} 1591 1592function onYTPlayerRendered() { } 1593 1594var copyActive = false; 1595 1596function initCopyButtons() { 1597 // doLog("initCopyButtons()"); // for clipboard.js v2.0.6 1598 var clipboard = new ClipboardJS(".copy-button"); 1599 clipboard.on('success', function(e) { 1600 if (copyActive == false) { 1601 // console.info('Action:', e.action); console.info('Text:', e.text); console.info('Trigger:', e.trigger); 1602 doTrack('Social', "LinkCopy", urldecode(e.text)); 1603 e.clearSelection(); 1604 if (lang == "de") { 1605 doMsg("<span class='icon icon-ok'></span> Link kopiert"); 1606 } else { 1607 doMsg("<span class='icon icon-ok'></span> Link copied"); 1608 } 1609 copyActive = true; 1610 setTimeout(function() { closeMsg(); copyActive = false; }, 3000); 1611 } 1612 }); 1613 var emailclipboard = new ClipboardJS('a.copy-email', { 1614 text: function(trigger) { 1615 return trigger.getAttribute('data-usr') + "@" + trigger.getAttribute('data-dom') + "." + trigger.getAttribute('data-tld'); 1616 } 1617 }); 1618 emailclipboard.on('success', function(e) { 1619 if (copyActive == false) { 1620 // console.info('emailclipboard Action:', e.action); console.info('emailclipboard Text:', e.text); console.info('Trigger:', e.trigger); 1621 doTrack('Social', "EmailCopy", urldecode(e.text)); 1622 e.clearSelection(); 1623 if (lang == "de") { 1624 doMsg("<span class='icon icon-ok'></span> E-Mail kopiert"); 1625 } else { 1626 doMsg("<span class='icon icon-ok'></span> E-Mail copied"); 1627 } 1628 copyActive = true; 1629 setTimeout(function() { closeMsg(); copyActive = false; }, 3000); 1630 } 1631 }); 1632} 1633 1634function doMsg(txt) { 1635 // if ($("#msg .content").html() != "") { doAnim("#msg", "flash"); } 1636 $("#msg .content").html(urldecode(txt)); 1637 $("#msg").slideDown('fast', function() {}); 1638} 1639 1640function closeMsg() { 1641 if (window.jQuery) { 1642 $("#msg").slideUp("fast", function() { $("#msg .content").empty(); }); 1643 } else { 1644 document.getElementById('msg').children[0].innerHTML='';document.getElementById('msg').style.display='none'; 1645 } 1646} 1647 1648function setShare(id, url, title) { 1649 var txt = ''; 1650 txt += '<div class="share_tools" data-url="' + url + '" data-title="' + title + '">'; 1651 txt += '<a class="button share_facebook" href="#" onclick="doShare(event,\'facebook\');return false;" title="Share on facebook"><span class="icon icon-facebook"></span></a>'; 1652 // txt += '<a class="button share_facebook_messenger" href="#" onclick="doShare(event,\'facebook_messenger\');" title="Share with Facebook Messenger"><span class="icon icon-facebook-messenger"></span></a>'; 1653 txt += '<a class="button share_whatsapp" href="#" onclick="doShare(event,\'whatsapp\');" title="Share with whatsapp"><span class="icon icon-whatsapp"></span></a>'; 1654 txt += '<a class="button share_twitter" href="#" onclick="doShare(event,\'twitter\');return false;" title="Tweet"><span class="icon icon-twitter"></span></a>'; 1655 txt += '<a class="button share_email" href="#" onclick="doShare(event,\'email\');" title="Share via email"><span class="icon icon icon-mail"></span></a>'; 1656 txt += '<a class="button copy-button" data-clipboard-action="copy" data-clipboard-text="' + urldecode(url) + '" href="#" onclick="return false;" title="Copy link"><span class="icon icon-link"></span></a>'; 1657 txt += '</div>'; 1658 $('#' + id).empty().append(txt); 1659 initCopyButtons(); 1660} 1661 1662function toggleShare(event) { 1663 $(event.target).closest(".share_tools").toggleClass("on"); 1664} 1665 1666function doShare(event, network) { 1667 // doMsg("doShare(" + network + ")");console.log("event:");console.log(event); 1668 var share_el,share_container,url,title,share_window; 1669 // get data-url & data-title from parent div.share_tools 1670 if (event.target.parentNode.className == "share_tools") { 1671 // old safari 1672 share_el = event.target; 1673 share_container = event.target.parentNode; 1674 } else { 1675 share_el = event.target.parentNode; 1676 share_container = event.target.parentNode.parentNode; 1677 } 1678 // console.log("share_container:");console.log(share_container); 1679 url = share_container.dataset.url; 1680 title = share_container.dataset.title; 1681 // console.log("data:");console.log(url);console.log(urldecode(title));doMsg("url: " + urldecode(url) + "<br>title: " + urldecode(title)); 1682 switch(network) { 1683 case "facebook": 1684 doTrack('Social', "Facebook", urldecode(url)); 1685 share_window = window.open("https://www.facebook.com/sharer/sharer.php?u=" + url,"share_window","width=600,height=450,status=no,location=no,scrollbars=no,resizable=yes"); 1686 share_window.focus(); 1687 break; 1688 case "twitter": 1689 doTrack('Social', "Twitter", urldecode(url)); 1690 title = urldecode(title); 1691 title = encodeURIComponent(title); 1692 $(window).bind("message", function(event) { event = event.originalEvent; if (event.source == share_window && event.data != "__ready__") { doLog("tweet successful"); } }); 1693 share_window = window.open("https://twitter.com/intent/tweet?url=" + url + "&text=" + title + "&hashtags=","share_window","width=600,height=500,status=no,location=no,scrollbars=no,resizable=yes"); 1694 share_window.focus(); 1695 break; 1696 case "email": 1697 doTrack('Social', "Email", urldecode(url)); 1698 title = urldecode(title); 1699 title = encodeURIComponent(title); 1700 share_el.href = "mailto:?subject=" + title + "&body=" + url; 1701 break; 1702 case "whatsapp": 1703 doTrack('Social', "Whatsapp", urldecode(url)); 1704 share_el.href = "whatsapp://send?text=" + title + encodeURIComponent(": ") + url; 1705 break; 1706 case "facebook_messenger": 1707 doTrack('Social', "FacebookMessenger", urldecode(url)); 1708 share_el.href = "fb-messenger://share?link=" + url; 1709 default: 1710 break; 1711 } 1712} 1713 1714function toggleMenu() { 1715 if ($("#body_id").hasClass("menu_on")) { 1716 $("html").removeClass("menu_on"); 1717 $("#body_id").removeClass("menu_on"); 1718 } else { 1719 $("html").addClass("menu_on"); 1720 $("#body_id").addClass("menu_on"); 1721 } 1722} 1723 1724function doScroll(el) { 1725 doLog("doScroll(" + el + ")"); 1726 yOffset = 0; // -1 * $(".header_norm").outerHeight(); 1727 // yOffset -= 100; 1728 $.scrollTo(el, 800, { 1729 axis: "y", 1730 offset: yOffset, 1731 onAfter: function () { } 1732 }); 1733} 1734 1735function initNav() { 1736 $('.header_norm .nav_list a.page_link').on("click", function(){ 1737 doShow($(this).data('href'),"",0); 1738 return false; 1739 }); 1740 $('.nav_overlay .nav_list a.page_link').on("click", function(){ 1741 doShow($(this).data('href'),"",0); 1742 toggleMenu(); 1743 return false; 1744 }); 1745 var sections = $('section'); 1746 var waypoints = sections.waypoint({ 1747 handler: function(direction) {
1748 var active_id = this.element.id; 1749 // doLog(active_id + ' hit 40% from top of window'); 1750 if (direction === 'up'){ active_id = $("#" + active_id).prev().attr('id'); } 1751 // if (direction === 'down'){ active_id = $("#" + active_id).next().attr('id'); } 1752 $('.nav_list ul li.nav_page').removeClass('on'); 1753 $('.nav_list ul li.nav_' + active_id).addClass('on'); 1754 // setHash(sectionId); // 2do: if not scrolling because of doShow(), leads to blinks while auto-scrolling (ie, ff) 1755 }, 1756 offset: '35%' 1757 }); 1758 var waypoint = new Waypoint({ 1759 element: $('#header_bottom'), 1760 handler: function(direction) { 1761 // console.log('Scrolled to #header_bottom, Direction: ' + direction); 1762 if (direction === 'up'){ 1763 $("#body_id").removeClass("compact"); 1764 } 1765 if (direction === 'down'){ 1766 $("#body_id").addClass("compact"); 1767 } 1768 }, 1769 offset: -450 1770 }); 1771} 1772 1773function initHeader() { 1774 // https://stackoverflow.com/questions/31223341/#answer-31223774 1775 var body = $("#body_id"); 1776 var lastScrollTop = 0; 1777 window.addEventListener("scroll", function() { 1778 var st = window.pageYOffset || document.documentElement.scrollTop; // Credits: "https://github.com/qeremy/so/blob/master/so.dom.js#L426" 1779 if (st > lastScrollTop && st > 60){ 1780 body.addClass("scrollDown"); 1781 } else { 1782 body.removeClass("scrollDown"); 1783 } 1784 lastScrollTop = st <= 0 ? 0 : st; // For Mobile or negative scrolling 1785 }, false); 1786} 1787 1788function initFancybox() { 1789 $.fancybox.defaults.buttons = ['close']; // 'fullScreen','slideShow', 1790 $.fancybox.defaults.hash = false; 1791 $.fancybox.defaults.loop = true; 1792 $.fancybox.defaults.backFocus = false; 1793 // $.fancybox.defaults.hideScrollbar = true; 1794 // $.fancybox.defaults.margin = [0,0]; 1795} 1796 1797function doTruncate(identifier, limit) { 1798 switch (lang) { 1799 case "de": 1800 var showText = "Mehr anzeigen"; 1801 var hideText = "Weniger anzeigen"; 1802 break; 1803 case "fr": 1804 var showText = "Voir Plus"; 1805 var hideText = "Voir Moins"; 1806 break; 1807 default: 1808 var showText = "Show more"; 1809 var hideText = "Show less"; 1810 break; 1811 } 1812 if (isNaN(limit)) { limit = 7; } 1813 $(identifier).truncate({ 1814 "maxLines": limit, 1815 "truncateString": " …", 1816 "showText": "<div class='more clearfix'><span class='border title'>" + showText + "</span> <span class='icon icon-down-open'></span></div>", 1817 "hideText": "<div class='more clearfix'><span class='border title'>" + hideText + "</span> <span class='icon icon-up-open'></span></div>", 1818 "animate": true, 1819 "animateOptions": { 'complete': function() { 1820 $(identifier).css("height","auto"); 1821 sRefresh(); 1822 if ($(this).data("status") === "open") { 1823 $(this).data("status","closed"); 1824 var yOffset = -1 * $(".header_compact").height(); 1825 yOffset -= 10; 1826 var myId = $(this).attr("id"); 1827 if (!myId) { 1828 myId = "trunc_" + myRandom(100000, 999999); 1829 $(this).attr("id",myId); 1830 } 1831 var target = $("#" + myId); 1832 $.scrollTo(target, 1000, { 1833 axis: "y", 1834 offset: yOffset, 1835 duration: 3000, 1836 onAfter: function () { 1837 try { $("#products-carousel").flickity('resize'); } catch (e) { } 1838 try { $("#tracks-carousel").flickity('resize'); } catch (e) { } 1839 try { $("#specials-carousel").flickity('resize'); } catch (e) { } 1840 try { $("#remixes-carousel").flickity('resize'); } catch (e) { } 1841 } 1842 }); 1843 } else { 1844 $(this).data("status","open"); 1845 try { $("#products-carousel").flickity('resize'); } catch (e) { } 1846 try { $("#tracks-carousel").flickity('resize'); } catch (e) { } 1847 try { $("#specials-carousel").flickity('resize'); } catch (e) { } 1848 try { $("#remixes-carousel").flickity('resize'); } catch (e) { } 1849 } 1850 } } 1851 }); 1852} 1853 1854function urldecode(str) { 1855 return decodeURIComponent((str+'').replace(/\+/g, ' ')); 1856} 1857 1858function doLog(txt) { 1859 node = document.getElementById("log"); 1860 if (node) { node.innerHTML = txt + "<br>" + node.innerHTML; } 1861 if (console) { console.log(txt); } 1862} 1863 1864function doTrack(category, action, label) { 1865 if (category != "" && action != "") { 1866 // umg-tracking 1867 switch(category) { 1868 case "CRM": 1869 case "Video": 1870 dataLayer.push({'event':'GAEvent', 'attributes': {'eventCategory': '' + category + '', 'eventAction': '' + action +'', 'eventLabel': '' + label + '' }}); 1871 break; 1872 case "Social": 1873 dataLayer.push({'event': 'Generic Event', 'event_name': 'share_start', 'share_start' : { 'social_network': '' + action + '', 'event_category': 'Social', 'event_action': 'Share - ' + action + '', 'event_label': '' + label + ''}}); 1874 break; 1875 case "Audio": 1876 dataLayer.push({'event': "Generic Event", 'event_name': "audio_play", 'audio_play': { 'artist_name': '' + artist + '', 'audio_name': '' + label + '', 'event_category': "Audio", 'event_action': '' + action + '', 'event_label': '' + label + '' }}); 1877 break; 1878 default: 1879 break; 1880 } 1881 // analytics.js 1882 // ga('send', 'event', category, action, label); 1883 // ga.js: 1884 // _gaq.push(['_trackEvent', category, action, label]); 1885 } 1886 doLog("doTrack(" + category + " | " + action + " | " + label + ")"); 1887} 1888 1889function initSvg() { 1890 $('img.svg').each(function(){ 1891 var $img = $(this); var imgID = $img.attr('id'); var imgClass = $img.attr('class'); var imgURL = $img.attr('src'); 1892 $.get(imgURL, function(data) { 1893 var $svg = $(data).find('svg'); 1894 if (typeof imgID !== 'undefined') { $svg = $svg.attr('id', imgID); } 1895 if (typeof imgClass !== 'undefined') { $svg = $svg.attr('class', imgClass+' replaced-svg'); } 1896 $svg = $svg.removeAttr('xmlns:a'); $img.replaceWith($svg); 1897 }, 'xml'); 1898 }); 1899} 1900 1901function getCacheControl() { 1902 var date = new Date(); 1903 var year = date.getUTCFullYear();
1904 var month = date.getUTCMonth(); 1905 month++; // (from 0-11) 1906 if (month < 10) { month = "0" + month; } 1907 var day = date.getUTCDate(); 1908 if (day < 10) { day = "0" + day; } 1909 var hour = date.getUTCHours(); 1910 if (hour < 10) { hour = "0" + hour; } 1911 var minutes = date.getUTCMinutes(); 1912 switch(true) { case minutes>45:minutes="45";break; case minutes>30:minutes="30";break; case minutes>15:minutes="15";break; default:minutes="00";break; } 1913 var c = year + month + day + "-" + hour + minutes; 1914 return c; 1915} 1916 1917function inIframe() { 1918 try { 1919 return window.self !== window.top; 1920 } catch (e) { 1921 return true; 1922 } 1923} 1924 1925function checkLinks() { 1926 $('a[href^="http"]').not('a[href*="' + location.hostname + '"]').attr({target: "_blank", rel: "noopener"}); 1927} 1928 1929function winopen(url,name,w,h) { 1930 var w_shift = Number((screen.width/2)-(w/2)); 1931 var h_shift = Number((screen.height/2)-(h/2)); 1932 var newWin = window.open(url, name, 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, copyhistory=no, width='+w+', height='+h+', left='+w_shift+', top='+h_shift); 1933 newWin.focus(); 1934} 1935 1936function capitalizeFirstLetter(string) { 1937 return string.charAt(0).toUpperCase() + string.slice(1); 1938} 1939 1940function getCookieValue(a) { // thx 2 mac: http://stackoverflow.com/questions/5639346/#answer-25490531 1941 var b = document.cookie.match('(^|;)\\s*' + a + '\\s*=\\s*([^;]+)'); 1942 return b ? b.pop() : ''; 1943} 1944 1945function getRequestVar(name){ 1946 if (name=(new RegExp('[?&]'+encodeURIComponent(name)+'=([^&]*)')).exec(location.search)) { return decodeURIComponent(name[1]); } 1947} 1948 1949function kill(id) { 1950 element = document.getElementById(id); 1951 if (element) { 1952 var parent = element.parentNode; 1953 if (parent) { 1954 parent.removeChild(element); 1955 } 1956 } 1957 return false; 1958} 1959 1960// thx Jonas Raoni Soares Silva, http://jsfromhell.com/array/shuffle [rev. #1] // usage: var a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; alert('shuffle(a): ' + shuffle(a)); 1961function shuffle(v) { 1962 for(var j, x, i = v.length; i; j = parseInt(Math.random() * i), x = v[--i], v[i] = v[j], v[j] = x); 1963 return v; 1964}; 1965 1966function myRandom(a, b) { 1967 if (a > b) { return(-1); } 1968 if (a === b) { return(a); } 1969 return a + parseInt(Math.random() * ( b - a+1 )); 1970} 1971 1972// peace out
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.