// mp_ツールチップ
//
//<span class="mp_tooltip" id="tip1">&nbsp;</span>
//の形式で呼び出し
//

/* 下準備
------------------------------------- */

//変数の宣言
var mptt_xml_url = '/2012/media/stu/module/tooltip/xml/XML_tooltip.xml';	
var mptt_xml_data,mptt_httpObj,mptt_timerId_1,mptt_timerId_2;
var mptt_target = [],mptt_flg = [],mptt_item = [];
mptt_flg['activetip'] = "";
var mptt_timeout_sec = 10;

//関数呼び出し

function mptt_pre(){
	mptt_httpXmlRequest(mptt_xml_url,'GET','');
	mptt_target = mptt_getByClassName('span','mp_tooltip');
	mptt_setEventListeners();
	mptt_createBox();
}

//イベントセット関数

function mptt_setEventListeners(){
	for(var i= 0; i<mptt_target.length;i++){
		var target = mptt_target[i];
		if(window.addEventListener){
			target.addEventListener('mouseover',mptt_Over,true);
			target.addEventListener('mouseout',mptt_Out,true);
			target.addEventListener('click',mptt_Click,false);
		}else if(window.attachEvent){
			target.attachEvent('onmouseover',mptt_Over);
			target.attachEvent('onmouseout',mptt_Out);
			target.attachEvent('onclick',mptt_Click);
		}
	}
}

//ツールチップのテンプレート作成

function mptt_createBox(){
	var base_obj = document.createElement('div');
	base_obj.id = 'mptt_displayframe';
	var base_layer = document.createElement('div');
	base_layer.id = 'base_layer';
	base_layer.className = 'base_layer';
	var dataframe = document.createElement('div');
	dataframe.id = 'dataframe';
	dataframe.className = 'dataframe';
	var cover_obj = document.createElement('div');
	cover_obj.className = 'mptt_cover';
	cover_obj.innerHTML = '&nbsp;';
	var txt_wrapper = document.createElement('div');
	txt_wrapper.className = 'mptt_txtwrapper';	
	var tit_obj = document.createElement('p');
	tit_obj.className = 'mptt_title';
	var tit_txt = document.createTextNode('title');
	tit_obj.appendChild(tit_txt);
	var info_obj = document.createElement('p');
	var info_txt = document.createTextNode('info');
	info_obj.appendChild(info_txt);
	info_obj.className = 'mptt_info';
	var load_box = document.createElement('div');
	load_box.className = 'loadingImg';
	var load_infobox = document.createElement('span');
//	var load_info = document.createTextNode('読込中...');
	var load_imgbox = document.createElement('p');
	var load_img = document.createElement('img');
	load_img.src = '/2012/media/stu/module/tooltip/img/mozilla_blu.gif';
	load_imgbox.appendChild(load_img);
//	load_infobox.appendChild(load_info);
//	load_box.appendChild(load_infobox);
	load_box.appendChild(load_imgbox);
	dataframe.appendChild(cover_obj);
	txt_wrapper.appendChild(tit_obj);
	txt_wrapper.appendChild(info_obj);
	dataframe.appendChild(txt_wrapper);
	dataframe.appendChild(load_box);
	base_obj.appendChild(dataframe);
	base_obj.style.display = 'none';
	document.body.appendChild(base_obj);
	document.body.appendChild(base_layer);
	return false;
}

/* イベント関数
------------------------------------- */

//マウスオーバー

function mptt_Over(e){
	if(mptt_flg['activetip'] != ""){
			return;
		}else{
	var target;
	if(window.attachEvent){
		target = event.srcElement;
		if(target.tagName == 'IMG'){
			target = target.parentNode;
		}
	}else{
		target = e.currentTarget;
	}
	target.style.backgroundPosition='-14px 0px';
	var targetId = target.id;
	mptt_flg[targetId + '_mouse'] = 'on';
	if(!document.getElementById('dataframe_' + targetId)){
		mptt_timerId_1 = setTimeout(function(){mptt_dispTooltip(targetId)}, 600);
	}else{
		mptt_timerId_1 = setTimeout(function(){mptt_dispTips(targetId)}, 600);
	}
}
}

//マウスアウト

function mptt_Out(e){
	if(mptt_timerId_1){
		clearTimeout(mptt_timerId_1);
	}
	var target;
	if(window.attachEvent){
		target = event.srcElement;
		if(target.tagName == 'IMG'){
			target = target.parentNode;
		}
	}else{
		target = e.currentTarget;
	}
	var targetId = target.id;
	if(document.getElementById('base_layer').style.display == 'block'){
		;
	}else{
	target.style.backgroundPosition='0px 0px';
	}
	mptt_flg[targetId + '_mouse'] = 'out';
}

//クリック

function mptt_Click(e){
	if(mptt_flg['activetip'] != ""){
		return;
	}else{
	var target;
	if(window.attachEvent){
		target = event.srcElement;
		if(target.tagName == 'IMG'){
			target = target.parentNode;
		}
	}else{
		target = e.currentTarget;
	}
	var targetId = target.id;
	if(mptt_timerId_1){
		clearTimeout(mptt_timerId_1);
	}
	if(!document.getElementById('dataframe_' +targetId)){
		mptt_dispTooltip(targetId);
	}else{
		mptt_dispTips(targetId);
	}
	}
}

/* ツールチップ作成・可視化関数
------------------------------------- */

//ツールチップ作成関数、作成したらクローズ用のイベントをセット

function mptt_dispTooltip(targetId){
	if(mptt_timerId_1){
		clearTimeout(mptt_timerId_1);
	}
	var template = document.getElementById('dataframe');
	var newtip = template.cloneNode('true');
	newtip.id='dataframe_' + targetId;
	var newtitle,newinfo;
	for(var i = 0;i<mptt_item.length;i++){
		if(targetId == mptt_item[i].getElementsByTagName('identifier')[0].textContent){
			newtitle = mptt_item[i].getElementsByTagName('title')[0].textContent;
			newinfo = mptt_item[i].getElementsByTagName('data')[0].textContent;
		}else if(targetId == mptt_item[i].getElementsByTagName('identifier')[0].text){
			newtitle = mptt_item[i].getElementsByTagName('title')[0].text;
			newinfo = mptt_item[i].getElementsByTagName('data')[0].text;
		}
	}
	newtip.getElementsByTagName('p')[0].innerHTML = newtitle;
	newtip.getElementsByTagName('p')[1].innerHTML = newinfo;
	newtip.style.display = 'none';
	var theObj = document.getElementById(targetId);
	document.body.appendChild(newtip);
	mptt_disBlock();
	function mptt_disBlock(){
		var basetarget = document.getElementById('base_layer');
		basetarget.style.height = document.body.scrollHeight + 'px';
		basetarget.style.display = 'block';
		var iconpos = document.getElementById(targetId);
		var target = document.getElementById('dataframe_' + targetId);
		var txttarget = mptt_getByClassName('div','mptt_txtwrapper',target.id);
		var imagetarget = mptt_getByClassName('div','loadingImg',target.id);
		target.style.left = mptt_getPosX(iconpos);
		target.style.top = mptt_getPosY(iconpos);
		txttarget[0].style.display = 'none'; 
		target.style.display = 'block';
		mptt_timerId_2 = setTimeout(mptt_disBlock_2, 500); 
		function mptt_disBlock_2(){
			clearTimeout(mptt_timerId_2);
			imagetarget[0].style.display = 'none';
			txttarget[0].style.display = 'block';
			mptt_flg['activetip'] = targetId;
			if(window.addEventListener){
				document.getElementById('base_layer').addEventListener('mouseover',mptt_Closetip,false);
			}else if(window.attachEvent){
				document.getElementById('base_layer').attachEvent('onmouseover',mptt_Closetip);
			}
		}
	}
}

//ツールチップ作成済みの場合に可視化する関数、可視化したらクローズ用のイベントをセット

function mptt_dispTips(targetId){ 
		if(mptt_flg['activetip'] != ""){
			return;
		}else{
		var iconpos = document.getElementById(targetId);
		var target = document.getElementById('dataframe_' + targetId);
		target.style.left = mptt_getPosX(iconpos);
		target.style.top = mptt_getPosY(iconpos);
		var basetarget = document.getElementById('base_layer');
		basetarget.style.height = document.body.scrollHeight + 'px';
		target.style.display = 'block';
		basetarget.style.height = document.body.scrollHeight + 'px';
		basetarget.style.display = 'block';
		if(mptt_flg[targetId + '_mouse']=='off'){
			iconpos.style.backgroundPosition='0px 0px';
			return;
		}
		mptt_flg['activetip'] = targetId;
		if(window.addEventListener){
			basetarget.addEventListener('mouseover',mptt_Closetip,false);
		}else if(window.attachEvent){
			basetarget.attachEvent('onmousover',mptt_Closetip);
		}
		}
	}

// ツールチップクローズ用関数、クローズ後クローズ用のイベントを削除

function mptt_Closetip(e){
	if(mptt_flg['activetip']==""){
		return;
	}
	var target;
 	if(window.attachEvent){
		window.event.cancelBubble = true;	
		target = event.srcElement;
		if(target.tagName == 'img'){
			alert('2');
			target = target.parentNode;
		}
	}else{
		target=e.target;
	}
	if(!target.className){
		return;
	}
	if(target.className != 'base_layer'){
		return;
	}
	var basetarget = document.getElementById('base_layer');
	if(window.addEventListener){
		basetarget.removeEventListener('mouseover',mptt_Closetip,false);
	}else if(window.attachEvent){
		basetarget.detachEvent('onmousover',mptt_Closetip);
	}
	basetarget.style.display = 'none';
	var target = document.getElementById('dataframe_' + mptt_flg['activetip']);
	target.style.display = 'none';
	var targettip = document.getElementById(mptt_flg['activetip']);
	mptt_flg['activetip'] = "";
	targettip.style.backgroundPosition='0px 0px';
}


/* モジュール系
------------------------------------- */

//通信用関数

function mptt_httpXmlRequest(target_url,method){
	try{
		if(window.XMLHttpRequest){
			mptt_httpObj = new XMLHttpRequest();
		}else if(window.ActiveXObject){
			  mptt_httpObj = new ActiveXObject("Microsoft.XMLHTTP");
		}else{
			mptt_httpObj = false;
		}
		}catch(e){
			mptt_httpObj = false;
		}
		if(! mptt_httpObj){
			mptt_httpObjGenerateFail();
		}
	timerId_1 = setInterval('timeoutCheck()',1000);
	mptt_httpObj.open(method,target_url);
	mptt_httpObj.onreadystatechange = function(){
		if(mptt_httpObj.readyState == 4){
				clearInterval(timerId_1);
			if(mptt_httpObj.status == 200){
				mptt_item = mptt_httpObj.responseXML.getElementsByTagName('tip');
				return;
			}else{
				httpError(mptt_httpObj.status + ';' + mptt_httpObj.statusText);
				return false;
			}
		}
	}
	mptt_httpObj.send(null);
}


function mptt_httpObjGenerateFail(){
    return false;
}

function timeoutCheck(){
	mptt_timeout_sec--;
	if(mptt_timeout_sec<=0){
		clearInterval(timerId_1);
		mptt_httpObj.abort();
		return false;
	}
}

function httpError(error){
	;
}


// ツールチップの表示場所を取得

function mptt_getPosition(identifier){
	var target = document.getElementById(identifier);
	var target_x = mp_distooltip.util.getPosX(target);
	var target_y = mp_distooltip.util.getPosY(target);
	target.style.offsetX = target_x + 'px';
	target.style.offsetY = target_y + 'px';
	return;
}


//クラス名からオブジェクトを取得（タグ名、親要素ID名などオプション）

function mptt_getByClassName(tagName,className,targetex){
	var arr = [];
	var target_Obj = [];
	var j = 0;
	if(!targetex){
	arr = document.getElementsByTagName(tagName);
	}else{
	var targetex = document.getElementById(targetex);
	arr = targetex.getElementsByTagName(tagName);	
	}
	for(var i=0;i<arr.length;i++){
		var c_name = arr[i].className;
		if(c_name == className){
			target_Obj[j] = arr[i];
			j++
		}else{
			continue;
		}
	}
	return target_Obj;
}


// 要素のx座標を求めて返す @return {Number} @param {Object} element 要素
 
function mptt_getPosX(element){
	var x = 0;
	for(var e = element; e; e = e.offsetParent){
		x += e.offsetLeft;
	}
	for(e = element.parentNode; e && e != document.body; e = e.parentNode){
		if(e.scrollLeft) x -= e.scrollLeft;
	}
	if(IE='\v'=='v'){
		x+=10;
	}
	return x;
}

// 要素のy座標を求めて返す @return {Number} @param {Object} element 要素

function mptt_getPosY(element){
	var y = 0;
	for(var e = element; e; e = e.offsetParent){
		y += e.offsetTop;
	}
	for(e = element.parentNode; e && e != document.body; e = e.parentNode){
		if(e.scrollTop) y -= e.scrollTop;
	}
	if(IE='\v'=='v'){
		y+=11;
	}
	return y;
}
