//判断兼容性获取event对象
if (document.all) {
	window.attachEvent('onload',init);
	document.attachEvent('onmousemove',moveMouse);
	}
else{
	window.addEventListener('load',init,false);
	document.addEventListener('mousemove',moveMouse,false);
	}

//创建四个对象并设置相关样式
var oIframe = document.createElement("iframe");
var oDv=document.createElement("div");
var dvHdr=document.createElement("div");
var dvBdy=document.createElement("div");
oIframe.className = "oIframe";
oIframe.style.display="none";
oDv.style.position="absolute";

//向oDv里添加oIframe对象然后放到body里面
function init() {
	oDv.appendChild(oIframe);
	document.body.appendChild(oDv);	
}

//设置头部的样式
function defHdrStyle() {
	dvHdr.className = "dvHdr";
	}

//设置内容部分的样式
function defBdyStyle() {
	dvBdy.className = "dvBdy";
	}

function getParam(param,list) {
	var reg = new RegExp('([^a-zA-Z]' + param + '|^' + param + ')\\s*=\\s*\\[\\s*(((\\[\\[)|(\\]\\])|([^\\]\\[]))*)\\s*\\]');
	var res = reg.exec(list);//得到规范list(即curNode.title值)的值
	return res[2];//返回定义的param的值，结合前面调用的方法
}


//判断txt是否符合规则，判断方法是看header,body,[,]在txt里面是否出现，然后返回true或false,注：indexOf返回值如果是-1，则表明查找的值没在指定的对象里面
function checkElemBO(txt) {
	if ((txt.indexOf('header')>-1)&&(txt.indexOf('body')>-1)&&(txt.indexOf('[')>-1)&&(txt.indexOf(']')>-1)) {return true;}
	else {return false;}
	}
	
	
var boxMove;
function moveMouse(e) {
	e?evt=e:evt=event;
	var mobj=evt.target?evt.target:evt.srcElement;//获取鼠标对象
	//CSE.hasbox最开始进此方法是没有值的，所以找不到!CSE.hasbox,即进入下面的判断，下面的循环鼠标事件中会根据判断title属性是否存在header和body作为标识
	if (!mobj.hasbox) {//第一次判断不进此方法，因为没有定义CSE.hasbox属性
		while ((mobj.parentNode) && (!mobj.hasbox)) {
			if (checkElemBO(mobj.title)) {
				//分别用正则表达式把iElem.title的值分解成header和body,此处的header和body即是title里面传递过来的参数识别前缀
				mobj.boHDR=getParam('header',mobj.title);
				mobj.boBDY=getParam('body',mobj.title);
				mobj.title='';//清空对象的title值，为了不让对象以系统默认的title显示方式重复显示
				mobj.hasbox=1;//标识鼠标对象title属性，这个判断可以看出是存在title属性的时候，所以暂时设置成1
			}
			else{
				mobj.title='';//这句话可以屏蔽页面内所有对象的title属性值，可以防止想达到预想效果而设置格式错误而以默认方式显示提示效果
				mobj.hasbox=2;
				}
			mobj=mobj.parentNode;
			}
		}
	
	//这一句很关键，针对table之类的嵌套标签的，如果鼠标在td里面，按理说应该在table里面，但js不这样认为，需要求出他的上一级标签直到有title属性有header和body时退出
	while (mobj.hasbox==2){mobj=mobj.parentNode;} 
	if (mobj.hasbox==1){
		//设置头部和内容部分的样式及给他们赋值，
		var ah,ab;
		if(ab){oDv.removeChild(dvBdy)}
		if(ah){oDv.removeChild(dvHdr)}
		dvHdr.className = "dvHdr";
		dvBdy.className = "dvBdy";
		dvHdr.innerHTML=mobj.boHDR;
		dvBdy.innerHTML=mobj.boBDY;
		ah=false;
		ab=false;	
		oDv.appendChild(dvHdr);
		oDv.appendChild(dvBdy);
		boxMove=true;//先清除以前打开的oDv
		//设置oDv为可见状态，同时设置oDv的显示位置;
		oDv.style.visibility='visible';
		ox=mobj.offX?mobj.offX:10;
		oy=mobj.offY?mobj.offY:10;
		}
	//当鼠标移出对象时
	else if (boxMove){
		mobj=null;
		oDv.style.visibility='hidden';
		}
	
	if (mobj) {
		var bodyScrollTop=document.documentElement&&document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop;
		var bodyScrollLet=document.documentElement&&document.documentElement.scrollLeft?document.documentElement.scrollLeft:document.body.scrollLeft;
		var mouseX=evt.pageX?evt.pageX-bodyScrollLet:evt.clientX-document.body.clientLeft;
		var mouseY=evt.pageY?evt.pageY-bodyScrollTop:evt.clientY-document.body.clientTop;
		var lockY=6;
		var lockX=8;
		mouseY > (SHW()[1]-oDv.offsetHeight)?lockY=-mouseY-lockY+SHW()[1]-oDv.offsetHeight:lockY=lockY;
		mouseX > (SHW()[0]-dvBdy.offsetWidth)?lockX=-mouseX-lockX+SHW()[0]-dvBdy.offsetWidth:lockX=lockX;
		oDv.style.left = bodyScrollLet+mouseX+lockX+6+"px";
		oDv.style.top = bodyScrollTop+mouseY+lockY+4+"px";		
		}
	}

//求内容可见区的实际宽度和实际高度
function SHW() {
	if (document.body && (document.body.clientWidth !=0)){
		var width=document.body.clientWidth;
		var height=document.body.clientHeight;
		}
	if (document.documentElement && (document.documentElement.clientWidth!=0) && (document.body.clientWidth + 20 >= document.documentElement.clientWidth)) {
		var width=document.documentElement.clientWidth;
		var height=document.documentElement.clientHeight;
		
		}
	return [width,height];
	}