// http://www.din.or.jp/~hagi3/JavaScript/JSTips/Default.htm

// _safari : true = safari, false = others
_safari=navigator.userAgent.toLowerCase().indexOf('safari')!=-1;

// _dom : kind of DOM.
//        IE4 = 1, IE5+ = 2, NN4 = 3, NN6+ = 4, others = 0
_dom = document.all?(document.getElementById?2:1):
                    (document.getElementById?4:
                    (document.layers?3:0));

function getLeftFromEvent(e){
  if(_dom==4)
    return e.clientX+(_safari?0:window.scrollX);
  if(_dom==2||_dom==1)
    return document.body.scrollLeft+window.event.clientX;
  if(_dom==3)
    return e.pageX;
  return 0;
}

function getTopFromEvent(e){
  if(_dom==4)
//    return e.clientY+(_safari?0:window.scrollY);
    return e.clientY+window.scrollY;
  if(_dom==2||_dom==1)
    return document.body.scrollTop+window.event.clientY;
  if(_dom==3)
    return e.pageY;
  return 0;
}

// http://web.paulownia.jp/script/sample/popup.html

function popupImage(filepath, e){
    var y = 0;
    var x = 0;
//    var width=64;
//    var height=64;
    y = getTopFromEvent(e)-80;
    x = getLeftFromEvent(e);
    if (!popupImage.imgNode) {
        if (document.all) {
//            y = document.body.scrollTop + 32;
//            x = document.body.scrollLeft + 32;
            popupImage.imgNode = document.createElement('img');
            popupImage.imgNode.attachEvent('onclick', closeImage);
            popupImage.imgNode.attachEvent('onmouseout', closeImage);
//            e.srcElement.attachEvent('onclick', closeImage);

        } else if (document.implementation) {
//            y = window.pageYOffset + 32;
//            x = window.pageXOffset + 32;
            popupImage.imgNode = document.createElement('img');
            popupImage.imgNode.addEventListener('click' ,closeImage , true);
            popupImage.imgNode.addEventListener('mouseout' ,closeImage , true);
            e.target.addEventListener('mouseout' ,closeImage , true);

        } else {
            return;
        }
    }
    with(popupImage){
        imgNode.setAttribute('src', filepath );
//        if (width && height) {
//            imgNode.setAttribute('width', width );
//            imgNode.setAttribute('height', height );
//        }
        imgNode.style.position = 'absolute';
        imgNode.style.left = x + 'px'; //'32px';
        imgNode.style.top = y + 'px';
        imgNode.style.borderColor = '#0099FF';
        imgNode.style.backgroundColor = '#FFFFFF';
        imgNode.style.borderWidth = '2px';
        imgNode.style.borderStyle = 'solid';
        imgNode.style.margin = '0';
        document.body.appendChild(imgNode);
    }

    function closeImage(){
        if (popupImage.imgNode) {
            document.body.removeChild(popupImage.imgNode);
            delete popupImage.imgNode;
        }
    }
}

function autoScroll(speed) {
  if (typeof bTmp != "undefined"){
    clearInterval(bTmp);
  }
  bTmp=setInterval('ScrollFW()',speed);
  document.onmousedown=stopScroll;
}

// http://www.chordie.com/javascript/chordie2.js

function ScrollFW(){
	if (isAtBottom() == false){
		self.scrollBy(0,1);
	} else {
 		clearInterval(bTmp);
	}
}

function stopScroll() {
	clearInterval(bTmp);
}

function isAtBottom(){
	var a,b,c;
	a=document.documentElement.scrollHeight;
	b=document.documentElement.scrollTop;
	c=document.documentElement.clientHeight
	return ((a-b)<=c);
}

// http://blog.livedoor.jp/dankogai/archives/51234650.html

(function(d){

var $ = function(id){ return d.getElementById(id) };

var json2list = function(json){
    var p = d.createElement('p');
    p.style.clear='both';

    if (json['artworkUrl60']){
        var a = d.createElement('a');
        // a.href = json['trackViewUrl'];
        a.href='http://click.linksynergy.com/fs-bin/click?id=7Ne5QoJ1VIE&offerid=94348.1'+json['trackId']+'&type=2&subid=0';
        a.target = '_blank';
        var img = d.createElement('img');
        img.style.styleFloat='right';
        img.style.cssFloat='right';
        img.style.marginRight='0.5em';
        img.src = json['artworkUrl60'];
        a.appendChild(img);
        p.appendChild(a);
    }

    if (json['trackName']){
      var a = d.createElement('a');
      // a.href = json['trackViewUrl'];
      a.href='http://click.linksynergy.com/fs-bin/click?id=7Ne5QoJ1VIE&offerid=94348.1'+json['trackId']+'&type=2&subid=0';
      a.target = '_blank';
      var sp = d.createElement('p');
      if (json['trackName']) sp.appendChild(
          typeof(json['trackName']) === 'object' ? arguments.callee(json['trackName'])
                                                 : d.createTextNode(json['trackName'])
      );
      sp.style.textDecoration='underline';
      sp.appendChild(d.createElement('br'));
      a.appendChild(sp);
      p.appendChild(a);
    }
    if (json['artistName']){
      var sp = d.createElement('span');
      if (json['artistName']) sp.appendChild(
          typeof(json['artistName']) === 'object' ? arguments.callee(json['artistName'])
                                                 : d.createTextNode(json['artistName'])
      );
      sp.appendChild(d.createElement('br'));
      p.appendChild(sp);
    }
    if (json['trackPrice']){
      var sp = d.createElement('span');
      sp.style.color = '#990000';
      sp.appendChild(d.createTextNode('Download ￥'));
      if (json['trackPrice']) sp.appendChild(
          typeof(json['trackPrice']) === 'object' ? arguments.callee(json['trackPrice'])
                                                 : d.createTextNode(json['trackPrice'])
      );
      sp.appendChild(d.createElement('br'));
      p.appendChild(sp);
    }

    var img=d.createElement('img');
    img.style.width='1px';
    img.style.height='1px';
    img.style.border='none';
    img.src='http://ad.linksynergy.com/fs-bin/show?id=7Ne5QoJ1VIE&bids=94348.1'+json['trackId']+'&type=2&subid=0';
    p.appendChild(img);

    return p;
};

JSONP = {
  get:function(term){
    var u = 'http://ax.phobos.apple.com.edgesuite.net'
          + '/WebObjects/MZStoreServices.woa/wa/wsSearch?'
          + ['output='   + 'json',
             'callback=' + 'JSONP.run',
             'country='  + 'JP',
             'media='    + 'music',
             'limit='   + '3',
             'lang='     + 'ja_jp',
             'term='     + encodeURIComponent(term)
          ].join('&');
    var s = d.createElement('script');
    s.charset = 'UTF-8';
    s.id = s.src = u;
    d.body.appendChild(s);
  },
  run:function(json){
    $('its.attr').innerHTML = '';
    if (json.errorMessage || json.resultCount==0){
         // $('its.attr').appendChild(json.errorMessage);
    }else{
        var p = d.createElement('p');
        p.style.textAlign='center';
        var logo = d.createElement('img');
        logo.style.width='128px';
        logo.style.height='32px';
        logo.style.border='none';
        logo.style.padding='2px';
        logo.src='/itunes.png';
        p.appendChild(logo);
        p.appendChild(d.createElement('hr'));
        $('its.attr').style.width='160px';
        $('its.attr').style.fontSize='10px';
        $('its.attr').style.textAlign='left';
        $('its.attr').style.border='solid 1px';
        $('its.attr').style.marginBottom='10px';
        $('its.attr').style.padding='2px';
        $('its.attr').src='/itunes.png';

        $('its.attr').appendChild(p);
        var ul = d.createElement('div');
        for (var i = 0, l = json.resultCount; i < l; i++){
            if (!json.results[i]) continue;
            var li = d.createElement('div');
            li.appendChild(json2list(json.results[i]));
            ul.appendChild(li);
        }
        $('its.attr').appendChild(ul);
        $('its.attr').appendChild(d.createElement('br'));

    }
  }
};

})(document);


function ytthumbnail(data){
  document.getElementById("ytthumbnail").src=data.entry.media$group.media$thumbnail[0].url;
  document.getElementById("ytthumbnail").alt=data.entry.title.$t;
  document.getElementById("ytthumbnail").title=data.entry.title.$t;
}
function nicothumbnail(data){
  document.getElementById("nicothumbnail").src=data.query.results.nicovideo_thumb_response.thumb.thumbnail_url;
  document.getElementById("nicothumbnail").alt=data.query.results.nicovideo_thumb_response.thumb.title;
  document.getElementById("nicothumbnail").title=data.query.results.nicovideo_thumb_response.thumb.title;
}

function searchRelated(data){
  var keyword=new Array();
  for (var i in data) {
    if (data[i]>49 && i!="" && i!="" && i!="" && i!="" && i!="") {keyword.push(i);}
  }
  document.getElementById("related").innerHTML='<h4></h4><!-- '+keyword.join(' ')+' -->';
  var s=document.createElement('script');
//  s.src='http://search.yahooapis.jp/WebSearchService/V1/webSearch?appid=c7dLsIaxg64GNEv1wfGZAYs0SnFJYrp3WB2nyjIewzQ.6CfTZvhzGO2xHpTB&query='+encodeURIComponent(keyword.join(' '))+'&type=any&results=5&site=chordwiki.jpn.org&output=json&callback=showRelated';
  s.src='http://search.yahooapis.jp/WebSearchService/V2/webSearch?appid=c7dLsIaxg64GNEv1wfGZAYs0SnFJYrp3WB2nyjIewzQ.6CfTZvhzGO2xHpTB&query='+encodeURIComponent(keyword.join(' '))+'&type=any&results=5&site=chordwiki.jpn.org&output=json&callback=showRelated';
  document.body.appendChild(s);
}
function showRelated(data){
  if (data.ResultSet.totalResultsReturned>0) {
    var c=0;
    var ul=document.createElement('ul');
    document.getElementById("related").appendChild(ul);
    for (i=0;i<data.ResultSet.Result.length;i++) {
      if (location.href.replace(/&__from=mixi/,'').indexOf(data.ResultSet.Result[i].Url)==-1 && data.ResultSet.Result[i].Url.indexOf('&key=')==-1 && data.ResultSet.Result[i].Url.indexOf('&__from=')==-1 && data.ResultSet.Result[i].Url.indexOf('c=view')>0) {
        if (data.ResultSet.Result[i].Title.indexOf(' - Chord')==-1) {
//          document.getElementById("related").innerHTML+='<li><a href="'+data.ResultSet.Result[i].ClickUrl+'">'+data.ResultSet.Result[i].Title+'</a></li>';
          var li=document.createElement('li');
          li.innerHTML='<a href="'+data.ResultSet.Result[i].ClickUrl+'">'+data.ResultSet.Result[i].Title+'</a>';
          ul.appendChild(li);
        }else{
//          document.getElementById("related").innerHTML+='<li><a href="'+data.ResultSet.Result[i].ClickUrl+'">'+data.ResultSet.Result[i].Title.substr(0,data.ResultSet.Result[i].Title.indexOf(' - Chord'))+'</a></li>';
          var li=document.createElement('li');
          li.innerHTML='<a href="'+data.ResultSet.Result[i].ClickUrl+'">'+data.ResultSet.Result[i].Title.substr(0,data.ResultSet.Result[i].Title.indexOf(' - Chord'))+'</a>';
          ul.appendChild(li);
        }
        c++;
      }
    }
    if (c==0) {document.getElementById("related").innerHTML+='';}
  }else{
    document.getElementById("related").innerHTML+='';
  }
//  document.getElementById("related").innerHTML+='</ul>';
}


// Extra Ad

function extraAd(){
  if (document.body.clientHeight>1800) {
//    document.getElementById('right_column').innerHTML+='<br /><br /><iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=chordwiki-22&o=9&p=14&l=bn1&mode=books-jp&browse=746102&fc1=000000&lt1=&lc1=3366FF&bg1=FFFFFF&f=ifr" marginwidth="0" marginheight="0" width="160" height="600" border="0" frameborder="0" style="border:none;" scrolling="no"></iframe>';
//    document.getElementById('extra_ad').innerHTML='<br /><br /><iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=chordwiki-22&o=9&p=14&l=bn1&mode=books-jp&browse=746102&fc1=000000&lt1=&lc1=3366FF&bg1=FFFFFF&f=ifr" marginwidth="0" marginheight="0" width="160" height="600" border="0" frameborder="0" style="border:none;" scrolling="no"></iframe>';
    document.getElementById('extra_ad').style.display='block';
  }
}

// ================================================================
//  jkl-floating.js ---- JavaScript Kantan Library for Floating Element
//  Copyright 2005 Kawasaki Yusuke <u-suke@kawa.net>
// ================================================================
//  v0.02  2005/06/26  first release
//  v0.03  2005/06/27  moveCenter moveLeft moveRight moveTop moveBottom
// ================================================================

/******************************************************************

    var float1 = new JKL.Floating("messbody","messhead");
    float1.opacity( 1.0, 0.9 );
    float1.moveTo(50,50);
    float1.start();

******************************************************************/

if ( typeof(JKL) == 'undefined' ) JKL = function() {};

//  constructor 

JKL.Floating = function( bodyid, headid ){
    this.__bodyId = bodyid;       // body area id
    this.__headId = headid || bodyid;
    this.__bodyElem = null;       // body area element
    this.__headElem = null;       // head area element
    this.posX = null;
    this.posY = null;
    this.curX = null;          // previous clientX
    this.curY = null;
    this.opacityDefault  = null;
    this.opacityFloating = null;
    this.onDrag = false;        // draging=true, released=false
    this.saveEvents = [];       // backup event on dragging
    this.setAbsolute = false;
    return this;
};

//  class variables

JKL.Floating.VERSION = "0.03";
JKL.Floating.SAVE_EVENTS = [ 
    "onmousedown", "onmousemove", 
    "onmouseout", "onmouseover", 
    "onmouseup", "onselect"
];

//  methods

JKL.Floating.prototype.opacity = function (opa1,opa2) {
    this.opacityDefault = opa1;
    this.opacityFloating  = opa2;
    this.setOpacity( opa1 );
}

JKL.Floating.prototype.setOpacity = function ( opac ) {
    if ( ! opac ) return;
    var elemF = this.getBodyElement();
    elemF.style.filter = "Alpha(opacity:"+(opac*100)+")";   // IE6
    elemF.style.KhtmlOpacity = opac;        // Safari
    elemF.style.MozOpacity = opac;          // Firefox
    elemF.style.opacity = opac;             // CSS2
}

//  move to edge of window

JKL.Floating.prototype.moveLeft = function ( x ) {
    if ( ! x ) x = 0;
    x += document.body.scrollLeft;
    this.moveTo( x, null );
}
JKL.Floating.prototype.moveRight = function ( x ) {
    if ( ! x ) x = 0;
    var elemF = this.getBodyElement();
    if ( ! elemF ) return;    // no such element
    var x = document.body.scrollLeft + document.body.clientWidth 
            - elemF.offsetWidth - x;
    this.moveTo( x, null );
}
JKL.Floating.prototype.moveTop = function ( y ) {
    if ( ! y ) y = 0;
    y += document.body.scrollTop;
    this.moveTo( null, y );
}
JKL.Floating.prototype.moveBottom = function ( y ) {
    if ( ! y ) y = 0;
    var elemF = this.getBodyElement();
    if ( ! elemF ) return;    // no such element
    var y = document.body.scrollTop + document.body.clientHeight 
            - elemF.offsetHeight - y;
    this.moveTo( null, y );
}

//  move to center of window

JKL.Floating.prototype.moveCenter = function () {
    var elemF = this.getBodyElement();
    if ( ! elemF ) return;    // no such element
    var x = document.body.clientWidth  / 2 - elemF.offsetWidth  / 2;
    var y = document.body.clientHeight / 2 - elemF.offsetHeight / 2;
    this.moveTo( x, y );
}

//  move (relative)

JKL.Floating.prototype.moveBy = function (x,y) {
    var elemF = this.getBodyElement();
    if ( ! elemF ) return;    // no such element
    x += elemF.offsetLeft;
    y += elemF.offsetTop;
    this.moveTo( x, y );
}

//  move (absolute)

JKL.Floating.prototype.moveTo = function (x,y) {
    var elemF = this.getBodyElement();
    if ( ! elemF ) return;    // no such element
    if ( typeof(x) == "number" || x ) {
        this.posX = x;
        elemF.style.left = this.posX+"px";
    }
    if ( typeof(y) == "number" || y ) {
        this.posY = y;
        elemF.style.top  = this.posY+"px";
    }
    elemF.style.right = "";
    elemF.style.bottom = "";
}

JKL.Floating.prototype.start = function () {
    var elemH = this.getHeadElement();
    if ( ! elemH ) return;    // no such element
    this.moveBy( 0, 0 );
    var copy = this;
    elemH.onmousedown = function(ev) { copy.dragStart(ev); };
};

JKL.Floating.prototype.stop = function () {
    var elemH = this.getHeadElement();
    if ( ! elemH ) return;    // no such element
    elemH.onmousedown = null;
};

JKL.Floating.prototype.dragStart = function (ev) {
    if ( document.all && ! ev ) ev = window.event;
    if ( this.onDrag ) return;

    this.moveBy( 0, 0 );
    this.setOpacity( this.opacityFloating );

    this.curX = ev.clientX;                 // current cursor
    this.curY = ev.clientY;
    this.onDrag = true;                     // begin drag mode
    this.backupEvent();                     // backup events and cursor style

    var copy = this;
    document.onmousemove = function(ev){ copy.dragMoving( ev ); };
    document.onmouseup   = function(ev){ copy.dragReleased( ev ); };
};

JKL.Floating.prototype.dragMoving = function (ev) {
    if ( document.all && ! ev ) ev = window.event;
    if ( ! this.onDrag ) return;

    this.posX = this.posX + ev.clientX - this.curX;
    this.posY = this.posY + ev.clientY - this.curY;
    this.curX = ev.clientX;                 // current cursor
    this.curY = ev.clientY;

    var elemF = this.getBodyElement();
    elemF.style.left = this.posX+"px";
    elemF.style.top  = this.posY+"px";
};

JKL.Floating.prototype.dragReleased = function (ev) {
    if ( ! this.onDrag ) return;
    this.setOpacity( this.opacityDefault );
    this.restoreEvent();
    this.onDrag = false;                    // released
};

JKL.Floating.prototype.backupEvent = function () {
    for ( var i=0; i<JKL.Floating.SAVE_EVENTS.length; i++ ) {
        var key = JKL.Floating.SAVE_EVENTS[i];
        this.saveEvents[key] = document[key];
        document[key] = null;
    }
};

JKL.Floating.prototype.restoreEvent = function () {
    for ( var i=0; i<JKL.Floating.SAVE_EVENTS.length; i++ ) {
        var key = JKL.Floating.SAVE_EVENTS[i];
        document[key] = this.saveEvents[key];
    }
    this.saveEvents.length = 0;
};

JKL.Floating.prototype.getBodyElement = function () {
    if ( ! this.__bodyElem ) {
        if ( typeof(this.__bodyId) == "object" && this.__bodyId.parentNode ) {
            this.__bodyElem = this.__bodyId;
            this.__bodyId = this.__bodyElem.id;
        } else { 
            this.__bodyElem = document.getElementById( this.__bodyId );
        }
    }
    if ( ! this.setAbsolute ) {
        this.__bodyElem.style.position = "absolute";    // once
        this.setAbsolute = true;
    }
    return this.__bodyElem;
};

JKL.Floating.prototype.getHeadElement = function () {
    if ( ! this.__headElem ) {
        if ( typeof(this.__headId) == "object" && this.__headId.parentNode ) {
            this.__headElem = this.__headId;
            this.__headId = this.__headElem.id;
        } else { 
            this.__headElem = document.getElementById( this.__headId );
        }
    }
    return this.__headElem;
};

