// ==UserScript==
// @name          Really Valid CSS?
// @namespace     http:///www.mittineague.com/dev/
// @description   check if pages claiming to be valid CSS really are
// @include       *
// ==/UserScript==

/*
 * This is a modified version of the Really Valid? (HTML) userscript from
 * http://www.oreilly.com/catalog/greasemonkeyhks/
 *
 * XPATH and url changed to CSS validator
 * 'if' regex changed to match CSS validator response 
 * title and innerHTML changed
 * November 15, 2006 - added (function(){ [CODE] })();
 *
 * ORIGINAL CODE
 *
 * var snapValidLinks = document.evaluate(
 *     "//a[@href='http://validator.w3.org/check/referer']",
 *     document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
 * if (!snapValidLinks.snapshotLength) return;
 * GM_xmlhttpRequest({
 *     method: 'GET',
 *     url: 'http://validator.w3.org/check?uri=' + escape(location),
 *     onload: function(oResponse) {
 *         if (/This Page Is Valid/.test(oResponse.responseText)) return;
 *         for (var i = 0; i < snapValidLinks.snapshotLength; i++) {
 *             var elmInvalid = snapValidLinks.snapshotItem(i);
 *             elmInvalid.title = 'This page claimed to validate, but it lied';
 *             elmInvalid.innerHTML = 'Invalid markup!';
 *         }
 *     }
 * });
 *
 */

(function(){

var snapValidLinks = document.evaluate(
    "//a[starts-with(@href, 'http://jigsaw.w3.org/css-validator/')]",
    document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
if (!snapValidLinks.snapshotLength) return;
GM_xmlhttpRequest({
    method: 'GET',
    url: 'http://jigsaw.w3.org/css-validator/validator?uri=' + escape(location),
    data: null,
    onload: function(oResponse) {
        if (/Congratulations!/.test(oResponse.responseText)) return;
        for (var i = 0; i < snapValidLinks.snapshotLength; i++) {
            var elmInvalid = snapValidLinks.snapshotItem(i);
            elmInvalid.title = 'This page is NOT valid';
            elmInvalid.innerHTML = 'Invalid CSS!';
        }
    }
});

})();

