// Scraper Description

var prefix = { 
    rdf: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
    dc: 'http://purl.org/dc/elements/1.1/',
    ical: 'http://www.w3.org/2000/10/swap/pim/ical#' 
};

var expand = function(ns,property) { 
  return prefix[ns] + property;
};

var namespace = document.documentElement.namespaceURI;

var nsResolver = namespace ? function(prefix) {
  return (prefix == 'x') ? namespace : null;
} : null;

var getNode = function(document, contextNode, xpath, nsResolver) {
  return document.evaluate(xpath, contextNode, nsResolver, XPathResult.ANY_TYPE,null).iterateNext();
}

var cleanString = function(s) {
  return utilities.trimString(s);
}

var xpath = '//table[@class="smwtable"][@id="querytable1"]/tbody/tr';

var elmts = utilities.gatherElementsOnXPath(document, document, xpath, nsResolver);

for each (var elmt in elmts) {

    try {
        uri = cleanString(getNode(document, elmt, './TD[1]/A[1]', nsResolver).href);
        function assert (ns, property, selector) {
            try {
                var ndQ = getNode(document, elmt, selector, nsResolver);
                if (ndQ) {
                    data.addStatement(uri, expand(ns,property), cleanString(ndQ.nodeValue), true);
                }
            } catch (e) { 
                log("Error seeking <" + uri + ">'" + property + ": " + e);
            }
        }
        
        log("scraping: " + uri);
        data.addStatement(uri, expand('rdf','type'), expand('ical', 'Vevent'), false);
        
        assert('dc', 'title', './TD[2]/text()[1]');
        assert('ical', 'dtstart', './TD[5]/text()[1]');
        assert('ical', 'dtend', './TD[6]/text()[1]');
    
    } catch (e) { 
        log(e);
    }
}

//