var aPPC = new Array();
var iPPC = 0;
var ppc_http_index = 3;
var iBodyWidth = 0;


function ppc(obj, dbi, idx) {
  i = obj.ppcid = ppc_http_index++;
  obj.id = "ppc" + i;

  http_request[i] = _httpReqInit();
  loc = dLoc + "?dbi=" + dbi + '&ppc=' + idx;
//alert(loc);
  _httpReqGo(i, loc, '_ppcEcho(index,data);');
}


function _ppcEcho(index, data) {
  var line;
  line = data.split('#+*##');
  ppc_create(index, line[0], line[1]);
}


function ppc_create(index, ident, text) {
  var doc = window.document,
      ppc = doc.getElementById('ppc' + index),
      idx = ppc.firstChild,
      num = idx.innerHTML,
      dfn = doc.createElement('dfn');

  dfn.innerHTML = "<sup>" + num + ":</sup> " + text;
  dfn.onmousedown = function() { drag(this); };

  ppc.insertBefore(dfn, null);
  idx.onclick = function() { switchClass(this.parentNode, 'on'); };
  idx.ondblclick = function() { ppc2defaultPosition(this); };
  ppc.onclick = null;

  aPPC[iPPC++] = dfn;
  iBodyWidth = document.body.clientWidth;

  ppcSwitch(ppc);
  ppc_setPosition(dfn, idx);
}

function ppc2defaultPosition(idx) {
  setClass(idx.parentNode, 'on');
  ppc_setPosition(idx.nextSibling, idx);
  selectionCollapse();
}

function ppc_setPosition(ppc, idx) {
//  ppc.style.width = "auto";
  var bound_idx = idx.getBoundingClientRect(),
      bound_ppc = ppc.getBoundingClientRect(),
      oBody = document.body,
      margin = parseInt((bound_idx.right - bound_idx.left) / 2) + 5,  // odstup = 5;
      idx_mid_x = parseInt((bound_idx.left + bound_idx.right) / 2),
      width_ppc = bound_ppc.right - bound_ppc.left;    // šírka textu ppc

  // width
  var width = Math.min(width_ppc, parseInt(iBodyWidth / 3)); // max. šírka 33%
  ppc.style.width = width + "px";

//  bound_ppc = ppc.getBoundingClientRect();
  width = ppc.offsetWidth;
//alert((bound_ppc.right - bound_ppc.left) +":"+(ppc.offsetWidth));

  // X
  var width_ppc2 = width_ppc / 2;
  var x_ppc = (idx_mid_x > iBodyWidth / 2) ? idx_mid_x - width - margin : idx_mid_x + margin;
  ppc.style.left = parseInt(x_ppc) + "px";

  // Y
  var y_ppc = oBody.scrollTop + bound_idx.top;
  ppc.style.top = parseInt(y_ppc) + "px";
}

///////////////////////////////////////////////////////////
function ppcSwitch(obj) {
  if (testClass(obj, 'on')) {
    if (iSteps) resetStyle(obj, "on");
  }
  else {
    setStyle(obj, "on");

    _left = obj.offsetLeft;
    _dfn = obj.childNodes[1];
  }
}

function alert_bound(obj, name) {
  var b = obj.getBoundingClientRect();
//  alert(name + ": " + obj.tagName + ":\nleft=" + (tmp=b.left) + ", width=" + (b.right-tmp) + ", top=" + (tmp=b.top) + ", height=" + (b.bottom-tmp));
}


function selectionCollapse () {
  if (window.getSelection) {       
    var selection = window.getSelection ();
    selection.collapseToStart ();
  }
}

////////////////////////////////////////////////
///////////////////// POSUN ////////////////////
////////////////////////////////////////////////

var iMousePosX = 0;
var iMousePosY = 0;
var iSteps;

var iOrigObjTop;
var iOrigObjLeft;

var iDragObjTopDiff;
var iDragObjLeftDiff;
var iMaxLeft;

var oDragObj = null;

window.document.onmousemove = getMouseXYPos;


// Start dragging
function drag(sourceObject) {
  // Remember original object position.
  iOrigObjTop = parseInt(sourceObject.offsetTop);
  iOrigObjLeft = parseInt(sourceObject.offsetLeft);

  iDragObjTopDiff = iMousePosY - iOrigObjTop;
  iDragObjLeftDiff = iMousePosX - iOrigObjLeft;

  oDragObj = sourceObject;
  oDragObj.cursor = "hand"; 
  iSteps = 0;
//  boundSrc = sourceObject.getBoundingClientRect();
//  var oBody = document.body;
  iMaxLeft = document.body.clientWidth - sourceObject.offsetWidth; 

  window.document.onmouseup = drop;
}

// Stop dragging
function drop(e) {
  if (iSteps == 0)
    resetClass(oDragObj.parentNode, "on");

  oDragObj = null;
  window.document.onmouseup = null;
}


// Process mouse movement
function getMouseXY(posX, posY) {  // MousePosition
  iMousePosX = posX;
  iMousePosY = posY;

  // Move dragging object
  if (oDragObj != null) {
    x = Math.min(iMaxLeft, Math.max(0, iMousePosX - iDragObjLeftDiff));
    y = Math.max(0, iMousePosY - iDragObjTopDiff);
    oDragObj.style.top = y + "px";
    oDragObj.style.left = x + "px";
    iSteps++;

    selectionCollapse();
  }
}

// Mouse movement event handler
function getMouseXYPos(e) {
  if (!e) var e = window.event;
  var document_body = document.body;

  getMouseXY(e.clientX + document_body.scrollLeft, e.clientY + document_body.scrollTop);

  return true;
}
