var niceTitle;
var titles;
var currentElement = null;
var timer = null;

titles = {
	//calckurs:		[100,"Перевод по курсу\n1\n2\n3"]
};

if (typeof [].push == 'undefined'){
	Array.prototype.push=function(i){
		this[this.length]=i;
	};
};

if (typeof [].splice == 'undefined'){
	Array.prototype.splice=function(i,k)
	{
		for (var z=i; z<this.length-k; z++)
		this[z] = this[z+k];
		this.length = this.length - k;
	};
};

function pushHandler(object, event, handler)
{
  if (typeof object.addEventListener != 'undefined')
    object.addEventListener(event, handler, false);
  else if (typeof object.attachEvent != 'undefined')
    object.attachEvent('on' + event, handler);
  else
  {
    var handlersProp = '_handlerStack_' + event;
    var eventProp = 'on' + event;
    if (typeof object[handlersProp] == 'undefined')
    {
      object[handlersProp] = [];
      if (typeof object[eventProp] != 'undefined')
        object[handlersProp].push(object[eventProp]);
      object[eventProp] = function(e)
      {
        var ret = true;
        for (var i = 0; ret != false && i < object[handlersProp].length; i++)
          ret = object[handlersProp][i](e);
        return ret;
      }
    }
    object[handlersProp].push(handler);
  }
}

function removeHandler(object, event, handler)
{
  if (typeof object.removeEventListener != 'undefined')
    object.removeEventListener(event, handler, false);
  else if (typeof object.detachEvent != 'undefined')
    object.detachEvent('on' + event, handler);
  else
  {
    var handlersProp = '_handlerStack_' + event;
    if (typeof object[handlersProp] != 'undefined')
    {
      for (var i = 0; i < object[handlersProp].length; i++)
      {
        if (object[handlersProp][i] == handler)
        {
          object[handlersProp].splice(i, 1);
          return;
        }
      }
    }
  }
}


if (window.addEventListener) 
{
  	window.addEventListener('load', initNiceTitles, false);
} 
else if (window.attachEvent) 
{
  	window.attachEvent('onload', initNiceTitles);
}


function initNiceTitles()
{
  
  if (!document.createElement)
    return;
	
  niceTitle = document.createElement("div");
  niceTitle.style.position = "absolute";
  niceTitle.style["float"] = "left";
  
  pushHandler(document, "mouseover", showNiceTitle);
  pushHandler(document, "focus", showNiceTitle);
  pushHandler(window, "blur", hideNiceTitle);
};

function findPosition(node)
{
  if(node.offsetParent)
  {
    for(var posX = 0, posY = 0; node.offsetParent; node = node.offsetParent)
    {
      posX += node.offsetLeft;
      posY += node.offsetTop;
    }
    return [posX, posY];
  }
  else
    return [node.x, node.y];
};
/*
function createParagraph(text)
{
  var p = document.createElement("p");
  var span = document.createElement("span");
 // p.className = className;
  text = text.replace(/&euro;/g,'евро');
  text = text.replace(/&pound;/g,'фунтов');
  text = text.split("\n");
  
  if (typeof(text.length) == 'number')
  {
    for (var i=0; i<text.length; i++)
    {
       p.appendChild(document.createTextNode(text[i]));
	   if (i < text.length-1) p.appendChild(document.createElement("br"));
    }
  }
  
  //text0 = p.ParentNode.split("<span>");
  //alert('test: '+text0);
  
  return p;
}
*/

function createParagraph(text)
{
  var p = document.createElement("p");
  var newImage = document.createElement("img");
  var scr, result, destW, destH;
  var re = /\<img\>([\d\w\u0410-\u044F\u0401\u0451\.\/\-]+)\<\/img\>/ig;
//document.write(str.replace(re, "$2, $1"));
  
  //p.className = className;
  text = text.replace(/&euro;/g,'евро');
  text = text.replace(/&pound;/g,'фунтов');
  text = text.split("\n");

  if (typeof(text.length) == 'number')
  {
    for (var i=0; i<text.length; i++)
    {
		//alert(re.exec(text[i]));
		while (result = re.exec(text[i])) {
			if (typeof result[0] != 'undefined'){
				text[i] = text[i].replace(result[0],"");
			};
			if (typeof result[1] != 'undefined'){
				scr=result[1];
				newImage.setAttribute("src", scr);
				
				if(newImage.width>0 && newImage.height>0){
					destW=100;
					destH=newImage.height;
					
					if(destW<newImage.width){
						destH=Math.floor((destW*newImage.height)/newImage.width);
					} else {
						destW=newImage.width;
					};
				};
				
				newImage.setAttribute("width", destW);
				newImage.setAttribute("height", destH);
				//newImage.setAttribute("alt", "");
				//newImage.setAttribute("align", "middle");
				//newImage.align="middle";
				//alert(newImage.innerHTML);
				
				p.appendChild(newImage);			
			};
		};
		
		text0 = text[i].split("_");
		
		for (var j=0; j<text0.length; j++){
			if(text0.length==1){
			    p.appendChild(document.createTextNode(text0[j]));
				//if (i < text.length-1){
				//	p.appendChild(document.createElement("br"));
				//}				
			} else {
				var span = document.createElement("span");
				span.style.color='E9CA45';
				//span.appendChild(document.createTextNode(text0));
			    //p.appendChild(span.appendChild(document.createTextNode(text0[j])));
				if(j>0){
				    p.appendChild(document.createTextNode(text0[j]));
				} else {
				    var newText = document.createTextNode(text0[j]);
				    span.appendChild(newText);
				    p.appendChild(span);				
				}
			};
		};//for
		
		if (i < text.length-1){
			p.appendChild(document.createElement("br"));
		};		
    };//for
  };//if
  
  return p;
};

function showNiceTitle(e)
{
	
  e = e || window.event;
  if (!e || typeof(window.currentElement) == 'undefined')
    return;

  var element = e.target || e.srcElement;
  while (element)
  {
    if (element.nodeType == 1)
    {
      if (typeof(titles[element.className]) != "undefined")
      {
        element.setAttribute("nicetitle", titles[element.className][1]);
        element.setAttribute("nicedelay", titles[element.className][0]);
        break;
      }
    }
    element = element.parentNode;
  }

  if (!element || element == currentElement)
    return;

  if (timer)
  {
    clearTimeout(timer);
    timer = null;
  }

  currentElement = element;
  pushHandler(element, "mouseout", hideNiceTitle);
  pushHandler(element, "blur", hideNiceTitle);

  var pos = findPosition(element);
  niceTitle.className = "nicetitle";
  
  while (niceTitle.firstChild)
  niceTitle.removeChild(niceTitle.firstChild);

  niceTitle.appendChild(createParagraph(element.getAttribute("nicetitle")));
  
  var delay = element.getAttribute("nicedelay");

  if (delay)
    timer = setTimeout("doShowNiceTitle(["+pos[0]+","+pos[1]+"])",delay);
  else
    doShowNiceTitle(pos);
};

function doShowNiceTitle(pos)
{
  timer = null;
 
  niceTitle.style.left = "0px";
  niceTitle.style.top = "0px";
  niceTitle.style.visibility = "hidden";
  setTimeout("makeNiceTitleVisible(["+pos[0]+","+pos[1]+"])", 0);
  document.body.appendChild(niceTitle);
};

function makeNiceTitleVisible(pos)
{
  pos[0] += 15;
  pos[1] += 35;

  var innerWidth = null;
  if (window.innerWidth)
    innerWidth = window.innerWidth;
  else if (document.body && document.body.clientWidth)
    innerWidth = document.body.clientWidth;

  if (innerWidth && niceTitle.offsetWidth && niceTitle.offsetWidth + pos[0] + 30 > innerWidth)
    pos[0] = Math.max(innerWidth - niceTitle.offsetWidth - 30, 30);

  niceTitle.style.left = pos[0] + 'px';
  niceTitle.style.top = pos[1] + 'px';
  niceTitle.style.visibility = "visible";
};

function hideNiceTitle(e)
{
  if (timer)
  {
    clearTimeout(timer);
    timer = null;
  }
  if (typeof(window.currentElement) == 'undefined')
    return;

  if (currentElement && niceTitle.parentNode)
  {
    niceTitle.parentNode.removeChild(niceTitle);
    removeHandler(currentElement, "mouseout", hideNiceTitle);
    removeHandler(currentElement, "blur", hideNiceTitle);
    currentElement = null;
  }
};