function seesaaSquareUnderSakura () {
  this.initialize.apply(this, arguments);
}

seesaaSquareUnderSakura.prototype = {
  initialize: function (args) {
    this.args = args;
    this.preload = window.onload;
    if(this.args.id){
      this.container = document.getElementById(this.args.id);
    }
  },
  ce: function (tag, attr, innerTxt) {
    var ele = document.createElement(tag);
    if(attr){
      if("id" in attr) {
	ele.setAttribute("id", attr["id"]);
      }
      if("class" in attr) {
	ele.className = attr["class"];
      }
    }
    if(innerTxt)
      ele.appendChild(document.createTextNode(innerTxt));
    return ele;
  },
  getText: function (ele) {
    var textNodes = [];
    var callback = function (node, args) {
      args.push(node);
    }
    this.findTextNodes(ele, callback, textNodes);

    var text = new String;
    for(var i=0;i<textNodes.length;i++){
      text += textNodes[i].nodeValue;
    }
    return text;
  },
  findTextNodes: function (ele, callback, args) {
    var exceptiveTags = [ "area", "base", "basefont", "br", "col", "colgroup", "frame", "frameset", 
			  "head", "hr", "img", "input", "isindex", "link", "listing", "meta", "optgroup", "option", "param", "plaintext",
			  "rp", "script", "select", "style", "textarea", "title", "xmp" ];
    var exceptionReg = new RegExp('^(' + exceptiveTags.join('|') + ')$', 'i');

    function _findTextNodes (ele, callback, args) {
      for (var i=0;i<ele.childNodes.length;i++) {
	var node = ele.childNodes[i];
	if(node.nodeName.match(exceptionReg))
	  continue;
	if(node.className == 'listCategoryArticle')
	  continue;
	if(node.childNodes)
	  _findTextNodes(node, callback, args);
	if(node.nodeType == 3){
	  callback(node, args);
	}
      }
    }
    _findTextNodes(ele, callback, args);
  },
  getBody: function () {
    var adContainer = this.container.parentNode;

    if(adContainer && adContainer.id == 'article-ad'){
      var body = adContainer.parentNode;

      var blogBody = body.parentNode;

      var title = blogBody.getElementsByTagName('h3')[0];
      var str = new String;
      if(title)
	str = str + this.getText(title);

      if(body)
	str = str + this.getText(body);

      return str;
    }
  },
  show: function () {
    if(! this.container){
      return;
    }
    var body = this.getBody();
    if(body && body.length){
      if(body.length > 128){
	body = body.substr(0, 128);
      }
      delete this.args.query.k;
      this.args.query.kizasi  = 1;
      this.args.query.kizasi_body = body;
      this.showListings();
    }
    else {
      this.showListings();
    }

    if(this.preload){
      this.preload();
    }
  },
  showListings: function () {
    var queryString = [];
    for (var key in this.args.query){
      if(this.args.query.hasOwnProperty(key)){
	queryString.push(key + '=' + encodeURIComponent(this.args.query[key]));
      }
    }

    var iframe = this.ce('iframe');
    iframe.src = 'http://match.seesaa.jp/ot_square.pl?' + queryString.join('&');
    iframe.width  = this.args.frame_width;
    iframe.height = this.args.frame_height;
    iframe.scrolling         = 'no';
    iframe.frameBorder       = 0;
    iframe.marginWidth       = 0;
    iframe.marginHeight      = 0;
    iframe.allowTransparency = true;
    iframe.setAttribute('id', this.args.id + '-iframe');
    
    this.container.appendChild(iframe);
  },
  getElementsByClassName: function(className, tag, root, apply) {
    /*
      Copyright (c) 2008, Yahoo! Inc. All rights reserved.
      Code licensed under the BSD License:
      http://developer.yahoo.net/yui/license.txt
      version: 2.5.2
    */
    var reClassNameCache = {};
    var getClassRegEx = function(className) {
      var re = reClassNameCache[className];
      if (!re) {
	re = new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)');
	reClassNameCache[className] = re;
      }
      return re;
    };
    tag = tag || '*';
    root = (root) || document;
    if (!root) {
      return [];
    }

    var nodes = [],
    elements = root.getElementsByTagName(tag),
    re = getClassRegEx(className);

    for (var i = 0, len = elements.length; i < len; ++i) {
      if ( re.test(elements[i].className) ) {
	nodes[nodes.length] = elements[i];
	if (apply) {
	  apply.call(elements[i], elements[i]);
	}
      }
    }
    return nodes;
  },
  end:"1"
};

if(typeof seesaa_square_under_counter == 'undefined'){
  var seesaa_square_under_counter = 0;
}
seesaa_square_under_counter = seesaa_square_under_counter + 1;

(function () {
  var frame_width; var frame_height;
  switch(seesaa_template_id){
  case '4001':
    frame_width = 380; frame_height = 100;
    break;
  case '4002':
    frame_width = 300; frame_height = 130;
    break;
  }
  
  var id = 'square-under-' + seesaa_square_under_counter;
  document.write('<div id="' + id + '"></div>');

  var obj = new seesaaSquareUnderSakura(
  {
      id: id,
      frame_width: frame_width + 'px',
      frame_height: frame_height + 'px',
      query: {
        hid: seesaa_hostsite_id,
        sid: seesaa_site_id,
        tid: seesaa_template_id + '_sakura',
	       //        c: seesaa_adcount,
        k: seesaa_keyword_list,
        ic: seesaa_keyword_char,
        c_key: typeof seesaa_article_id != 'undefined' ? seesaa_article_id : ''
      }
  });
  window.onload = function () { obj.show(); }
})();
 
/*
var frame_width; var frame_height;
switch(seesaa_template_id){
 case '4001':
   frame_width = 380; frame_height = 100;
   break;
 case '4002':
   frame_width = 300; frame_height = 130;
   break;
}

document.write('<ifr' + 'ame name="maad" src="http://match.seesaa.jp/ot_square.pl?'
	       + 'hid='  + seesaa_hostsite_id
	       + '&sid=' + seesaa_site_id     
	       + '&tid=' + seesaa_template_id + '_sakura'
	       // + '&gid=' + seesaa_genre_id
	       + '&aid=' + seesaa_article_id
	       + '&k='   + seesaa_keyword_list
	       + '&ic='  + seesaa_keyword_char
	       
	       + '"');
document.write(' width="'  + frame_width  + '"' +
	       ' height="' + frame_height + '"' +
	       ' scrolling="no" frameborder="no" marginwidth="0" marginheight="0" allowTransparency="true"></ifr' + 'ame>');
*/

