/**
 * クロスブラウザで、特定のクラス名の要素を取得する
 * @param {Object} cn
 * @param {Object} pe
 * @param {Object} tg
 */
function getElementsByClassNameCB(cn, pe, tg) {
  var d = document;
  // Mozilla 1.9+, Safari 3.1+, Opera 9.51+
  if (d.getElementsByClassName) {
    return (pe || d).getElementsByClassName(cn);
  }
  // それ以外 
  else {
    var ns = [], ims;
    var cls, ims = (pe || d).getElementsByTagName(tg || '*');
    for (var i = 0, l = ims.length; i < l; i++) {
      im = ims[i];
      if (im.className) {
        cls = im.className.split(/\s+/);
        for (var j = 0, jl = cls.length; j < jl; j++) {
          if (cls[j] == cn) {
            ns[ns.length] = im;
            break;
          }
        }
      }
    }
    return ns.length > 0 ? ns : null;
  }
}

/*
 --------------------------------------------------------
 dateformat.js - Simple date formatter
 Version 1.1 (Update 2008/04/02)
 Copyright (c) 2007-2008 onozaty (http://www.enjoyxstudy.com)
 Released under an MIT-style license.
 For details, see the web site:
 http://www.enjoyxstudy.com/javascript/dateformat/
 --------------------------------------------------------
 patterns
 y : Year         ex. "yyyy" -> "2007", "yy" -> "07"
 M : Month        ex. "MM" -> "05" "12", "M" -> "5" "12"
 d : Day          ex. "dd" -> "09" "30", "d" -> "9" "30"
 H : Hour (0-23)  ex. "HH" -> "00" "23", "H" -> "0" "23"
 m : Minute       ex. "mm" -> "01" "59", "m" -> "1" "59"
 s : Second       ex. "ss" -> "00" "59", "H" -> "0" "59"
 S : Millisecond  ex. "SSS" -> "000" "012" "999",
 "SS" -> "00" "12" "999", "S" -> "0" "12" "999"
 Text can be quoted using single quotes (') to avoid interpretation.
 "''" represents a single quote.
 Useing..
 var fmt = new DateFormat("yyyy/MM/dd HH:mm:ss SSS");
 var str = fmt.format(new Date()); // "2007/05/10 12:21:19 002"
 var date = fmt.parse("2007/05/10 12:21:19 002"); // return Date object
 --------------------------------------------------------
 */
function DateFormat(pattern) {
  this._init.apply(this, arguments);
};

DateFormat.prototype = {
  _init: function(pattern) {
    this.pattern = pattern;
    this._patterns = [];
    
    for (var i = 0; i < pattern.length; i++) {
      var ch = pattern.charAt(i);
      if (this._patterns.length == 0) {
        this._patterns[0] = ch;
      }
      else {
        var index = this._patterns.length - 1;
        if (this._patterns[index].charAt(0) == "'") {
          if (this._patterns[index].length == 1 || this._patterns[index].charAt(this._patterns[index].length - 1) != "'") {
            this._patterns[index] += ch;
          }
          else {
            this._patterns[index + 1] = ch;
          }
        }
        else if (this._patterns[index].charAt(0) == ch) {
          this._patterns[index] += ch;
        }
        else {
          this._patterns[index + 1] = ch;
        }
      }
    }
  },
  
  format: function(date) {
  
    var result = [];
    for (var i = 0; i < this._patterns.length; i++) {
      result[i] = this._formatWord(date, this._patterns[i]);
    }
    return result.join('');
  },
  _formatWord: function(date, pattern) {
  
    var formatter = this._formatter[pattern.charAt(0)];
    if (formatter) {
      return formatter.apply(this, [date, pattern]);
    }
    else {
      return pattern;
    }
  },
  _formatter: {
    "y": function(date, pattern) {
      // Year
      var year = String(date.getFullYear());
      if (pattern.length <= 2) {
        year = year.substring(2, 4);
      }
      else {
        year = this._zeroPadding(year, pattern.length);
      }
      return year;
    },
    "M": function(date, pattern) {
      // Month in year
      return this._zeroPadding(String(date.getMonth() + 1), pattern.length);
    },
    "d": function(date, pattern) {
      // Day in month
      return this._zeroPadding(String(date.getDate()), pattern.length);
    },
    "H": function(date, pattern) {
      // Hour in day (0-23)
      return this._zeroPadding(String(date.getHours()), pattern.length);
    },
    "m": function(date, pattern) {
      // Minute in hour
      return this._zeroPadding(String(date.getMinutes()), pattern.length);
    },
    "s": function(date, pattern) {
      // Second in minute
      return this._zeroPadding(String(date.getSeconds()), pattern.length);
    },
    "S": function(date, pattern) {
      // Millisecond
      return this._zeroPadding(String(date.getMilliseconds()), pattern.length);
    },
    "'": function(date, pattern) {
      // escape
      if (pattern == "''") {
        return "'";
      }
      else {
        return pattern.replace(/'/g, '');
      }
    }
  },
  
  _zeroPadding: function(str, length) {
    if (str.length >= length) {
      return str;
    }
    
    return new Array(length - str.length + 1).join("0") + str;
  },
  
  
  /// Parser ///
  parse: function(text) {
  
    if (typeof text != 'string' || text == '') {
      return null;
    }
    
    var result = {
      year: 1970,
      month: 1,
      day: 1,
      hour: 0,
      min: 0,
      sec: 0,
      msec: 0
    };
    for (var i = 0; i < this._patterns.length; i++) {
      if (text == '') {
        return null; // parse error!!
      }
      text = this._parseWord(text, this._patterns[i], result);
      if (text === null) {
        return null; // parse error!!
      }
    }
    if (text != '') {
      return null; // parse error!!
    }
    return new Date(result.year, result.month - 1, result.day, result.hour, result.min, result.sec, result.msec);
  },
  _parseWord: function(text, pattern, result) {
  
    var parser = this._parser[pattern.charAt(0)];
    if (parser) {
      return parser.apply(this, [text, pattern, result]);
    }
    else {
      if (text.indexOf(pattern) != 0) {
        return null;
      }
      else {
        return text.substring(pattern.length);
      }
    }
  },
  _parser: {
    "y": function(text, pattern, result) {
      // Year
      var year;
      if (pattern.length <= 2) {
        year = text.substring(0, 2);
        year = year < 70 ? '20' + year : '19' + year;
        text = text.substring(2);
      }
      else {
        var length = (pattern.length == 3) ? 4 : pattern.length;
        year = text.substring(0, length);
        text = text.substring(length);
      }
      if (!this._isNumber(year)) 
        return null; // error
      result.year = parseInt(year, 10);
      return text;
    },
    "M": function(text, pattern, result) {
      // Month in year
      var month;
      if (pattern.length == 1 && text.length > 1 &&
      text.substring(0, 2).match(/1[0-2]/) != null) {
        month = text.substring(0, 2);
        text = text.substring(2);
      }
      else {
        month = text.substring(0, pattern.length);
        text = text.substring(pattern.length);
      }
      if (!this._isNumber(month)) 
        return null; // error
      result.month = parseInt(month, 10);
      return text;
    },
    "d": function(text, pattern, result) {
      // Day in month
      var day;
      if (pattern.length == 1 && text.length > 1 &&
      text.substring(0, 2).match(/1[0-9]|2[0-9]|3[0-1]/) != null) {
        day = text.substring(0, 2);
        text = text.substring(2);
      }
      else {
        day = text.substring(0, pattern.length);
        text = text.substring(pattern.length);
      }
      if (!this._isNumber(day)) 
        return null; // error
      result.day = parseInt(day, 10);
      return text;
    },
    "H": function(text, pattern, result) {
      // Hour in day (0-23)
      var hour;
      if (pattern.length == 1 && text.length > 1 &&
      text.substring(0, 2).match(/1[0-9]|2[0-3]/) != null) {
        hour = text.substring(0, 2);
        text = text.substring(2);
      }
      else {
        hour = text.substring(0, pattern.length);
        text = text.substring(pattern.length);
      }
      if (!this._isNumber(hour)) 
        return null; // error
      result.hour = parseInt(hour, 10);
      return text;
    },
    "m": function(text, pattern, result) {
      // Minute in hour
      var min;
      if (pattern.length == 1 && text.length > 1 &&
      text.substring(0, 2).match(/[1-5][0-9]/) != null) {
        min = text.substring(0, 2);
        text = text.substring(2);
      }
      else {
        min = text.substring(0, pattern.length);
        text = text.substring(pattern.length);
      }
      if (!this._isNumber(min)) 
        return null; // error
      result.min = parseInt(min, 10);
      return text;
    },
    "s": function(text, pattern, result) {
      // Second in minute
      var sec;
      if (pattern.length == 1 && text.length > 1 &&
      text.substring(0, 2).match(/[1-5][0-9]/) != null) {
        sec = text.substring(0, 2);
        text = text.substring(2);
      }
      else {
        sec = text.substring(0, pattern.length);
        text = text.substring(pattern.length);
      }
      if (!this._isNumber(sec)) 
        return null; // error
      result.sec = parseInt(sec, 10);
      return text;
    },
    "S": function(text, pattern, result) {
      // Millimsecond
      var msec;
      if (pattern.length == 1 || pattern.length == 2) {
        if (text.length > 2 && text.substring(0, 3).match(/[1-9][0-9][0-9]/) != null) {
          msec = text.substring(0, 3);
          text = text.substring(3);
        }
        else if (text.length > 1 && text.substring(0, 2).match(/[1-9][0-9]/) != null) {
          msec = text.substring(0, 2);
          text = text.substring(2);
        }
        else {
          msec = text.substring(0, pattern.length);
          text = text.substring(pattern.length);
        }
      }
      else {
        msec = text.substring(0, pattern.length);
        text = text.substring(pattern.length);
      }
      if (!this._isNumber(msec)) 
        return null; // error
      result.msec = parseInt(msec, 10);
      return text;
    },
    "'": function(text, pattern, result) {
      // escape
      if (pattern == "''") {
        pattern = "'";
      }
      else {
        pattern = pattern.replace(/'/g, '');
      }
      if (text.indexOf(pattern) != 0) {
        return null; // error
      }
      else {
        return text.substring(pattern.length);
      }
    }
  },
  
  _isNumber: function(str) {
    return /^[0-9]*$/.test(str);
  }
}

/*
 --------------------------------------------------------
 dateformat.js end
 --------------------------------------------------------
 */
function getPubDate(tagName, className) {
  var pubDate = '';
  var objArray = getElementsByClassNameCB(className, '', tagName)
  if (objArray || objArray.length == 1) {
    var dateStringSrc = objArray[0].innerHTML;
    var dateString = (dateStringSrc.match(/^(.+?) ?\(.*?\)$/) || [])[1];
    if (dateString && dateString.length > 0) {
      try {
        var dateParser = new DateFormat('yyyy年M月d日');
        var dateObj = dateParser.parse(dateString);
        var dateFormat = new DateFormat('yyyyMMdd');
        pubDate = dateFormat.format(dateObj);
      } 
      catch (e) {
        ;
      }
    }
  }
  return pubDate;
}
