﻿//------------------------------>>>
//  XpTooltip.js
//
//  Dependencies: XpCore.js, XpAJAX.js
//------------------------------>>>
function xpDefine(){return false;}
function xpHideTip(evt){
    var target=evt.target();
    while((target.className==null)||(!target.className.match(/(^| )xpHasToolTip( |$)/)))
        target=target.parentNode;
    if(target.tooltip!=null){
//        target.setAttribute("title",target.tooltip.childNodes[0].nodeValue); // Text node implementation
        target.setAttribute("title",target.tooltip.innerHTML);
        target.tooltip.parentNode.removeChild(target.tooltip);
    }
    return false;
}
function xpInitTooltips(win){
    var tips=xpGetElementsByAttribute("class","xpHasToolTip");
    for(var i=0,imax=tips.length;i<imax;i++){
        connect(tips[i],"onmouseover",((!!win)?win.xpShowTip:xpShowTip));
        connect(tips[i],"onmouseout",((!!win)?win.xpHideTip:xpHideTip));
    }
  return true;
}
function xpShowTip(evt){

    if(typeof evt!="object")return false;

    var target=evt.target();
    
    while((!!target)&&((!target.className)||(!/(^| )xpHasToolTip( |$)/.test(target.className))))
        target=target.parentNode;

    var tt=document.createElement("div"); // tt = "tooltip"
    var content=target.getAttribute("title");
    //var contentNode=document.createTextNode(content); // Text node implementation
    
    target.tooltip=tt;
    target.setAttribute("title","");

    if(target.getAttribute("id")!="")
        tt.setAttribute("id",target.getAttribute("id")+"xpToolTip");

    tt.className="xpToolTip";
    //tt.appendChild(contentNode); // Text node implementation

    var posScroll=xpGetScrollingPosition();
    var posMouse=[evt.mouse().page.x,evt.mouse().page.y];

    tt.style.position="absolute";
    tt.style.left=posMouse[0]+10+"px";
    tt.style.top=posMouse[1]+10+"px";
    tt.style.visibility="hidden";

    document.getElementsByTagName("body")[0].appendChild(tt);

    var winSize=xpGetWindowSize();

    if(posMouse[0]-posScroll[0]+10+tt.offsetWidth>winSize[0]-25)
        tt.style.left=posScroll[0]+winSize[0]-25-tt.offsetWidth+"px";
    else
        tt.style.left=posMouse[0]+10+"px";

    if(posMouse[1]-posScroll[1]+10+tt.offsetHeight>winSize[1]-25){
        if(evt.mouse().client.x>(winSize[0]-25-tt.offsetWidth))
            tt.style.top=posMouse[1]-tt.offsetHeight-10+"px";
        else
            tt.style.top=posScroll[1]+winSize[1]-25-tt.offsetHeight+"px";
    }
    else
        tt.style.top=posMouse[1]+10+"px";

    tt.style.visibility="visible";
    
    var onclick=target.getAttribute("onclick"),pos1,pos2,term;
    if(/xpDefine/.test(onclick)){
        onclick=onclick.toString();
        pos1=onclick.indexOf("'");
        pos2=onclick.lastIndexOf("'");
        if(pos1!=-1&&pos2!=-1){
//            XP_TEMPELEMENT=contentNode;        // Text node implementation
//            contentNode.nodeValue="Loading...";
            XP_TEMPELEMENT=tt;
            tt.nodeValue="Loading...";
            term=onclick.substring(pos1+1,pos2);
            xpSendHttpRequest("GET","/airdata/services/defineterms.aspx?terms="+term,true,xpLookupTip);
        }
    }
    return true;
}
function xpLookupTip(){
    if(!XpHttpRequest||!XP_TEMPELEMENT)return false;
    try{
        if(XpHttpRequest.readyState==4){
            if(XpHttpRequest.status==200){
                if(!!XpHttpRequest.responseXML.documentElement){
                    var ary=XpHttpRequest.responseXML.documentElement.getElementsByTagName("Term");
//                    if(ary.length>0){XP_TEMPELEMENT.nodeValue=ary[0].firstChild.data;}   // Text node implementation
//                    else{XP_TEMPELEMENT.nodeValue="< No definition available >";}
                    if(ary.length>0){XP_TEMPELEMENT.innerHTML=ary[0].firstChild.data;}
                    else{XP_TEMPELEMENT.innerHTML="< No definition available >";}
                }
            }
        }
    }catch(ex){this.handleException(ex,"xpSetTip");}
}