/*
http://www.kryogenix.org/code/browser/nicetitle/
Thanks to Stuart Langridge
Adapte par Didier
view nicetitle.css
*/

var niceTitleObj = {
	CURRENT_NICE_TITLE: null,
	//append url to nicetitle box ?
	displayURL:false,
	init :function (){
		niceTitleObj.makeNiceTitles();
	},
    makeNiceTitles : function () {
        if (!document.createElement || !document.getElementsByTagName) return;
        /*
        // add namespace methods to HTML DOM; this makes the script work in both
        // HTML and XML contexts.
        if(!document.createElementNS)
        {
            document.createElementNS = function(ns,elt) {
                return document.createElement(elt);
            }
        }
    */
        if( !document.links )
        {
            document.links = document.getElementsByTagName("a");
        }
        for (var ti=0;ti<document.links.length;ti++) {
            var lnk = document.links[ti];
            if (lnk.title) {
                lnk.setAttribute("nicetitle",lnk.title);
                lnk.removeAttribute("title");
                common.addEvent(lnk,"mouseover",niceTitleObj.showNiceTitle);
                common.addEvent(lnk,"mouseout",niceTitleObj.hideNiceTitle);
                common.addEvent(lnk,"focus",niceTitleObj.showNiceTitle);
                common.addEvent(lnk,"blur",niceTitleObj.hideNiceTitle);
                 common.addEvent(lnk,"mousemove",niceTitleObj.moveNiceTitle);
            }
        }
        var instags = document.getElementsByTagName("ins");
        if (instags) {
        	for (var ti=0;ti<instags.length;ti++) {
            	var instag = instags[ti];
            	if (instag.dateTime) {
                	var strDate = instag.dateTime;
                	var dtIns = new Date(strDate.substring(0,4),parseInt(strDate.substring(4,6)-1),strDate.substring(6,8),strDate.substring(9,11),strDate.substring(11,13),strDate.substring(13,15));
                	instag.setAttribute("nicetitle","Added on "+dtIns.toString());
                	common.addEvent(instag,"mouseover",niceTitleObj.showNiceTitle);
                	common.addEvent(instag,"mouseout",niceTitleObj.hideNiceTitle);
                	common.addEvent(instag,"focus",niceTitleObj.showNiceTitle);
                	common.addEvent(instag,"blur",niceTitleObj.hideNiceTitle);
                	common.addEvent(instag,"mousemove",niceTitleObj.moveNiceTitle);
            	}
        	}
        }
    },
    findPosition : function ( oLink ) {
  		if( oLink.offsetParent ) {
    		for( var posX = 0, posY = 0; oLink.offsetParent; oLink = oLink.offsetParent ) {
      			posX += oLink.offsetLeft;
      			posY += oLink.offsetTop;
    		}
    		return [ posX, posY ];
  		} else {
    		return [ oLink.x, oLink.y ];
  		}
	},
    showNiceTitle : function (e) {
        if (niceTitleObj.CURRENT_NICE_TITLE){
        	 niceTitleObj.hideNiceTitle(niceTitleObj.CURRENT_NICE_TITLE);
        }
        if (!document.getElementsByTagName) return;
        /*
        if (window.event && window.event.srcElement) {
            lnk = window.event.srcElement
        } else if (e && e.target) {
            lnk = e.target
        }
        */
        var lnk = window.event ? window.event.srcElement : e ? e.target : null;
        
        if (!lnk) return;
        if (lnk.nodeType == 3) {
            // lnk is a textnode -- ascend parents until we hit a link
            lnk = niceTitleObj.getParent(lnk,"A");
        }
        if (!lnk) return;
        nicetitle = lnk.getAttribute("nicetitle");
        if(!nicetitle){
        	//bug si image au lieu d'un texte dans le lien
			//lnk est l'image et non le lien
        	lnk = niceTitleObj.getParent(lnk,"A");
        	nicetitle = lnk.getAttribute("nicetitle");
			if(!nicetitle){
				return false;	
			}
        } 
        //var d = document.createElementNS(XHTMLNS,"div");
        var d= document.createElement('div');
        d.className = "nicetitle";
        tnt = document.createTextNode(nicetitle);
        //pat = document.createElementNS(XHTMLNS,"p");
        var pat= document.createElement('p');
        pat.className = "titletext";
        pat.appendChild(tnt);
        d.appendChild(pat);

        if (lnk.href && niceTitleObj.displayURL ) {
            tnd = document.createTextNode(lnk.href);
            //pad = document.createElementNS(XHTMLNS,"p");
            pad = document.createElement("p");
            pad.className = "destination";
            pad.appendChild(tnd);
            d.appendChild(pad);
        }

        STD_WIDTH = 300;
        if (lnk.href && niceTitleObj.displayURL) {
            h = lnk.href.length;
        } else {
        	h = nicetitle.length;
        }
        if (nicetitle.length) {
          t = nicetitle.length;
        }
        h_pixels = h*6;
        t_pixels = t*10;

        if (h_pixels > STD_WIDTH) {
            w = h_pixels;
        } else if ((STD_WIDTH>t_pixels) && (t_pixels>h_pixels)) {
            w = t_pixels;
        } else if ((STD_WIDTH>t_pixels) && (h_pixels>t_pixels)) {
            w = h_pixels;
        } else {
            w = STD_WIDTH;
        }

        d.style.width = w + 'px';

        /*
        mx = lnk.offsetLeft;
        my = lnk.offsetTop;
        */
        mpos = niceTitleObj.findPosition(lnk);
        mx = mpos[0];
        my = mpos[1];
        //xy = niceTitleObj.getMousePosition(e);
        //mx = xy[0]; my = xy[1];

        d.style.left = (mx+15) + 'px';
        d.style.top = (my+35) + 'px';
        if (window.innerWidth && ((mx+w) > window.innerWidth)) {
            d.style.left = (window.innerWidth - w - 25) + "px";
        }
        if (document.body.scrollWidth && ((mx+w) > document.body.scrollWidth)) {
            d.style.left = (document.body.scrollWidth - w - 25) + "px";
        }

        document.getElementsByTagName("body")[0].appendChild(d);

        niceTitleObj.CURRENT_NICE_TITLE = d;
    },
    findPosition : function ( oLink ) {
      if( oLink.offsetParent ) {
        for( var posX = 0, posY = 0; oLink.offsetParent; oLink = oLink.offsetParent ) {
          posX += oLink.offsetLeft;
          posY += oLink.offsetTop;
        }
        return [ posX, posY ];
      } else {
        return [ oLink.x, oLink.y ];
      }
    },
	hideNiceTitle : function (e) {
    	if (!document.getElementsByTagName) return;
    	if (niceTitleObj.CURRENT_NICE_TITLE) {
        	document.getElementsByTagName("body")[0].removeChild(niceTitleObj.CURRENT_NICE_TITLE);
        	niceTitleObj.CURRENT_NICE_TITLE = null;
    	}
	},
	moveNiceTitle : function (e) {
		var t = window.event ? window.event.srcElement : e ? e.target : null;
		if(niceTitleObj.CURRENT_NICE_TITLE) {
            d=niceTitleObj.CURRENT_NICE_TITLE;
            mpos = niceTitleObj.findPosition(d);
        	mx = mpos[0];
            w=d.offsetWidth;
            newmx=document.body.scrollLeft+e.clientX-20;
            d.style.left= newmx + 'px';
            d.style.top=document.body.scrollTop+e.clientY+20+ 'px';
            if (window.innerWidth && ((newmx+w) > window.innerWidth)) {
                d.style.left = (window.innerWidth - w - 25) + "px";
            }
            if (document.body.scrollWidth && ((newmx+w) > document.body.scrollWidth)) {
                d.style.left = (document.body.scrollWidth - w - 25) + "px";
            }
		}
		return null;
	},
	getParent : function (el, pTagName) {
		if (el == null)
			return null;
		else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase())	// Gecko bug, supposed to be uppercase
			return el;
		else
			return niceTitleObj.getParent(el.parentNode, pTagName);
	}
}
common.addEvent(window,'load',niceTitleObj.init);





