var Tips=new Class({Implements:[Events,Options],options:{onShow:function(A){A.setStyle("visibility","visible");},onHide:function(A){A.setStyle("visibility","hidden");
},showDelay:100,hideDelay:100,className:null,offsets:{x:16,y:16},fixed:false},initialize:function(){var C=Array.link(arguments,{options:Object.type,elements:$defined});
this.setOptions(C.options||null);this.tip=new Element("div").inject(document.body);if(this.options.className){this.tip.addClass(this.options.className);
}var B=new Element("div",{"class":"tip-top"}).inject(this.tip);this.container=new Element("div",{"class":"tip"}).inject(this.tip);var A=new Element("div",{"class":"tip-bottom"}).inject(this.tip);
this.tip.setStyles({position:"absolute",top:0,left:0,visibility:"hidden"});if(C.elements){this.attach(C.elements);}},attach:function(A){$$(A).each(function(D){var G=D.retrieve("tip:title",D.get("title"));
var F=D.retrieve("tip:text",D.get("rel")||D.get("href"));var E=D.retrieve("tip:enter",this.elementEnter.bindWithEvent(this,D));var C=D.retrieve("tip:leave",this.elementLeave.bindWithEvent(this,D));
D.addEvents({mouseenter:E,mouseleave:C});if(!this.options.fixed){var B=D.retrieve("tip:move",this.elementMove.bindWithEvent(this,D));D.addEvent("mousemove",B);
}D.store("tip:native",D.get("title"));D.erase("title");},this);return this;},detach:function(A){$$(A).each(function(C){C.removeEvent("mouseenter",C.retrieve("tip:enter")||$empty);
C.removeEvent("mouseleave",C.retrieve("tip:leave")||$empty);C.removeEvent("mousemove",C.retrieve("tip:move")||$empty);C.eliminate("tip:enter").eliminate("tip:leave").eliminate("tip:move");
var B=C.retrieve("tip:native");if(B){C.set("title",B);}});return this;},elementEnter:function(B,A){$A(this.container.childNodes).each(Element.dispose);
var D=A.retrieve("tip:title");if(D){this.titleElement=new Element("div",{"class":"tip-title"}).inject(this.container);this.fill(this.titleElement,D);}var C=A.retrieve("tip:text");
if(C){this.textElement=new Element("div",{"class":"tip-text"}).inject(this.container);this.fill(this.textElement,C);}this.timer=$clear(this.timer);this.timer=this.show.delay(this.options.showDelay,this);
this.position((!this.options.fixed)?B:{page:A.getPosition()});},elementLeave:function(A){$clear(this.timer);this.timer=this.hide.delay(this.options.hideDelay,this);
},elementMove:function(A){this.position(A);},position:function(D){var B=window.getSize(),A=window.getScroll();var E={x:this.tip.offsetWidth,y:this.tip.offsetHeight};
var C={x:"left",y:"top"};for(var F in C){var G=D.page[F]+this.options.offsets[F];if((G+E[F]-A[F])>B[F]){G=D.page[F]-this.options.offsets[F]-E[F];}this.tip.setStyle(C[F],G);
}},fill:function(A,B){(typeof B=="string")?A.set("html",B):A.adopt(B);},show:function(){this.fireEvent("show",this.tip);},hide:function(){this.fireEvent("hide",this.tip);
}});

/* TOOL TIP  http://demos111.mootools.net/Tips    */

window.addEvent('domready', function() {

/* ---------------------------------------------------------------------------------------------------
    Tips 1 - easy
--------------------------------------------------------------------------------------------------- */
    var Tips1 = new Tips($$('.Tips1'),{
    offsets: {x: 8, y: 10} 

    });
    // you could also write: var Tips1 = new Tips('.Tips1');
    // so you can submit a class or an array of elements


/* ---------------------------------------------------------------------------------------------------
    Tips 2 - with fade
--------------------------------------------------------------------------------------------------- */

var Tips2 = new Tips($$('.Tips2'), {
        className: 'Tips2',
        //fixed: true,
       // offsets: {x: 0, y: 0} ,
        initialize: function() { this.tip.fade('hide'); },
        onShow: function(tip) { tip.fade('in');  },
        onHide: function(tip) { tip.fade('out'); }
    });

/* ---------------------------------------------------------------------------------------------------
    Tips3
--------------------------------------------------------------------------------------------------- */

    var Tips3 = new Tips($$('.Tips3'), {
        className: 'pointDown'
    });

/* ---------------------------------------------------------------------------------------------------
    Tips4
--------------------------------------------------------------------------------------------------- */

  var Tips4 = new Tips($$('.Tips4'));
    $$('.Tips4').each( function(el) {
        var tmp = el.retrieve('tip:native').split('::');
        el.store('tip:title', tmp[0].trim() );
        el.store('tip:text', tmp[1].trim() );
    });

/* ---------------------------------------------------------------------------------------------------
    Tips5
--------------------------------------------------------------------------------------------------- */
    var Tips5 = new Tips($$('#tipsTable td'));

/* ---------------------------------------------------------------------------------------------------
    Tips6
--------------------------------------------------------------------------------------------------- */
    var Tips6 = new Tips($$('#tipsAjaxTable td'));
    Tips6.setOptions({
      //quite a hack.... :(
        onShow: function(tip) {
            new Request.JSON({url: demo_path + "files/info.php", onComplete: function(person) {
                tip.getElement('div.tip-title').set('html', person.age + " " + person.name)
            }}).get({'id': tip.getElement('div.tip-title').get('html') });
        }
    });


}); // domready