/* */ (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 [ '', '' + trans_obj, '', '', '', '', '', '' ].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();