/**
 *
 */
function RADateUtils(){

  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
   --------------------------------------------------------
   */
  
  /**
   *
   */
  this.getPubDate = function(){
  		
		var targets = getElementsByClassNameCB('j2', document.getElementById('content'), 'SPAN');
		if (!targets) {
			return;
		}
		
		var targetObj;
		for (var i = 0; i < targets.length; ++i) {
			var target = targets[i];
			if (target && target.tagName.toUpperCase() == 'SPAN') {
				targetObj = target;
			}
		}
		
		if (!targetObj) {
			return;
		}
		
		var dFormat = '(yyyy/M/d)';
		var pubDate = '';
		var dateStringSrc = targetObj.innerHTML;
		
		if (!dateStringSrc || dateStringSrc.length == 0) {
			return '';
		}
		var dateString = dateStringSrc;
        if (dateString && dateString.length > 0) {
          try {
            var dateParser = new DateFormat(dFormat);
            var dateObj = dateParser.parse(dateString);
            var dateFormat = new DateFormat('yyyyMMdd');
            pubDate = dateFormat.format(dateObj);
          } 
          catch (e) {
            ;
          }
        }
		return pubDate;
  }
}