/*=:project scalable Inman Flash Replacement (sIFR) version 3. Provides debug information about sIFR. =:file Copyright: 2006 Mark Wubben. Author: Mark Wubben, =:license * This software is licensed and provided under the CC-GNU LGPL * See */ sIFR.debug = new function() { function log(msg) { if(!sIFR.ua.safari && window.console && console.log) console.log(msg); else alert(msg); } function merge(kwargs, mergeKwargs) { if(mergeKwargs) { for(var property in kwargs) { if(typeof(mergeKwargs[property]) == 'undefined') mergeKwargs[property] = kwargs[property]; } kwargs = mergeKwargs; } return kwargs; } this.ua = function() { var info = []; for(var prop in sIFR.ua) { if(sIFR.ua[prop] == Object.prototype[prop]) continue; info.push(prop, ': ', sIFR.ua[prop], '\n'); } log(info.join('')); }; this.domains = function() { var valid = sIFR.domains.length == 0; // The validation code is copied from the private sIFR code. Please keep // up to date! var domain = ''; try { // When trying to access document.domain on a Google-translated page with Firebug, I got an exception. domain = document.domain; } catch(e) {}; for(var i = 0; i < sIFR.domains.length; i++) { if(sIFR.domains[i] == '*' || sIFR.domains[i] == domain) { valid = true; break; } } log(['The domain "', domain, '" is ', valid ? 'valid' : 'invalid', '.\nList of checked domains: ', sIFR.domains].join('')); }; this.ratios = function(kwargs, mergeKwargs) { kwargs = merge(kwargs, mergeKwargs); var running = false; kwargs.onReplacement = function(cb) { if(running) return; // Prevent duplicate results running = true; cb.debugHandler = function(info, args) { if(/(FSCommand\:)?debug\:ratios/.test(info)) prompt('The ratios for ' + kwargs.selector + ' are:', args); } cb.call('ratios', ''); }; sIFR.replace(kwargs); }; function verifyResource(uri, fail, ok) { if(sIFR.ua.ie && uri.charAt(0) == '/') { uri = window.location.toString().replace(/([^:]+)(:\/?\/?)([^\/]+).*/, '$1$2$3') + uri; } var xhr = new XMLHttpRequest(); xhr.open('GET', uri, true); xhr.onreadystatechange = function() { if(xhr.readyState == 4) { if(xhr.status != 200) log(fail); else log(ok); } }; xhr.send(''); } this.test = function(kwargs, mergeKwargs) { kwargs = merge(kwargs, mergeKwargs); var src = kwargs.src; var checked = false; if(typeof(src) != 'string') { if(src.src) src = src.src; if(typeof(src) != 'string') { var versions = []; for(var version in src) if(src[version] != Object.prototype[version]) versions.push(version); versions.sort().reverse(); var result = ''; var i = -1; while(!result && ++i < versions.length) { if(parseFloat(versions[i]) <= ua.flashVersion) result = src[versions[i]]; var msg = '<' + src[versions[i]] + '>, flash ' + parseFloat(versions[i]); verifyResource(src[versions[i]], 'FAILED: ' + msg, 'OK: ' + msg); } src = result; checked = true; } } if(!src) log('Could not determine appropriate source.'); else if(!checked) verifyResource(src, 'FAILED: <' + src + '>', 'OK: <' + src + '>'); }; this.forceTest = function() { var replace = sIFR.replace; sIFR.replace = function(kwargs, mergeKwargs) { sIFR.debug.test(kwargs, mergeKwargs); replace.call(sIFR, kwargs, mergeKwargs); }; } };