/**  
 * @praam <String>containerElId=" ____waiting____随机数" 指定一个容器的id  
 * @param <String>styleClassName 容器的css样式类  
 * @param <String>innerHTML ＝"<img alt='running...' src='/images/waiting.gif' /> "  内容  
 * @param <String>anchor ="down"  停放位置 ["down","up","left","right","center"];  
 * @param <Number>gap =2与参照节点位置的间距  
 */  
function WaitingTip (options){   
    if(!options){   
             options = {   
             containerElId: null,   
             styleClassName: null,   
             innerHTML:null,   
             anchor:null,   
             gap:null  
      }   
    }   
    var id = options.containerElid ||" ____waiting" + Math.floor(Math.random() * 1000000);   
    this.getWaitEl = function(){   
        return document.getElementById(id);   
    }   
       
    var anchor = options.anchor ? options.anchor.toLowerCase() : "down" ;   
    this.getAnchor = function(){   
        return anchor;   
    }   
       
    var gap = options.gap || 2;   
    this.getGap = function(){   
        return gap;   
    }   
       
    var init = function(){   
        var div = document.createElement("div")    
        div.id = id;   
        div.style.position = "absolute";   
        div.style.display = "none";   
        if(options.styleClassName)div.className = styleClassName;               
        document.body.appendChild(div);   
        if(options.innerHTML){   
            div.innerHTML = options.innerHTML;   
        }   
        else{   
            var waitingImg = document.createElement("img");   
            waitingImg.src = "/images/waiting.gif";   
            waitingImg.alt = "running...";   
            div.appendChild(waitingImg);   
        }   
        searchingEl  = div;   
    }   
    init();   
}   
  
/**  
 *获取某个HTML Element绝对位置  
 *@private  
 */  
WaitingTip.prototype.GetAbsoluteLocation = function (element)   
{   
    if ( arguments.length != 1 || element == null )   
    {   
        return null;   
    }   
    var offsetTop = element.offsetTop;   
    var offsetLeft = element.offsetLeft;   
    var offsetWidth = element.offsetWidth;   
    var offsetHeight = element.offsetHeight;   
    while( element = element.offsetParent )   
    {   
        offsetTop += element.offsetTop;   
        offsetLeft += element.offsetLeft;   
    }   
    return { absoluteTop: offsetTop, absoluteLeft: offsetLeft,   
        offsetWidth: offsetWidth, offsetHeight: offsetHeight };   
}   
       
/**  
 *隐藏  
 *@public  
 */  
WaitingTip.prototype.hide = function(){   
    this.getWaitEl().style.display = "none";   
}       
       
       
/**  
 *显示  
 *@public  
 *@param <String> relativelyElId 参照节点的id  
 *@param <String>anchor  默认为初始化设置时值  
 */  
WaitingTip.prototype.show = function(relativelyEl,anchor){   
    var p = this.GetAbsoluteLocation(relativelyEl);   
    var waitEl = this.getWaitEl();   
    var gap = this.getGap();   
    var _anchor = anchor || this.getAnchor();   
    waitEl.style.display = "block";   
    switch(_anchor){   
        case "down":   
            waitEl.style.top = p.absoluteTop + p.offsetHeight + gap + "px";   
            waitEl.style.left = p.absoluteLeft + "px";   
            break;   
        case "right":   
            waitEl.style.top = p.absoluteTop + "px";   
            waitEl.style.left = p.absoluteLeft + p.offsetWidth + gap +  "px";               
            break;   
        case "left":   
             waitElpos = this.GetAbsoluteLocation(waitEl);   
            waitEl.style.top = p.absoluteTop + "px";   
            waitEl.style.left = p.absoluteLeft - gap - waitElpos.offsetWidth +  "px";                           
            break;   
        case "up":   
             waitElpos = this.GetAbsoluteLocation(waitEl);   
            waitEl.style.top = p.absoluteTop - gap -  waitElpos.offsetHeight +  "px";   
            waitEl.style.left = p.absoluteLeft +  "px";                
            break;   
        case "center":   
            try{   
               waitElpos = this.GetAbsoluteLocation(waitEl);   
              waitEl.style.top = p.absoluteTop  + Math.floor((p.offsetHeight - waitElpos.offsetHeight)  / 2) +  "px";   
              waitEl.style.left = p.absoluteLeft +  Math.floor((p.offsetWidth  - waitElpos.offsetWidth)  / 2) + "px";                         
            }   
            catch(error){   
                waitEl.style.top = p.absoluteTop  + Math.floor(p.offsetHeight  / 2) +  "px";   
                waitEl.style.left = p.absoluteLeft +  Math.floor(p.offsetWidth   / 2) + "px";                         
            }   
            break;   
    }   
} 