  var bubbleBaseImageId = 'BubbleBaseImage';
  var bubbleDefaultTextRaw = "";
  var bubbleDefaultImageRaw = "";
  var bubbleImage = null;
  var bubbleText = null;
  var bubbleArr = new Array(100);
  var bubbleArrCount = 0;
  
  function SavePosition(obj)
  {
  //try{
  //alert("Start save");
  
     var backImage = document.getElementById(bubbleBaseImageId);
     var backImageLeft = findPosX(backImage)+1;
     var backImageTop = findPosY(backImage);

     var left = obj.style.pixelLeft - backImageLeft;
     var top = obj.style.pixelTop - backImageTop;
     //alert("save left " + obj.style.pixelLeft + " - " + backImageLeft + " = " + left + "\nTop " + obj.style.pixelTop + " - " + backImageTop + " = " + top);
     obj.firstChild.setAttribute('value',left.toString() + ',' + top.toString());
     
     
    //}
    //catch(e){}
  }


  function SetPosition(obj)
  {
  var backImage = document.getElementById(bubbleBaseImageId);
  var backImageLeft = findPosX(backImage)+1;
  var backImageTop = findPosY(backImage);
  var offsetLeft = 0;
  var offsetTop = 0;
  if(obj.getAttribute("IsAuthoring")=='false') {offsetLeft = -2; offsetTop=-24;}

  try{
     var left = parseInt(obj.getAttribute('pLeft')) + backImageLeft;
     var top = parseInt(obj.getAttribute('pTop')) + backImageTop;
     obj.parentElement.style.left = left + offsetLeft;
     obj.parentElement.style.top = top + offsetTop;
     SavePosition(obj.parentElement);
     }
     catch(e){}
  
     
  bubbleArr[bubbleArrCount] = new Array(3);
  bubbleArr[bubbleArrCount][0] = obj.getAttribute("ID");
  bubbleArr[bubbleArrCount][1] = parseInt(obj.getAttribute('pLeft')) + offsetLeft;
  bubbleArr[bubbleArrCount][2] = parseInt(obj.getAttribute('pTop')) + offsetTop;
  bubbleArrCount++;
  }

  function SetPositions()
  {
    try{
      var i,img;
      var backImage = document.getElementById(bubbleBaseImageId);
      var backImageLeft = findPosX(backImage)+1;
      var backImageTop = findPosY(backImage);
      for(i=0;i<bubbleArrCount;i++)
      {
        img = document.getElementById(bubbleArr[i][0]);
        img.parentElement.style.left = bubbleArr[i][1] + backImageLeft;
        img.parentElement.style.top = bubbleArr[i][2] + backImageTop;
        img.parentElement.style.display = "inline";
      }
    }
    catch(e){}
  }

  function ChangeCell(idImage,idText,imgRawId,txtRawId)
  {
    if(bubbleImage==null){ bubbleImage = document.getElementById(idImage); /*bubbleDefaultImageRaw = bubbleImage.innerHTML;*/}
    if(bubbleText==null){ bubbleText = document.getElementById(idText); /*bubbleDefaultTextRaw = bubbleText.innerHTML;*/}
    
    bubbleImage.innerHTML = (document.getElementById(imgRawId)).innerHTML;
    if(bubbleImage.firstChild.getAttribute("_set")!="") bubbleImage.firstChild.setAttribute('src',bubbleImage.firstChild.getAttribute('_src')); // tohle tady je kvuli tomu aby se obrazek natahoval az ve chvili kdy se ma skutecne zobrazit.
    
    bubbleText.innerHTML = (document.getElementById(txtRawId)).innerHTML;
  }
  
  function bblChangeCellToDefault()
  {
    bubbleImage.innerHTML = (document.getElementById("bubbleDefaultImageRaw")).innerHTML;
    if(bubbleImage.firstChild.getAttribute("_set")!="") bubbleImage.firstChild.setAttribute('src',bubbleImage.firstChild.getAttribute('_src')); // tohle tady je kvuli tomu aby se obrazek natahoval az ve chvili kdy se ma skutecne zobrazit.
    bubbleText.innerHTML = (document.getElementById("bubbleDefaultTextRaw")).innerHTML;
  }

	function findPosX(obj)
	{
		var curleft = 0;
		if (obj.offsetParent)
		{
			while (obj.offsetParent)
			{
				curleft += obj.offsetLeft;
				obj = obj.offsetParent;
			}
		}
		else if (obj.x)
			curleft += obj.x;
		return curleft;
	}

	function findPosY(obj)
	{
		var curtop = 0;
		if (obj.offsetParent)
		{
			while (obj.offsetParent)
			{
				curtop += obj.offsetTop;
				obj = obj.offsetParent;
			}
		}
		else if (obj.y)
			curtop += obj.y;
		return curtop;
	}

  // This code allows any absolutely positioned element
  // with the custom attribute dragEnabled to be dragged.
  var elDragged = null  // Element to drag.

  function doMouseMove() {
    // Check whether mouse button is down and whether
    // an element is being dragged.
    if ((1 == event.button) && (elDragged != null)) {
        // Move the element.
        // Save mouse's position in the document
        var intTop = event.clientY + document.body.scrollTop;
        var intLeft = event.clientX + document.body.scrollLeft;
        // Determine what element the mouse is really over.
        var intLessTop  = 0;
        var intLessLeft = 0;
        var elCurrent = elDragged.offsetParent;
        while (elCurrent.offsetParent != null) {
          intLessTop += elCurrent.offsetTop;
          intLessLeft += elCurrent.offsetLeft;
          elCurrent = elCurrent.offsetParent;
        }
        // Set new position.
        elDragged.style.pixelTop =
          intTop  - intLessTop - elDragged.y;
        elDragged.style.pixelLeft =
          intLeft - intLessLeft  - elDragged.x;
        event.returnValue = false;
    }
  }

  function checkDrag(elCheck) {
    // Check whether the mouse is over an element
    // that supports dragging.
    while (elCheck != null) {
        if (null != elCheck.getAttribute("dragEnabled")) 
          return elCheck;
        elCheck = elCheck.parentElement;
    }      
    return null;
  }

  function doMouseDown() {
    // Store element to be dragged.
    var elCurrent = checkDrag(event.srcElement);
    if (null != elCurrent) {
        elDragged = elCurrent;
        // Determine where the mouse is in the element.
        elDragged.x = event.offsetX;
        elDragged.y = event.offsetY;
        var op = event.srcElement;
        // Find real location with respect to element being
        // dragged.
        if ((elDragged != op.offsetParent) &&
              (elDragged != event.srcElement)) {
          while (op != elDragged) {
              elDragged.x += op.offsetLeft;
              elDragged.y += op.offsetTop;
              op = op.offsetParent;
          }
        }
    }
  }

  function doSelectTest() {
    // Don't start text selections in dragged elements.
    return (null == checkDrag(event.srcElement) &&
        (elDragged!=null));
  }

  // Hook up mouse event handlers.
  document.onmousedown = doMouseDown;
  document.onmousemove = doMouseMove;
  // Reset element when mouse button is released.
  document.onmouseup = new Function("elDragged = null;");
  document.ondragstart = doSelectTest;
  document.onselectstart = doSelectTest;

  var id, op = 60, step = -1;

  function Start()
  {
    id = window.setInterval("Move()", 10);
  }

  function Stop()
  {
    window.clearInterval(id);
  }

  function Move()
  {
    op += step;
    if (op < 20) {
        op = 20;
        step = -step;
        };
    if (op > 60) {
        op = 60;
        step = -step;
        };
    document.getElementById.select.filters.Alpha.opacity = op;
  }

