/*
*/
(function () {
/**
* YTracks
*
* Copyright (C) 2008 Yahoo Japan
* Dual Licensed under th MIT and GPL Licenses.
*
*/
var __version__ = 0.1;
if (typeof YTracks != 'undefined') {
if (__version__ <= YTracks.version) return;
} else {
var YTracks = window.YTracks = function() {};
}
/**
* Original Source; jQuery(jquery.com)
*/
var ua = navigator.userAgent.toLowerCase();
YTracks.browser = {
version: (ua.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [])[1],
safari: /webkit/.test(ua),
opera: /opera/.test(ua),
msie: /msie/.test(ua) && !/opera/.test(ua),
mozilla: /mozilla/.test(ua) && !/(compatible|webkit)/.test(ua),
konqueror: /konqueror/.test(ua),
khtml : /khtml/.test(ua)
};
(function(){
this.version = __version__;
this.prefix = 'yahoo-tracks-';
this.isReady = false;
this.created = new Date();
this.trackerURL = '';
this.targetId = '';
this.uuid = '';
this.clickUrl = '';
this.label ='';
this.targetWindow = '_self';
this.__ready__ = [];
this.__widget__ = {};
this.__elem__ = null;
/************** Utilities *****************/
this.escape = function(source,type) {
if(typeof source != 'string') return source;
switch (type) {
case 'js' :
return source.replace(/\\/g,'\\\\').replace(/"/g,'\\"')
.replace(/'/g,"\\'").replace(/\//g,'\\/');
case 'url' :
return encodeURIComponent(source);
case 'html' :
default :
return source.replace(
/(?:&)(?!(?:[a-z0-9]{2,7}|#[0-9]{2,5}|#x[0-9a-f]{2,5});)/gi,
'&'
).replace(//g,'>').replace(/"/g,'"')
.replace(/'/g,''').replace(/`/,'`');
}
}
this.each = function(args, callback, obj) {
if(args.length == undefined || args.length == 0) return callback.call(obj,args);
var result = [];
for(var i in args) result.push(callback.call(obj,args[i]));
return result;
}
// getElementById
this.$ = function(elem) {
return (typeof elem == 'string') ? document.getElementById(elem) : elem;
}
// getElementsByClassName
this.$c = function(name, tag, node) {
if (node == null) node = document;
if (tag == null) tag = '*';
var elems = node.getElementsByTagName(tag);
var pattern = new RegExp('(?:^|\\s)' + name + '(?:\\s|$)');
var found = [];
YTracks.each(elems, function(elem) {
if(typeof elem == 'object' && pattern.test(elem.className)) found.push(elem);
});
return found;
}
/************** Core *****************/
this.init = function() {
if (!YTracks.isReady) {
YTracks.isReady = true;
YTracks.each(YTracks.__ready__,function(fn) {
if (fn['fn'])
fn['fn'].call(document,fn['args']);
delete fn;
});
YTracks.__ready__ = null;
// Prepare Tracking
YTracks.event.add(window, 'beforeunload', YTracks.ping,false);
// beforeunload だけだったら失敗するときがあるから念のため
YTracks.event.add(window, 'unload', YTracks.ping,false);
YTracks.prepare();
}
if (document.removeEventListener)
document.removeEventListener("DOMContentLoaded", YTracks.init, false );
YTracks.__elem__ = document.createElement('img');
YTracks.__elem__.setAttribute('style','visibility: hidden; width:1px; height: 1px;');
return this;
}
this.ready = function(callback,callback_args) {
bindReady();
if(YTracks.isReady)
callback.call(document,callback_args);
else
YTracks.__ready__.push({fn : callback, args: callback_args});
return this;
}
this.register = function(args) {
if(!this.__widget__[args.name]) this.__widget__[args.name] = [];
var count = this.__widget__[args.name].length;
if(args.singleton && count != 0) return this;
args.id = YTracks.prefix + args.name + '-' + count;
var widget = new YTracks.widget(args);
this.__widget__[args.name].push(widget);
return this;
}
this.load = function() {
for(var label in YTracks.__widget__) {
var targets = YTracks.$c(YTracks.prefix + label, 'div', document.body);
if (targets == '') continue;
for(var i = 0, length = YTracks.__widget__[label].length; i < length; i++) {
var widget = YTracks.__widget__[label][i];
var cloneTarget = targets[i].cloneNode(false);
cloneTarget.innerHTML = widget.tag();
targets[i].parentNode.replaceChild(cloneTarget, targets[i]);
}
}
return this;
}
this.write = function() {
for(var label in YTracks.__widget__) {
for(var i = 0, length = YTracks.__widget__[label].length; i < length; i++) {
var widget = YTracks.__widget__[label][i];
document.write('
');
document.write(widget.tag());
document.write('
');
}
}
return this;
}
this.prepare = function() {
// Tracking iframes
var iframes = document.getElementsByTagName('iframe');
YTracks.each(iframes, function(iframe) {
YTracks.event.add(iframe, 'mouseover', function(evt) {
YTracks.clickUrl = this.src;
try {
YTracks.label = this.contentWindow.document.title;
} catch (e) {
// FIXME:
YTracks.label = '';
}
}, false);
YTracks.event.add(iframe, 'mouseout', function(evt) {
YTracks.clickUrl = '';
YTracks.label = '';
}, false);
});
// Tracking anchors
var anchors = document.getElementsByTagName('a');
YTracks.each(anchors,function(anchor) {
YTracks.event.add(anchor, 'click', function(evt) {
YTracks.clickUrl = this.href;
YTracks.label = this.innerText;
YTracks.ping(evt);
}, false);
});
return this;
}
this.ping = function(evt) {
var id = YTracks.prefix + 'pinged';
var elem = YTracks.__elem__.cloneNode(true);
if (YTracks.$(id)) document.body.removeChild(YTracks.__elem__);
// image tracking
// 実際には label 使ってない
elem.src = YTracks.trackerURL
+ '?ts=' + (new Date()).getTime() // DOM Node Cache 対策
+ '&ref=' + YTracks.escape(document.referrer, 'url')
+ '&url=' + YTracks.escape(document.location, 'url')
+ '&uuid=' + YTracks.escape(YTracks.uuid, 'url')
+ '&label=' + YTracks.escape(YTracks.label, 'url')
+ '&out=' + YTracks.escape(YTracks.clickUrl, 'url');
document.body.appendChild(elem);
// return すると safari でダイアログ出る
}
}).apply(YTracks);
YTracks.event = {
add : function(target, type, fn, useCapture) {
if (typeof target != 'object') return false;
// this を イベント発生元に切り替える。
// (IE でこれやらないと、event 時にイベント発生元の情報を上手くとれない)
var __fn = function(event) { return fn.call(target,event); };
if (target.addEventListener) {
target.addEventListener(type,__fn,useCapture);
return true;
} else if (target.attachEvent) {
return target.attachEvent('on' + type, __fn);
} else {
target['on' + type] = __fn;
}
},
cancel : function (event) {
if(event.preventDefault)
event.preventDefault();
else
event.retunValue = false;
},
special: {
ready : {
setup : function() {
bindReady();
}
}
}
}
YTracks.Timer = function() {};
YTracks.Timer.prototype = {
__context__ : null,
__timer__ : null,
__object__ : null,
__function__ : null,
__handler__ : null,
__arguments__ : [],
__next__ : 0,
init : function (time, obj, fn, args, handle_interval) {
this.__object__ = obj;
this.__function__ = fn;
this.__next__ = time;
this.__arguments__ = args;
if(typeof handle_interval == 'function' ) this.handleInterval = handle_interval;
return this.handleTimer();
},
handleTimer : function() {
if (this.__timer__) {
clearTimeout(this.__timer__);
delete this.__timer__;
}
var self = this;
this.__timer__ = setTimeout(function() {
self.__function__.call(self.__object__, self.__arguments__);
return self.handleTimer();
},this.__next__);
this.__next__ = this.handleInterval(this.__next__);
return this;
},
handleInterval : function(interval) { // default
return interval * Math.LN10;
}
}
YTracks.widget = function(args) {
for(var label in args) this[label] = YTracks.escape(args[label], 'html');
return this;
}
YTracks.widget.prototype = {
objectId : function() {
return this.id + '-object';
},
embedId : function() {
return this.id + '-embed';
},
tag : function() {
return (this.type == 'flash') ? this.flash() : this.image();
},
image : function() {
return [
''
].join(' ');
},
flash : function() {
var trans_obj = (this.transparent) ? '' : '';
var trans_emb = (this.transparent) ? 'wmode="transparent" ' : '';
return [
''
].join('');
}
}
/**
* Original Source: jQuery
*/
var readyBound = false;
function bindReady() {
if (readyBound) return;
readyBound = true;
if(YTracks.browser.msie || YTracks.browser.safari || YTracks.browser.konqueror){ (function() {
try {
if(YTracks.browser.msie || document.readyState != 'loaded' && document.readyState != 'complete')
document.documentElement.doScroll('left');
} catch (e){
return setTimeout(arguments.callee, 50);
}
YTracks.init();
})();
} else if(document.addEventListener) {
document.addEventListener('DOMContentLoaded', YTracks.init, false);
}
// fail back
YTracks.event.add(window, 'load', YTracks.init);
}
})();
YTracks.ready(function(args){
YTracks.trackerURL = 'http:\/\/parts.logoole.yahoo.co.jp\/parts\/trace';
YTracks.uuid = 'f31b940c03a3f19f4d750c643db1b748';
var timer = (new YTracks.Timer()).init(5000,YTracks,YTracks.ping,null);
}, []).register({
name: 'widget',
type: 'flash',
signleton: true,
width: '160px',
height: '345px',
scriptAccess: 'sameDomain',
transparent: true,
loop: false,
vars: 'visit_id=f31b940c03a3f19f4d750c643db1b748&user_id=0&pattern=3&owner_name=su-Z&owner_image_url=http%3A%2F%2Fproxy.f4.ymdb.yahoofs.jp%2Fmingle%2F44cdd21cz572094ca%2Fprofile%2F__tn_%2Fb111.jpg%3Fmg4cN6IBzSpNwqyz&owner_profile_url=http%3A%2F%2Flogoole.yahoo.co.jp%2Fprofile%3Fuser_id%3D22569&host=http://parts.logoole.yahoo.co.jp',
path: 'http:\/\/i.yimg.jp\/images\/tracks\/swf\/parts.swf'
}).write();