/**
 * domready.js
 * 
 * Cross browser mozilla's 'onDOMContentLoaded' implementation.
 * Executes a function when the dom tree is loaded without waiting for images.
 * 
 * Based on +Element.Events.domready+ from Mootools open source project, 
 * this tiny javascript library adds the emulated 'DOMContentLoaded' functionality.
 * 
 * Features:
 *   - No dependency on external libraries
 *   - Compatible with Prototype.js 
 * 
 * Tested browsers (Windows):
 *   - IE 7 (XP standalone)
 *   - IE 6 SP2
 *   - Firefox 2.0.0.4
 *   - Opera 9.21
 * 
 * Tested browsers (Mac OS X):
 *   - Safari 2.0.4
 *   - Firefox 2.0.0.4
 *   - Mac Opera 9.21
 *   - Mac IE 5.2.3
 *
 * Copyright (c) 2007 Takanori Ishikawa.
 * License: MIT-style license.
 * 
 * MooTools Copyright:
 * copyright (c) 2007 Valerio Proietti, <http://mad4milk.net>
 *
 *
 * See Also:
 *
 *   mootools 
 *   http://mootools.net/
 *   
 *   The window.onload Problem - Solved!
 *   http://dean.edwards.name/weblog/2005/09/busted/
 *   
 *   [PATCH] Faster onload for Event.onload
 *   http://dev.rubyonrails.org/ticket/5414
 *   Changeset 6596: Support for "DOMContentLoaded" event handling (prototype.js event branch)
 *   http://dev.rubyonrails.org/changeset/6596
 *
 */

if (typeof Event == 'undefined') Event = new Object();

/*
 * Registers function +fn+ will be executed when the dom 
 * tree is loaded without waiting for images. 
 * 
 * Example:
 *
 *  Event.domReady.add(function() {
 *    ...
 *  });
 *
 */
Event.domReady = {
  add: function(fn) {
    
    //-----------------------------------------------------------
    // Already loaded?
    //-----------------------------------------------------------
    if (Event.domReady.loaded) return fn();
    
    //-----------------------------------------------------------
    // Observers
    //-----------------------------------------------------------
    var observers = Event.domReady.observers;
    if (!observers) observers = Event.domReady.observers = [];
    // Array#push is not supported by Mac IE 5
    observers[observers.length] = fn;
    
    //-----------------------------------------------------------
    // domReady function
    //-----------------------------------------------------------
    if (Event.domReady.callback) return;
    Event.domReady.callback = function() {
      if (Event.domReady.loaded) return;
      
      Event.domReady.loaded = true;
      if (Event.domReady.timer) {
        clearInterval(Event.domReady.timer);
        Event.domReady.timer = null;
      }
      
      var observers = Event.domReady.observers;
      for (var i = 0, length = observers.length; i < length; i++) {
        var fn = observers[i];
        observers[i] = null;
        fn(); // make 'this' as window
      }
      Event.domReady.callback = Event.domReady.observers = null;
    };
    
    //-----------------------------------------------------------
    // Emulates 'onDOMContentLoaded'
    //-----------------------------------------------------------
    var ie = !!(window.attachEvent && !window.opera);
    var webkit = navigator.userAgent.indexOf('AppleWebKit/') > -1;
    
    if (document.readyState && webkit) {
      
      // Apple WebKit (Safari, OmniWeb, ...)
      Event.domReady.timer = setInterval(function() {
        var state = document.readyState;
        if (state == 'loaded' || state == 'complete') {
          Event.domReady.callback();
        }
      }, 50);
      
    } else if (document.readyState && ie) {
      
      // Windows IE 
      var src = (window.location.protocol == 'https:') ? '://0' : 'javascript:void(0)';
      document.write(
        '<script type="text/javascript" defer="defer" src="' + src + '" ' + 
        'onreadystatechange="if (this.readyState == \'complete\') Event.domReady.callback();"' + 
        '><\/script>');
      
    } else {
      
      if (window.addEventListener) {
        // for Mozilla browsers, Opera 9
        document.addEventListener("DOMContentLoaded", Event.domReady.callback, false);
        // Fail safe 
        window.addEventListener("load", Event.domReady.callback, false);
      } else if (window.attachEvent) {
        window.attachEvent('onload', Event.domReady.callback);
      } else {
        // Legacy browsers (e.g. Mac IE 5)
        var fn = window.onload;
        window.onload = function() {
          Event.domReady.callback();
          if (fn) fn();
        }
      }
      
    }
    
  }
}
/* getElementsByClassNameAndTagName */

document.getElementsByClassNameAndTagName = function(className, parentElement, tagName) {
	if (Prototype.BrowserFeatures.XPath) {
		return $(parentElement).getElementsByClassName(className);
	} else {
		var children = $(parentElement).getElementsByTagName(tagName || '*');
		var elements = [], child;
		for (var i = 0, length = children.length; i <length; i++) {
			child = children[i];
			if (Element.hasClassName(child, className)) elements.push(Element.extend(child));
		}
		return elements;
	}
}

/* from au builder script
--------------------------------------------------------*/

function switchSub(object){
	if(object.getElementsByTagName('ul').length > 0){
		fUl = object.getElementsByTagName('ul')[0];
		if(fUl.style['visibility'] != 'visible'){
			fUl.style['visibility'] = 'visible'
		}else{
			fUl.style['visibility'] = 'hidden'
		}
	}
}


function switchTabs(tabNum, parentId) {
	var boxId = parentId.id;
	var tabs = document.getElementById(boxId).getElementsByTagName("li");
	for (var i = 0; i < tabs.length; i++) {
		var thisTab = tabs[i];
		if ((thisTab.id != "")) {
			document.getElementById(boxId+"_content"+i).style.display = "none";
			if (i == tabNum) {
				thisTab.className = "active";
				document.getElementById(boxId+"_content"+i).style.display = "block";
			} else if (i == (tabNum+1)) {
				thisTab.className = "active-right";
			} else if (i == (tabNum-1)) {
				thisTab.className = "active-left";
			} else {
				thisTab.className = "";
			}
		}
	}
}

function _switchTabs(tabNum, parentId) {
	var tabs = document.getElementById(parentId.id).getElementsByTagName('li');
	var boxId = parentId.parentNode.id;
	for (var i = 0; i < tabs.length; i++) {
		var thisTab = tabs[i];
		if ((thisTab.id != '')) {
			document.getElementById(boxId+'-content'+i).style.display = 'none';
			if (i == tabNum) {
				if (i == 0) {
					thisTab.className = 'active first';
				} else {
					thisTab.className = 'active';
				}
				document.getElementById(boxId+'-content'+i).style.display = 'block';
			} else {
				thisTab.className = '';
			}
		}
	}
}

/* SBM insert関数*/

function insertSbmCount(sbmData){
	var html = [];
	var total = 0;
	for(var i = 0; i < sbmData.length; i++){
		html.push('<li class="icon_bookmark_' + sbmData[i].id + '">');
		html.push('<a href="' + sbmData[i].add_url + '" target="_blank" class="attribute">');
		html.push( sbmData[i].name + 'に追加' );
		html.push('</a>');
		html.push('<a href="' + sbmData[i].view_url + '" target="_blank" class="attribute">');
		html.push('('+ sbmData[i].count +'人)' );
		html.push('</a>');
		html.push('</li>');
	
		total = total + Number(sbmData[i].count);
	}
	
	//insertHTML
	$('toolbox_sbm_header').getElementsByTagName('ul')[0].innerHTML = html.join("\n");
	$('toolbox_sbm_header').getElementsByTagName('span')[0].innerHTML = total;

}

function load_bookmarkcount(){
	var s = document.createElement("script");
	var myurl = document.URL.replace( /(\?|#).*$/, '' );
        var title = escape(document.title);
	var url = "http://api.japan.cnet.com/api.php?srv=meta_bc&url=" + myurl + "&title=" + title + "&op=json&cb=insertSbmCount";
	s.type = "text/javascript";
	s.charset = "utf-8";
	s.src = url;
	document.body.appendChild(s);
}
/* ZD Gloval header on ZDNET
------------------------------*/


function zdGlobalChangeDisp(tickrNum){
	$("zdticker").innerHTML = ('<a href="' + storyList[tickrNum].url + '" target="_blank" style="display: none;">' + storyList[tickrNum].title + '</a>');
	$("zdticker").getElementsByTagName("A")[0].style.display = "inline";
	tickrNum++;
	if(storyList.length <= tickrNum){ tickrNum = 0;}
	setTimeout("zdGlobalHideDisp("+ tickrNum+")", 10000);
}

function zdGlobalHideDisp(tickrNum){
	$("zdticker").getElementsByTagName("A")[0].style.display = "none";
	setTimeout("zdGlobalChangeDisp("+ tickrNum+")", 1000);
}

Event.observe(window, 'load', function(){
	$("zdnetheadline").getElementsByTagName("li")[0].innerHTML = "on ZDNet:";
	zdGlobalChangeDisp(0);
});/*記事一覧のhighlight */

Event.domReady.add(function() {
	//var lateststory = document.getElementsByClassNameAndTagName("latest-story", "col1", "div");
	var lateststory = document.getElementsByClassName("latest-story");
	
	for ( i=0; i<lateststory.length; i++){
	    lateststory[i].onmouseover = 
	        function (){
	            this.style.backgroundColor= "#efefef";
	            this.style.cursor= "pointer";
	        };
	    lateststory[i].onmouseout = 
	        function (){
	            this.style.backgroundColor= "#fff";
	            this.style.cursor= "normal";
	        };
	    Event.observe(lateststory[i], "mouseup", function(evt){test=evt;
		    if(evt.findElement("A") == undefined){
	               window.location = this.getElementsByTagName("h2")[0].getElementsByTagName("A")[0].href;
		    }

	    });

	
	}
});
/*　記事右側にbuilderの特集を表示するのに使うJS
-------------------------------------------*/

function showArticleRight(){
	var cntParagraph=0;
	var tmpchildren = $('block_story').childNodes;
	var children = [];
	for(var i = 0; i< tmpchildren.length; i++){
		if(tmpchildren[i].nodeType == 1 ) {
			children.push( tmpchildren[i]);
		}
	}

	for(var i = 0; i< children.length; i++){
		if(children[i].tagName == "P" || children[i].tagName == "H4"|| children[i].tagName == "H3" ) {
			cntParagraph++;
		}else{
			cntParagraph = 0;
		}
		if( cntParagraph > 2 ){
			var addNode = document.createElement('div');
			addNode.id = "box_article_right";
			addNode.style.clear = "right";

			var html= [];

			html.push('<div class="box_article_right_inner">');
			html.push('		<div class="right_title">最新特集<a href="/sp/">【一覧】</a></div>');

			
			for(var j = 0; j < jsonLatestFeature.length; j++){
				var imgtag = "";
				if(jsonLatestFeature[j].image){
					imgtag = '<img src="' + jsonLatestFeature[j].image + '" />';
				}
				html.push('<div class="right_item"><a href="' + jsonLatestFeature[j].url + '">' + imgtag + '<br />'+ jsonLatestFeature[j].title + '</a></div>');
			}
			
			if( jsonLatestRanking.length > 0){
				html.push('		<div class="right_title" style="margin-top:10px;">人気記事<a href="/rank/">【一覧】</a></div>');
				
				for(var j = 0; j < jsonLatestRanking.length; j++){
					html.push('<div class="right_item"><span class="icon_star" style="display:block; float: left; height: 16px; letter-spacing: -0.1em; font-weight:bold; color: #a00;padding: 4px 0 0 0; text-align: center; width: 16px; font-size: 11px;">' + jsonLatestRanking[j].count + '</span>:<a href="' + jsonLatestRanking[j].url + '">'+ jsonLatestRanking[j].title + '</a></div>');
				}
			}
			
			html.push('</div>');

			addNode.innerHTML = html.join("\n");


			$('block_story').insertBefore( addNode , children[i-2]);
			break;
		}
	}
}


function addStar(element, count){
	if(navigator.userAgent.indexOf("Firefox") > -1 || navigator.userAgent.indexOf("MSIE 7.0") > -1){
		element.parentNode.parentNode.className='icon_star_1up';
	}
	var strNode = document.createTextNode(count + "人目として登録中");
	element.removeChild(element.firstChild);
	element.appendChild(strNode);
	window.document.vote.submit();
}
/* for tooltip */

//Event.observe(window, "load", initTooltip);

function initTooltip(){
//start = new Date;

	var itemList = document.getElementsByClassNameAndTagName("style_tooltip_parent", "col1");

	$A(itemList).each( function(el){
		el.onmouseover = function(){ showTooltip(this); };
		el.onmouseout = function(){ hideTooltip(this); };
	});
//alert(new Date() -start);

}
function showTooltip(el){
	el.getElementsByClassName("style_tooltip_child")[0].style.display = "block";
}


function hideTooltip(el){
	el.getElementsByClassName("style_tooltip_child")[0].style.display = "none";
}//タレコミボタン

var PullDown = Class.create();

PullDown.prototype ={
	initialize: function(opts){
		this.trigger = opts.trigger
		this.untrigger = opts.untrigger;
		this.target = opts.target;
		
		Element.observe(this.trigger.element , this.trigger.event , function(){
			this.pullDown();
		}.bind(this));
	},
	pullDown: function(){
		Element.stopObserving(this.trigger.element);
		//new Effect.SlideDown(this.target.element , {duration: 0.5, afterFinish: function(){ this.pullDownAfter(); }.bind(this) });
		this.target.element.show();
		this.pullDownAfter();
	},
	pullDownAfter: function(){
		Element.observe(this.untrigger.element , this.untrigger.event , function(){
			this.pullUp();
		}.bind(this));
	},
	pullUp: function(){
		Element.stopObserving(this.untrigger.element);
//		new Effect.SlideUp(this.target.element , {duration: 0.5, afterFinish: function(){ this.pullUpAfter(); }.bind(this) });
		this.target.element.hide();
		this.pullUpAfter();

	},
	pullUpAfter: function(){
		Element.observe(this.trigger.element , this.trigger.event , function(){
			this.pullDown();
		}.bind(this));
	}

};
new function(){

	var popupElement = [
		{
			"invoke" : "toolbox_sbm_header",
			"target" : "toolbox_sbm_header_popup"
		},
		{
			"invoke" : "toolbox_clip_header",
			"target" : "toolbox_clip_header_popup"
		}
	]

	Event.domReady.add(function() {
	
		popupElement.each( function(e){
			if($(e.invoke) != undefined){
				Event.observe($(e.invoke), "mouseover", function(evt){
					$(e.target).style.left = "auto";
				});
				Event.observe($(e.invoke), "mouseout", function(evt){
					$(e.target).style.left = "-9999px";
				});
			}
		});
	});

}