/* Adapt.js licensed under GPL and MIT. Read more here: http://adapt.960.gs */ // Closure. (function(w, d, config, undefined) { // If no config, exit. if (!config) { return; } // Empty vars to use later. var url, url_old, timer; // Alias config values. var callback = typeof config.callback === 'function' ? config.callback : undefined; var path = config.path ? config.path : ''; var range = config.range; var range_len = range.length; // Create empty link tag: // var css = d.createElement('link'); css.rel = 'stylesheet'; css.media = 'screen'; var isMobile = /iPhone|iPod|iPad|Phone|Mobile|Android|hpwos/i.test(navigator.userAgent); var isPhone = /iPhone|iPod|Phone|Android/i.test(navigator.userAgent); // alert(navigator.userAgent); function isLandscape() { return typeof window.orientation != 'undefined' && (window.orientation == 90 || window.orientation == -90); } // Called from within adapt(). var change_i, change_width; function change(i, width) { oncallback_i = i; oncallback_width = width; // Set the URL. css.href = url; url_old = url; var timer = setInterval(function() { var c1,c2,c3; try { c1 = css.sheet && css.sheet.cssRules && css.sheet.cssRules.length > 0; } catch(e) {}; try { c2 = css.styleSheet && css.styleSheet.cssText && css.styleSheet.cssText.length > 0; } catch(e) {}; try { c3 = css.innerHTML && css.innerHTML && css.innerHTML.length > 0; } catch(e) {}; if (c1 || c2 || c3) { clearInterval(timer); // Call callback, if defined. callback && callback(i, width); // Trigger event 'emadaptchange' jQuery && jQuery(window).trigger('emadaptchange'); } }, 16); } // Adapt to width. function adapt() { // This clearTimeout is for IE. // Really it belongs in react(), // but doesn't do any harm here. clearTimeout(timer); // Parse browser width. //var width = w.innerWidth || d.documentElement.clientWidth || d.body.clientWidth || 0; var width = jQuery(window).width(); if (isMobile) { if (isPhone || screen && screen.width < 760) width = Math.min(760, screen.width); else width = isLandscape() ? screen.height : screen.width; } // While loop vars. var arr, arr_0, val_1, val_2, is_range, file; // How many ranges? var i = range_len; var last = range_len - 1; while (i--) { // Blank if no conditions met. url = ''; // Turn string into array. arr = range[i].split('='); // Width is to the left of "=". arr_0 = arr[0]; // File name is to the right of "=". // Presuppoes a file with no spaces. // If no file specified, make empty. file = arr[1] ? arr[1].replace(/\s/g, '') : undefined; // Assume max if "to" isn't present. is_range = arr_0.match('to'); // If it's a range, split left/right sides of "to", // and then convert each one into numerical values. // If it's not a range, turn maximum into a number. val_1 = is_range ? parseInt(arr_0.split('to')[0], 10) : parseInt(arr_0, 10); val_2 = is_range ? parseInt(arr_0.split('to')[1], 10) : undefined; // Check for maxiumum or range. if ((!val_2 && i === last && width > val_1) || (width > val_1 && width <= val_2)) { // Build full URL to CSS file. file && (url = path + file); // Exit the while loop. No need to continue // if we've already found a matching range. break; } } // Was it created yet? if (!url_old) { // Apply changes. change(i, width); // Add the CSS, only if path is defined. // Use faster document.head if possible. path && (d.head || d.getElementsByTagName('head')[0]).appendChild(css); } else if (url_old !== url) { // Apply changes. change(i, width); } } // Fire off once. adapt(); // Slight delay. function react() { // Clear the timer as window resize fires, // so that it only calls adapt() when the // user has finished resizing the window. clearTimeout(timer); // Start the timer countdown. timer = setTimeout(adapt, 16); // -----------------------^^ // Note: 15.6 milliseconds is lowest "safe" // duration for setTimeout and setInterval. // // http://www.nczonline.net/blog/2011/12/14/timer-resolution-in-browsers } // Do we want to watch for // resize and device tilt? if (config.dynamic) { // Event listener for window resize, // also triggered by phone rotation. if (w.addEventListener) { // Good browsers. w.addEventListener('resize', react, false); } else if (w.attachEvent) { // Legacy IE support. w.attachEvent('onresize', react); } else { // Old-school fallback. w.onresize = react; } } // Pass in window, document, config, undefined. })(this, this.document, ADAPT_CONFIG);