        var XHTMLNS = "http://www.w3.org/1999/xhtml";

        var CURRENT_NICE_TITLE;

        var browser = new Browser();
		var links;
		var instags;
		var imgs;

		//*** Portfolio section
		
		// 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);}} 

		function initNiceTitleAndShowCtrValue(ctr, ctrText){
			ctr.setAttribute('nicetitle', ctrText.value.replace("\n",""));
			showNiceTitle(ctr);
		}

		function initNiceTitleAndShowText(ctr, text){
			ctr.setAttribute('k', text.replace("\n",""));
			showNiceTitle(ctr);
		}

		//*** End - Portfolio section

        function makeNiceTitles() {    

	        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);}}    
        
		    links = document.getElementsByTagName("a");

	        for (var ti=0;ti<links.length;ti++) {
		        var lnk = links[ti];

		        if (lnk.title) {
			        lnk.setAttribute("nicetitle",lnk.title);
			        lnk.removeAttribute("title"); 

			        addEvent(lnk,"mouseover", showNiceTitle);
			        addEvent(lnk,"mouseout", hideNiceTitle);

			        addEvent(lnk,"focus", showNiceTitle);
			        addEvent(lnk,"blur", hideNiceTitle);
		        }
	        }
	        

		    imgs = document.getElementsByTagName("img");

	        for (var ti=0;ti<imgs.length;ti++) {
		        var img = imgs[ti];

		        if (img.title) {
			        img.setAttribute("nicetitle",img.title);
			        img.removeAttribute("title"); 

			        addEvent(img,"mouseover", showNiceTitle);
			        addEvent(img,"mouseout", hideNiceTitle);

			        addEvent(img,"focus", showNiceTitle);
			        addEvent(img,"blur", hideNiceTitle);
		        }
	        }
	        
		    fonts = document.getElementsByTagName("font");

	        for (var ti=0;ti<fonts.length;ti++) {
		        var font = fonts[ti];

		        if (font.title) {
			        font.setAttribute("nicetitle", font.title);
			        font.removeAttribute("title"); 

			        addEvent(font,"mouseover", showNiceTitle);
			        addEvent(font,"mouseout", hideNiceTitle);

			        addEvent(font,"focus", showNiceTitle);
			        addEvent(font,"blur", hideNiceTitle);
		        }
	        }	        

	        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());            
				        addEvent(instag,"mouseover",showNiceTitle);            
				        addEvent(instag,"mouseout",hideNiceTitle);            
				        addEvent(instag,"focus",showNiceTitle);            
				        addEvent(instag,"blur",hideNiceTitle);        
			        }    
		        }    
	        }
        }

        function findPosition( 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 ];  
	        }
        }

		function removeHTMLTags(str){
			var strInputCode = str;
		
		 	strInputCode = strInputCode.replace(/&(lt|gt);/g, function (strMatch, p1){return (p1 == "lt")? "<" : ">";});
		
			return strInputCode.replace(/<\/?[^>]+(>|$)/g, "");
		}
		
		// Modification have been made to support html nicetitle content
		function showNiceTitle(e) {
		    if (CURRENT_NICE_TITLE) hideNiceTitle(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;
		    }  else {
				lnk = e;
			}
		    
		    if (!lnk) return;
		    
		    if(!lnk.nicetitle){
			    if ((lnk.nodeType == 3 || lnk.nodeType == 1) && (lnk.type!="checkbox")) {
			        
			    	if(getParent(lnk,"A") == null || getParent(lnk,"A") == getParent(getParent(lnk,"A"), "A")){
			    		lnk = getParent(lnk, "font");
			    	} else {
						lnk = getParent(getParent(lnk,"A"), "A");		    	
			    	}
			    }
		    }
		    
		    if (!lnk) return;
		    
		    nicetitle = lnk.getAttribute("nicetitle");
		    
		    h = nicetitle.length;
		    
		    //-- This part is not from the original version
		    //-- Some modifications have been made to show html elements
		    if(h > 0){
			    var d = document.createElementNS(XHTMLNS,"div");
			    d.className = "nicetitle";
			    tnt = document.createElementNS(XHTMLNS, "div");
			    tnt.innerHTML =	nicetitle.replace("\\n", "<br />");
			    
			    pat = document.createElementNS(XHTMLNS,"p");
			    pat.className = "titletext";
			    pat.appendChild(tnt);
			    d.appendChild(pat);
			
			    if (nicetitle.length) {
			      t = nicetitle.length;
		
				  nicetitle = nicetitle.replace("\\n", "<br />")
			      var lines = nicetitle.split("<br />");
			      var maxLength = 0;
				
			      for(var i = 0; i < lines.length; i++) {
						var line = lines[i];
						line = removeHTMLTags(line);
						if(line.length > maxLength) {	
						  maxLength = line.length;
						}
			      }
		
			      t = maxLength;
			    }
		
			    h_pixels = h*6; 
			    t_pixels = t*9;
			    w = t_pixels;
		
			    d.style.width = t_pixels + 'px';    
			
			    mpos = findPosition(lnk);
			    mx = mpos[0];
			    my = mpos[1];
			
			    d.style.left = (mx+15) + 'px';
			    d.style.top = (my+15) + '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);
			    
			    CURRENT_NICE_TITLE = d;    
		    }
		}


        	
        function hideNiceTitle(e) {    
		        if (!document.getElementsByTagName) 
			        return;    
        			
		        if (CURRENT_NICE_TITLE) {        
			        document.getElementsByTagName("body")[0].removeChild(CURRENT_NICE_TITLE);        
			        CURRENT_NICE_TITLE = null;    
		        }
        }

        // Add an eventListener to browsers that can do it somehow.// Originally by the amazing Scott Andrew.
        function addEvent(obj, evType, fn){ 
			
	         if (obj.addEventListener){    
		         obj.addEventListener(evType, fn, false);    
		         return true;  
	        } else if (obj.attachEvent){	
		        var r = obj.attachEvent("on"+evType, fn);    
		        return r;  
	        } else {	
		        return false;  
	        }
        }

        function getParent(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 getParent(el.parentNode, pTagName);
        }

        function getMousePosition(event) {  
	        if (browser.isIE) {    
			        x = window.event.clientX + document.documentElement.scrollLeft      + document.body.scrollLeft;    
			        y = window.event.clientY + document.documentElement.scrollTop      + document.body.scrollTop;  }  
        			
	        if (browser.isNS) {    
			        x = event.clientX + window.scrollX;    
			        y = event.clientY + window.scrollY;  
	        }  

	        return [x,y];
        }

        // Determine browser and version.
        function Browser() {
	        // blah, browser detect, but mouse-position stuff doesn't work any other way  
	        var ua, s, i;  
	        this.isIE    = false;  
	        this.isNS    = false;  
	        this.version = null;  
	        ua = navigator.userAgent;  
	        s = "MSIE";  
        	
	        if ((i = ua.indexOf(s)) >= 0) {    
		        this.isIE = true;    
		        this.version = parseFloat(ua.substr(i + s.length));    
		        return;  } 
        	
	        s = "Netscape6/";  
	        if ((i = ua.indexOf(s)) >= 0) {    
		        this.isNS = true;    
		        this.version = parseFloat(ua.substr(i + s.length));    
		        return;  }
        	
	        s = "Gecko";  
	        if ((i = ua.indexOf(s)) >= 0) {    
		        this.isNS = true;    
		        this.version = 6.1;    
		        return;  }
        }     
           
        function createDef(Word, Def){
            this.Word = Word;
            this.Def = Def;
        }

		function ie_getElementsByTagName(str) {
			if (str=="*")
				return document.all;
			else
				return document.all.tags(str)
		}

		