/* Author: Techocraft, Uroš Renko Dependencies: Prototype library 1.6+ Module: Hints Description: Use for any kind of hint in html. */ var TcHint = Class.create( { body: "undefined", overlay: "undefined", container: "undefined", box: "undefined", hint: "undefined", maxsize: 400, timer_enabled: false, timer_id: 0, sleep_id: 0, interval: 10, // 1000 miliseconds delay: 300, time: 0, sizeable: true, autosize: false, opacity: 1, fade_out: true, fade_delay: 300, fade_step: function () { var k = (this.fade_delay / this.interval); if (k>0) { return (100 / k); } else { return 10; } }, overlayColor: "#000000", debug: true, visible: false, initialize: function(selector) { if (!document.getElementsByTagName) { // no elements in document return; } if (!selector) { // default css selector for calendar hints selector = "td.event"; } var hints = $$(selector); if (!hints) { // no hints by css selector found in document return; } hints.each( function(hint) { hint.onmouseover = function (event) { objTcHint.stop_timer(); objTcHint.show(this,event); return false; }; hint.onmouseout = function (event) { objTcHint.hide(this); return false; } } ) var objBody = $(document.getElementsByTagName("body").item(0)); var objOverlay = $('tc-hint-overlay'); if (objOverlay==null) { objOverlay = $(document.createElement("div")); objOverlay.setAttribute('id','tc-hint-overlay'); } objOverlay.hide(); objBody.appendChild(objOverlay); if (this.debug) { var objDebug = $(document.createElement("div")); objDebug.setAttribute('id','tc-hint-debug'); objDebug.show(); objOverlay.appendChild(objDebug); } var objContainer = $('tc-hint-container'); if (objContainer==null) { objContainer = $(document.createElement("div")); objContainer.setAttribute('id','tc-hint-container'); } objContainer.onmouseover = function () { objTcHint.stop_timer(); return false; }; objContainer.onmouseout = function () { objTcHint.hide(); return false; }; objContainer.hide(); objBody.appendChild(objContainer); var objBox = $('tc-hint-box'); if (objBox==null) { objBox = $(document.createElement("div")); objBox.setAttribute('id','tc-hint-box'); } objContainer.appendChild(objBox); var objHint = $('tc-hint'); if (objHint==null) { objHint = $(document.createElement("div")); objHint.setAttribute('id','tc-hint'); } objBox.appendChild(objHint); this.body = objBody; this.overlay = objOverlay; this.container = objContainer; this.box = objBox; this.hint = objHint; if (this.debug) { this.debug = objDebug; } }, isIE: function() { return /msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent); }, getOpacityStyle: function() { return '-ms-filter: alpha(opacity=' + (this.opacity*100) + '); filter: alpha(opacity=' + (this.opacity*100) + '); -moz-opacity: ' + this.opacity + '; opacity: ' + this.opacity + ';'; }, show: function(objSrcHint,event) { if (!objSrcHint) { return; } objTcHint.delay_counter = objTcHint.delay; if (this.debug) { } this.hint.innerHTML = ''; $(objSrcHint).childElements('hint').each( function (node) { objTcHint.hint.innerHTML += node.innerHTML; } ); /* this.overlay.setStyle('position: absolute; left: 0px; top: 0px; width: 100%; height: ' + pHeight + 'px; background-color: ' + this.overlayColor + '; z-index: 190; -ms-filter: alpha(opacity=' + (this.opacity*100) + '); filter: alpha(opacity=' + (this.opacity*100) + '); -moz-opacity: ' + this.opacity + '; opacity: ' + this.opacity + ';'); this.container.setStyle('position: absolute; left: 0px; top: 0px; width: 100%; height: ' + pHeight + 'px; z-index: 200;'); this.box.setStyle('margin-top: ' + (scrollTop + (pageHeight - imgHeight) / 2) + 'px; width: ' + imgWidth + 'px;'); */ var _top; var _left; /* if (this.isIE()) { event = window.event; _left = event.screenX; _top = event.screenY + 10; } else { _left = event.pointerX(); _top = event.pointerY() + 10; } */ var pos = objSrcHint.cumulativeOffset(); _left = pos[0] + objSrcHint.getWidth() - 2; _top = pos[1]; var _pos = this.hint.cumulativeOffset(); if (((_pos[0] + objSrcHint.getWidth() - 2)!=_left) || (_pos[1]!=_top)) { this.container.setStyle('position: absolute; left: ' + _left + 'px; top: ' + _top + 'px; z-index: 200;'); } this.container.show(); //this.overlay.show(); }, hide: function() { this.start_timer(); }, timeout: function() { this.timer_id = setInterval("objTcHint.on_timer();",this.interval); }, on_timer: function() { if (this.delay>this.time) { if (this.fade_out) { if ((this.delay-this.fade_delay)