YAHOO.namespace('ACE.F2E.widget');
YAHOO.ACE.F2E.widget.Tip = function(dModule,sTriggerClassName,sTipClassName,oConfig) {
    var oComponent = this;
    if(typeof(oConfig)=='undefined'){oConfig = {};};
    oComponent.config = {};
    oComponent.config.iTimeout = ((oConfig.iTimeout!=null)?oConfig.iTimeout*1000:1000);
    oComponent.config.iSpeed = ((oConfig.iSpeed!=null)?oConfig.iSpeed:0.5);
    oComponent.config.aTipSize = ((oConfig.aTipSize!=null)?oConfig.aTipSize:[20,28]);
    oComponent.config.sTipSizeUnit = ((oConfig.sTipSizeUnit!=null)?oConfig.sTipSizeUnit:'em');
    oComponent.config.bIsAnim = ((oConfig.bIsAnim!=null)?oConfig.bIsAnim:true);
    var bMouseOver = false;
    var oTimer;
    var dTip;
    var dLast;
    oComponent.render = function() {
        dTip = document.createElement('div');
        document.body.appendChild(dTip);
        YUD.setStyle(dTip,'width',oComponent.config.aTipSize[0] + oComponent.config.sTipSizeUnit);
        YUD.setStyle(dTip,'height',oComponent.config.aTipSize[1] + oComponent.config.sTipSizeUnit);
        YUD.setStyle(dTip,'position','absolute');
        YUD.setStyle(dTip,'width','0');
        YUD.setStyle(dTip,'height','0');
        YUD.setStyle(dTip,'display','none');
        YUD.setStyle(dTip,'overflow','hidden');
        YUD.addClass(dTip,sTipClassName);
        YUD.setXY(dTip,[-500,-500]);
        YUE.on(dTip,'mouseover',onTipMouseOver);
        YUE.on(dTip,'mouseout',onTipMouseOut);
        YMI.addListener(dModule,'mouseover',onTriggerMouseOver,'class',sTriggerClassName,false,1);
        YMI.addListener(dModule,'mouseout',onTriggerMouseOut,'class',sTriggerClassName,false,1);
    };
    var hideTip = function() {
        clearTimeout(oTimer);
        if(bMouseOver) {return;}
        if(oComponent.config.bIsAnim == true){
            var oAttribute = {width:{to:0},height:{to:0}};
            var oAnim = new YAHOO.util.Anim(dTip,oAttribute,oComponent.config.iSpeed,YAHOO.util.Easing.easeInStrong);
            oAnim.onComplete.subscribe(function(){dTip.style.display = 'none';});
            oAnim.animate();
        }
        else {
            YUD.setStyle(dTip,'width','0');
            YUD.setStyle(dTip,'height','0');
            dTip.style.display = 'none';
        };
    };
    var onTriggerMouseOver = function(oEvent) {
        bMouseOver = true;
        clearTimeout(oTimer);
        var dTrigger = oEvent.target;
        if(dLast != null && dLast != dTrigger && dTip.style.display == 'block'){
            dLast = dTrigger;
            var aRegion = YUD.getRegion(dTrigger);
            var dContent = YUD.getElementsByClassName(sTipClassName,'div',dTrigger.parentNode.parentNode)[0];
            dTip.innerHTML = (typeof(dContent)!='undefined')?dContent.innerHTML:'';
            YUD.setX(dTip,aRegion['right']);
            YUD.setY(dTip,aRegion['top']);
            return false;
        };
        if(YUD.getStyle(dTip,'display') == 'none') {
            dLast = dTrigger;
            var aRegion = YUD.getRegion(dTrigger);
            dContent = YUD.getElementsByClassName(sTipClassName,'div',dTrigger.parentNode)[0];
            if(typeof(dContent) == 'undefined'){dContent = YUD.getElementsByClassName(sTipClassName,'div',dTrigger.parentNode.parentNode)[0];};
            dTip.innerHTML = (typeof(dContent)!='undefined')?dContent.innerHTML:'';
            YUD.setStyle(dTip,'display','block');
            YUD.setX(dTip,aRegion['right']);
            YUD.setY(dTip,aRegion['top']);
            if(oComponent.config.bIsAnim == true){
                var oAttribute = {
                    width:{from:0,to:oComponent.config.aTipSize[0],unit:oComponent.config.sTipSizeUnit},
                    height:{from:0,to:oComponent.config.aTipSize[1],unit:oComponent.config.sTipSizeUnit}
                };
                var oAnim = new YAHOO.util.Anim(dTip,oAttribute,oComponent.config.iSpeed,YAHOO.util.Easing.easeOutStrong);
                oAnim.animate();
            }
            else {
                YUD.setStyle(dTip,'width',oComponent.config.aTipSize[0] + oComponent.config.sTipSizeUnit);
                YUD.setStyle(dTip,'height',oComponent.config.aTipSize[1] + oComponent.config.sTipSizeUnit);
            }
        };
    };
    var onTriggerMouseOut = function(oEvent) {
        bMouseOver = false;
        if(oComponent.config.bIsAnim){
            oTimer = setTimeout(hideTip,oComponent.config.iTimeout);
        }
        else {
            hideTip();
        };
    };
    var onTipMouseOver = function(oEvent) {
        bMouseOver = true;
    };
    var onTipMouseOut = function(oEvent) {
        bMouseOver = false;
        if(oComponent.config.bIsAnim){
            oTimer = setTimeout(hideTip,oComponent.config.iTimeout);
        }
        else {
            hideTip();
        };
    };
}; 



