//
// mkgsm : Google Site Map Generator
//
// usage :
//   0) Prepare a XML style sheet (You can find one at http://sourceforge.net/projects/gstoolbox).
//   1) Configure variables.
//   2) Configure functions.
//   3) Run mkgsm.
//
// see also :
//   http://www.google.com/webmasters/sitemaps/docs/en/protocol.html
//

/**** CONFIGURATION ****/

/* configurable variables */

var HTTP_ROOT = 'http://www-ui.is.s.u-tokyo.ac.jp'; // root URL (without trailing slash)
var LOCAL_ROOT = 'c:\\public_html'; // local root
var XML_FILE = 'sitemap.xml'; // XML file to be output
var XSL_FILE = 'gss.xsl'; // XML style sheet

/* configurable functions */

// arguments : url
// return : the priority of the url (from 0.0 to 1.0)
function getPriority(url) {
//  return url.match('/logs/') ? '0.5' : '1.0'; // p = 0.5 for documents under the /logs directory; p = 1.0 for others
//  return url.match(/^.+\/index\.\w+$/) ? '0.5' : '1.0'; // p = 0.5 for index documents; p = 1.0 for others
  return '1.0'; // p = 1.0 for any document
}

// arguments : url
// return : the change frequency of the url (always .. never)
function getChangeFreq(url) {
//  return url.match('/logs/') ? 'yearly' : 'weekly'; // documents under the /logs directory will yearly be changed; others will weekly be changed.
//  return url.match(/^.+\/index\.\w+$/) ? 'daily' : 'monthly'; // index documents will daily be changed; others will monthly be changed.
  return 'never'; // all documents will never be changed
}

// arguments : url
// return : the url (default behavior : the trailing /index.* will be omitted)
function formatURL(url) {
  return url.replace(/^(.+\/)index\.\w+$/, '$1');
}

// arguments : date
// return : the formatted date string (default format : YYYY-MM-DDThh:mm:ssTZD)
function formatDateTime(date) {
  var d = new Date(date);
  
  var Y = (d.getFullYear());
  var M = (d.getMonth() + 101).toString().substr(1);
  var D = (d.getDate() + 100).toString().substr(1);
  var h = (d.getHours() + 100).toString().substr(1);
  var m = (d.getMinutes() + 100).toString().substr(1);
  var s = (d.getSeconds() + 100).toString().substr(1);
  var tz = (d.getTimezoneOffset());
  var Zh = (Math.abs(tz) / 60 + 100).toString().substr(1);
  var Zm = (Math.abs(tz) % 60 + 100).toString().substr(1);

  return Y + '-' + M + '-' + D + 'T' + h + ':' + m + ':' + s + (tz == 0 ? 'Z' : (tz < 0 ? '+' : '-') + Zh + ':' + Zm);
}

/***********************/

var fso = new ActiveXObject('Scripting.FileSystemObject');
var doc = new ActiveXObject('Microsoft.XMLDOM');

doc.appendChild(doc.createProcessingInstruction('xml', 'version="1.0" encoding="UTF-8"'));
doc.appendChild(doc.createProcessingInstruction('xml-stylesheet', 'type="text/xsl" href="' + XSL_FILE + '"'));

var ns = 'http://www.google.com/schemas/sitemap/0.84';
var set = doc.appendChild(doc.createNode(1, 'urlset', ns));

(function (path, base) {
  var dc = new Enumerator(path.subFolders);
  
  for (; !dc.atEnd(); dc.moveNext()) {
    var d = dc.item();
    
    arguments.callee(d, [base, d.name].join('/'));
  }
  
  var fc = new Enumerator(path.files);
  
  for (; !fc.atEnd(); fc.moveNext()) {
    var f = fc.item();
    
    if (f.type.match('HTML')) {
      var url = [base, f.name].join('/');

      with (set.appendChild(doc.createNode(1, 'url', ns))) {
        appendChild(doc.createNode(1, 'loc', ns)).appendChild(doc.createTextNode(formatURL(url)));
        appendChild(doc.createNode(1, 'lastmod', ns)).appendChild(doc.createTextNode(formatDateTime(f.dateLastModified)));
        appendChild(doc.createNode(1, 'changefreq', ns)).appendChild(doc.createTextNode(getChangeFreq(url)));
        appendChild(doc.createNode(1, 'priority', ns)).appendChild(doc.createTextNode(getPriority(url)));
      }
    }
  }
})(fso.getFolder(LOCAL_ROOT), HTTP_ROOT);

doc.save(fso.buildPath(LOCAL_ROOT, XML_FILE));


