/**
 * Javascript misc functions library
 *
 * @package gcms
 * @version 2.0
 * @author Pawel Zmyslowski <hocus@dronet.pl>
 */


G_changeObjectDisplayNiceAnimation = true

G_changeObjectDisplayNiceObject = null
G_changeObjectDisplayNiceShow = null
G_changeObjectDisplayNiceDiffHeight = 0
G_changeObjectDisplayNiceDiffWidth = 0
G_changeObjectDisplayNiceFinalHeight = 0
G_changeObjectDisplayNiceFinalWidth = 0
G_changeObjectDisplayNiceDeltaParameter = 4
G_changeObjectDisplayNiceTimeout = 10
G_changeObjectDisplayNiceFunctionA = 0.6
G_changeObjectDisplayNiceFunctionB = 0.1
G_changeObjectDisplayNiceOldOverflow = null

G_infoMessagesList  = new Array()
G_infoMessagesCount = 3
G_infoHideTime = 0 


function downloadBinder()
{
    window.location='cmd.php?cmd=downloadZipped&id=dbitem:documents.binder&subid=dbitem:documents.binder_document'
}
function px(value)
{
  return value.toString() + 'px'
}
 
function countDiff(old)
{
  var d = new Date()
  diff = d.getTime() - old
  alert(diff.toString())
}

function checkTimeout()
{
  var d = new Date()
  setTimeout("countDiff("+d.getTime().toString()+")",1)
}  

function speedFunction(input,a,b)
{
  if ( ! (input >= 0 && input <= 1 ) )
  {
    // alert ( "Input = " + input.toString() + ", this shouldn't have happened") 
    return 0
  } 
   
  if ( input <= 0.5)
    return a * input + b
  else 
  {
    c = 1 - input
    return speedFunction(c,a,b) 
  }
}

function preventDefault(e)
{
  if ( ! e )
    e = window.event
  if ( e.preventDefault )
     e.preventDefault()
}

function inputOnKeyPress(e)
{
  if ( ! e )
    e = window.event
  if ( e.keyCode == 13 )
  {
//    if ( e.preventDefault )
//      e.preventDefault()
    preventDefault(e)
    e.returnValue = false  
  }
}

function changeObjectInProgress()
{
  return (G_changeObjectDisplayNiceObject != null)
}

function changeObjectDisplayNiceTimer()
{
  var again = true
  var readyWidth = false
  var readyHeight = false
  if ( G_changeObjectDisplayNiceObject == null )
    return;


  if ( G_changeObjectDisplayNiceUseHeight )
  {
    var currentHeight = G_changeObjectDisplayNiceObject.currentHeight
    var positionHeight = currentHeight / G_changeObjectDisplayNiceDiffHeight
    var changeHeight = Math.round(G_changeObjectDisplayNiceDeltaHeight * speedFunction(positionHeight,G_changeObjectDisplayNiceFunctionA,G_changeObjectDisplayNiceFunctionB ))
    if ( changeHeight < 1 )
      changeHeight = 1
    if ( ! G_changeObjectDisplayNiceShow)
      changeHeight = -changeHeight
    var newHeight = currentHeight + changeHeight

    if ( G_changeObjectDisplayNiceShow && newHeight >= G_changeObjectDisplayNiceFinalHeight )
    {
      readyHeight = true
      newHeight = G_changeObjectDisplayNiceFinalHeight        
    }
    if ( ! G_changeObjectDisplayNiceShow && newHeight <= 0 )
    {
      readyHeight = true
      newHeight = 0     
    }
    G_changeObjectDisplayNiceObject.currentHeight = newHeight
    G_changeObjectDisplayNiceObject.style.height = px(newHeight)
  }
  else
    readyHeight = true

///////////////////

  if ( G_changeObjectDisplayNiceUseWidth )
  {
    var currentWidth = G_changeObjectDisplayNiceObject.currentWidth
    var positionWidth = currentWidth / G_changeObjectDisplayNiceDiffWidth
    var changeWidth = Math.round(G_changeObjectDisplayNiceDeltaWidth * speedFunction(positionWidth,G_changeObjectDisplayNiceFunctionA,G_changeObjectDisplayNiceFunctionB ))
    if ( changeWidth < 1 )
      changeWidth = 1
    if ( ! G_changeObjectDisplayNiceShow)
      changeWidth = -changeWidth
    var newWidth = currentWidth + changeWidth

    if ( G_changeObjectDisplayNiceShow && newWidth >= G_changeObjectDisplayNiceFinalWidth )
    {
      readyWidth = true
      newWidth = G_changeObjectDisplayNiceFinalWidth        
    }
    if ( ! G_changeObjectDisplayNiceShow && newWidth <= 0 )
    {
      readyWidth = true
      newWidth = 0     
    }
    G_changeObjectDisplayNiceObject.currentWidth = newWidth
    G_changeObjectDisplayNiceObject.style.width = px(newWidth)
  }
  else
    readyWidth = true


//////////////////////////////

  if ( G_changeObjectDisplayNiceShow && G_changeObjectDisplayNiceScrollOnResize )
  {
    var coords = getXY(G_changeObjectDisplayNiceObject)
    var objectLeft = coords[0]
    var objectTop = coords[1]

    var pageHeight = getInnerHeight()
    var pageWidth = getInnerWidth()
    var scrollX = document.documentElement.scrollLeft
    var scrollY = document.documentElement.scrollTop

    var diffHeight = (objectTop + newHeight) - (pageHeight + scrollY)
    var diffWidth = (objectLeft + newWidth) - (pageWidth + scrollX)

    if ( diffHeight + scrollY > objectTop )
      diffHeight = objectTop - scrollY

    if ( diffWidth + scrollX > objectLeft )
      diffWidth = objectLeft - scrollX


    if ( diffHeight < 0 )
      diffHeight = 0
    if ( diffWidth < 0 )
      diffWidth = 0
//alert("("+objectTop+","+newHeight+") - ("+pageHeight+","+scrollY+")")
    scrollBy(diffWidth, diffHeight)
  }


  if ( readyHeight && readyWidth )
  {
  //alert("koniec " + G_changeObjectDisplayNiceObject.style.height )
    if ( ! G_changeObjectDisplayNiceShow ) 
    {
      G_changeObjectDisplayNiceObject.style.display = "none"
    } 
    else // show
    {
    }
    G_changeObjectDisplayNiceObject.style.overflow = G_changeObjectDisplayNiceOldOverflow
    G_changeObjectDisplayNiceShow = null
    G_changeObjectDisplayNiceDiffHeight = 0
    G_changeObjectDisplayNiceDiffWidth = 0
    G_changeObjectDisplayNiceFinalHeight = 0
    G_changeObjectDisplayNiceFinalWidth = 0
    G_changeObjectDisplayNiceOldOverflow = null

    if ( G_changeObjectDisplayNiceSetAutoSize )
    {
      G_changeObjectDisplayNiceObject.style.width = "auto"
      G_changeObjectDisplayNiceObject.style.height = "auto"
    }   
    if ( G_changeObjectDisplayNiceClearInnerHTML )
    {
      G_changeObjectDisplayNiceObject.innerHTML = ""
    }
    if ( G_changeObjectDisplayNiceRemoveObject )
    {
      G_changeObjectDisplayNiceObject.parentNode.removeChild(G_changeObjectDisplayNiceObject)
    }
    G_changeObjectDisplayNiceObject = null
  }
  else
    setTimeout("changeObjectDisplayNiceTimer()", G_changeObjectDisplayNiceTimeout)
    
}

function changeObjectDisplayNice(id, newDisplay, height, width, parameter, scrollOnResize)
{

  if ( ! G_changeObjectDisplayNiceAnimation )
  {
    obj = getObj(id)
    obj.style.display = newDisplay

    var setAutoSize = ( parameter == 'autosize' ) ;

    if (newDisplay != 'none')
    {
      if ( setAutoSize ) 
      {
        if ( height )
          obj.style.height = 'auto'
        if ( width ) 
          obj.style.width = 'auto'
      }
      else
      {
        obj.style.height = px(height)
        obj.style.width = px(width)
      }
    }
    return
  }
  var show = true
  if ( newDisplay == 'none' )
  {
    show = false
  }
  var currentObject = getObj(id)
  if ( G_changeObjectDisplayNiceObject != null && G_changeObjectDisplayNiceObject != currentObject)
    return;
  var useOverflow = "hidden"

  G_changeObjectDisplayNiceObject = currentObject
  G_changeObjectDisplayNiceUseHeight = height
  G_changeObjectDisplayNiceUseWidth = width
  G_changeObjectDisplayNiceClearInnerHTML = false
  G_changeObjectDisplayNiceSetAutoSize = false
  if ( scrollOnResize ) 
    G_changeObjectDisplayNiceScrollOnResize = true
  else
    G_changeObjectDisplayNiceScrollOnResize = false
  G_changeObjectDisplayNiceOldOverflow = G_changeObjectDisplayNiceObject.style.overflow
  G_changeObjectDisplayNiceSetAutoSize = false
  G_changeObjectDisplayNiceClearInnerHTML = false
  G_changeObjectDisplayNiceRemoveObject = false
  
  switch ( parameter )
  {
    case 'autosize':  G_changeObjectDisplayNiceSetAutoSize    = true; break
    case 'clear' :    G_changeObjectDisplayNiceClearInnerHTML = true; break
    case 'remove' :   G_changeObjectDisplayNiceRemoveObject   = true; break
    case 'scrollbars':         useOverflow = "scroll" 
//        G_changeObjectDisplayNiceOldOverflow = "scroll"
        break
  }
  if ( show )
  {
    G_changeObjectDisplayNiceObject.style.overflow = useOverflow

    G_changeObjectDisplayNiceDeltaHeight = height / G_changeObjectDisplayNiceDeltaParameter
    G_changeObjectDisplayNiceDeltaWidth = width / G_changeObjectDisplayNiceDeltaParameter 
    G_changeObjectDisplayNiceDiffHeight = height 
    G_changeObjectDisplayNiceDiffWidth = width
    G_changeObjectDisplayNiceFinalHeight = height
    G_changeObjectDisplayNiceFinalWidth = width
    // ???
//    if ( currentObject.style.display == 'none' )
    {
      if ( height )
      {
        G_changeObjectDisplayNiceObject.style.height  = 0
        G_changeObjectDisplayNiceObject.currentHeight = 0
      }
      if ( width ) 
      {
        G_changeObjectDisplayNiceObject.style.width  = 0
        G_changeObjectDisplayNiceObject.currentWidth = 0
      }
    }

    G_changeObjectDisplayNiceObject.style.display  = newDisplay
  }
  else
  {
    // enabling hasLayout http://www.satzansatz.de/cssd/onhavinglayout.html
    G_changeObjectDisplayNiceObject.style.zoom = "100%"
    G_changeObjectDisplayNiceDeltaHeight = G_changeObjectDisplayNiceObject.clientHeight / G_changeObjectDisplayNiceDeltaParameter
    G_changeObjectDisplayNiceDeltaWidth = G_changeObjectDisplayNiceObject.clientWidth / G_changeObjectDisplayNiceDeltaParameter
    G_changeObjectDisplayNiceDiffHeight = G_changeObjectDisplayNiceObject.clientHeight 
    G_changeObjectDisplayNiceDiffWidth = G_changeObjectDisplayNiceObject.clientWidth
    G_changeObjectDisplayNiceFinalHeight = 0
    G_changeObjectDisplayNiceFinalWidth = 0
    if ( height )
      G_changeObjectDisplayNiceObject.currentHeight = G_changeObjectDisplayNiceObject.clientHeight
    if ( width )
      G_changeObjectDisplayNiceObject.currentWidth = G_changeObjectDisplayNiceObject.clientWidth    
    G_changeObjectDisplayNiceObject.style.overflow = useOverflow
   }
//  alert("start " + G_changeObjectDisplayNiceObject.currentHeight)
  G_changeObjectDisplayNiceShow = show
  setTimeout("changeObjectDisplayNiceTimer()", G_changeObjectDisplayNiceTimeout)
}

function showHideObjectNice(id, newDisplay, height, width)
{
  if ( getObj(id).style.display == "none" || (G_changeObjectDisplayNiceObject == getObj(id) && ! G_changeObjectDisplayNiceShow) )
  {
    changeObjectDisplayNice(id, newDisplay, height, width)
    return true
  }
  else
  {
    changeObjectDisplayNice(id, 'none', height > 0 , width > 0)
    return false
  }
}

function getObj(id)
{
  var obj;
/*  if ( document.all )
    obj = eval ('document.all.' + id);
  else
  */
    obj = document.getElementById(id);
  return obj;
}

function setStyle( objId, style )
{ 
  var obj = getObj(objId);
  if ( obj )
    obj.className = style; 
}

function getInnerWidth()
{
  var val;
  if (self.innerWidth) // all except Explorer
    val = self.innerWidth;
  else if (document.documentElement && document.documentElement.clientWidth)
    val = document.documentElement.clientWidth;
  else if (document.body) // other Explorers
    val = document.body.clientWidth;
  return val;
}

function getInnerHeight()
{
  var val;
  if (self.innerHeight) // all except Explorer
    val = self.innerHeight;
  else if (document.documentElement && document.documentElement.clientHeight)
    val = document.documentElement.clientHeight;
  else if (document.body) // other Explorers
    val = document.body.clientHeight;
  return val;
}

function escapeFrames()
{
  if( top.location.href != self.location.href )
    parent.location = self.location.href;
}

function centerDiv(div)
{
  var pageWidth = document.body.offsetWidth ? document.body.offsetWidth : window.innerWidth;
  var pageHeight= document.body.offsetHeight? document.body.offsetHeight : window.innerHeight;
  var obj = getObj(div);
  if ( pageHeight < 600 )
    pageHeight = 600;
  obj.style.left = ((pageWidth - obj.offsetWidth)/2)+'px';
  obj.style.top = ((pageHeight - obj.offsetHeight)/2) + document.body.scrollTop - (obj.offsetHeight/2) +'px';
}

function showAlert(txt, type)
{
  if ( G_debug ) 
  {
    alert(type + ": " + txt)
    return
  }
  if ( typeof(type) == 'undefined' )
    type = 'error'
  return showInfoWindow(type,txt) // using new type of alert window, backward compatibility

}

// 
function showObjectInfoWindow(txt, header)
{
  var obj     = getObj('alertDiv'  );
  var screen  = getObj('blockerDiv');
  var abody   = getObj('alertBody' );
  var atitle  = getObj('alertTitle');
  var aheader = getObj('alertHeader');

  if ( aheader )
  {
    aheader.className = 'alert_info_header';
    atitle.innerHTML = header;
  }

  abody.innerHTML = txt;
  obj.style.visibility = 'visible';
  screen.style.visibility = 'visible';
  centerDiv('alertDiv');

// dd!
//  if(dd.elements['alertDiv'])
//    dd.elements.splice('alertDiv', 1);

  ADD_DHTML('alertDiv');
}

inputQueryOkCallback     = null;
inputQueryCancelCallback = null;

function changeInputQuery()
{
  var obj = getObj("inputQueryValue")
//  getObj("inputQueryOk").enabled = ( obj.value != '' )
}

function showInputWindow(hdr, txt, onOk, onCancel, okText, cancelText, defaultText)
{
  if (defaultText)
    $('inputQueryValue').value = defaultText
  else  
    $('inputQueryValue').value = ""    

  $('inputWindowHeader').innerHTML = hdr;
  $('inputWindowBody').innerHTML = txt;

  changeInputQuery()

  inputQueryOkCallback     = onOk;
  inputQueryCancelCallback = onCancel;

  $('modalLayer').setStyle('visibility', 'visible'); 
  $('modalLayer').setStyle('opacity', 0.1);
  inputFx.start(1);
}

function okInputQuery()
{
  var inputQueryValue = getObj('inputQueryValue').value
  if ( inputQueryOkCallback != null )
    inputQueryOkCallback(inputQueryValue);
  hideInputWindow();
}

function cancelInputQuery()
{
  hideInputWindow();
  if ( inputQueryCancelCallback != null )
    inputQueryCancelCallback();
}

function hideInputWindow()
{
  $('modalLayer').setStyle('opacity', 1);
  $('modalLayer').setStyle('visibility', 'hidden'); 
  inputFx.start(0);
}

questionOkCallback     = null;
questionCancelCallback = null;

function showQuestion(txt, onOk, onCancel, type)
{
  if ( G_debug ) 
  {
    if ( confirm(txt) )
    {
      if (onOk) onOk()
    }
    else
    {
      if (onCancel) onCancel()
    }
    return
  }
  questionOkCallback     = onOk;
  questionCancelCallback = onCancel;

  showQuestionWindow(txt, onOk, onCancel)
}

function okQuestion()
{
  hideQuestionWindow()
  //var obj = getObj('questionDiv');
  //var screen = getObj('blockerDiv');
  //screen.style.visibility = 'hidden';
  //obj.style.visibility = 'hidden';
  if ( questionOkCallback != null )
    questionOkCallback();
}

function cancelQuestion()
{
  hideQuestionWindow()
  //var obj = getObj('questionDiv');
  //var screen = getObj('blockerDiv');
  //screen.style.visibility = 'hidden';
  //obj.style.visibility = 'hidden';
  if ( questionCancelCallback != null )
    questionCancelCallback();
}

function hideAlert()
{
  if ( G_debug )
  {
    return 
  }
  var obj = getObj('alertDiv');
  var screen = getObj('blockerDiv');
  obj.style.visibility = 'hidden';
  screen.style.visibility = 'hidden';

  // callback function - call if exists
  if ( (typeof onHideAlert) == 'function' )
    onHideAlert(obj.alertType);
}

// item select functions

function itemSelectId(oid)
{
  return oid.replace(/[:=\.]/g,'_')
}

function itemSelectCancel()
{
  G_itemSelectCallback = null
  G_itemSelectFilter = null
  getObj('div_item_select_root').innerHTML =  ""
  //getObj('itemSelectDiv').style.visibility = "hidden"
  //var screen = getObj('blockerDiv')

  $('modalLayer').setStyle('opacity', 1);
  $('modalLayer').setStyle('visibility', 'hidden'); 
  treeFx.loadRoot = false
  treeFx.start(0)

  //screen.style.visibility = 'hidden'
}

function itemSelectOnStart()
{
  $('treeWindowBody').setStyle('overflow', ''); //workaround
}

function itemSelectOnComplete()
{
  //alert('itemSelect loaded ' + treeFx.getStyle('opacity') )
  if ( treeFx.loadRoot )
  {
    $('treeWindowBody').setStyle('overflow', 'auto'); // workaround
    itemSelectLoadSubnodes(G_itemSelectRootOid, true) 
  }
}

function itemSelectChoose(oid, name)
{
  var i = oid.indexOf("id=") 
  if ( i > 0 )
    id = parseInt(oid.substr(i+3))
  else
    id = 0
  G_itemSelectCallback(oid, name, id)
  itemSelectCancel()
}

function itemSelectInit(callback, rootOid, filter, caption, addRoot, noneValue)
{
  G_itemSelectCallback = callback
  G_itemSelectFilter = filter
  G_itemSelectRootFolder = rootOid
  if ( typeof(addRoot) == "undefined" )
    G_itemSelectAddRoot = 1
  else
    G_itemSelectAddRoot = addRoot

  if ( typeof(noneValue) != "undefined" )
  {
    var link = '[ <a style="text-decoration:none" href="javascript:itemSelectChoose(\'0\',\''+noneValue+'\')">'+ noneValue+'</a> ]'
    getObj('item_select_none').innerHTML = link
  }
  else  
    getObj('item_select_none').innerHTML = ""

/*
  if ( typeof(disableSome) == "undefined" ) 
    G_itemSelectDisableSome = 1
  else
    G_itemSelectDisableSome = disableSome
*/    
    

  var result = rpcQuery("rpc.php?function=getCurrentObjectInfo")
  if ( result[0] == "OK" )
  {
    G_itemSelectCurrentOid = result[1]
    G_itemSelectParentOid  = result[3]   
  }
  else
  {
    G_itemSelectCurrentOid = "vfolder:root"
    G_itemSelectParentOid = "vfolder:root"
  }

  G_itemSelectRootOid = rootOid
//  itemSelectLoadSubnodes(rootOid, true) moved

  $('modalLayer').setStyle('visibility', 'visible'); 
  $('modalLayer').setStyle('opacity', 0.1);
  treeFx.loadRoot = true
  treeFx.start(1)

  if ( typeof(caption) != "undefined" )
    $('treeWindowHeader').innerHTML = caption

}

function itemSelectLoadNode(P_parentId, P_id, P_cutName, P_name, P_description, P_closedIcon, P_openIcon, P_hasSubnodes)
{
//  alert("parent=" + P_parentId + " id=" + P_id)

  var id = itemSelectId(P_id)
  var divId = "div_" + id
  var spanId = "span_" + id
  var waitId = "wait_" + id
  var closedIconId = "closed_icon_" + id
  var openIconId = "open_icon_" + id
  

  var parentId = itemSelectId(P_parentId)
  var parentDivId = "div_" + parentId
  var parentSpanId = "span_" + parentId
  var parentWaitId = "wait_" + parentId
  var parentClosedIconId = "closed_icon_" + parentId
  var parentOpenIconId = "open_icon_" + parentId

  var filter = "ALL"
  if ( P_id.indexOf(G_itemSelectFilter) == 0 )
    filter = G_itemSelectFilter

  var subnodes = P_hasSubnodes 
//alert(P_hasSubnodes + " 2 " + P_id + " 3 " + G_itemSelectFilter + " 4 " + G_itemSelectRootFolder + " 5 " + P_id.indexOf(G_itemSelectFilter) + " 6 " + P_id.indexOf(G_itemSelectRootFolder))
  var brackets = subnodes ? '[<span id="'+spanId+'" style="font-weight:bold"><a style="text-decoration:none" href="javascript:itemSelectLoadSubnodes(\'' + P_id + '\', 0 , \'' + filter + '\')">+</a></span>]' : '[ ]'
  var brackets = '<span style="font-family:monospace;font-size:12px">' + brackets + '</span>'

  var closedIcon = '<img alt="" src="'+P_closedIcon+'" id="'+closedIconId+'" style="display:inline" />'
  var openIcon   = '<img alt="" src="'+P_openIcon+'" id="'+openIconId+'" style="display:none" />'
  var icons = "" // closedIcon + openIcon + ' '

  var link = ""

  var enable = true
  /*
  if (G_itemSelectDisableSome)
  {
    if ( P_id == G_itemSelectCurrentOid )
      enable = false
    if ( P_id == G_itemSelectParentOid &&  ! G_itemSelectAddRoot && G_itemSelectRootFolder != G_itemSelectParentOid )
      enable = false
  }
  */

  var validClasses = G_itemSelectFilter.split(",")
  var validClass = false
  for ( i=0; i< validClasses.length; i++ ) 
  {
    var objectClass = validClasses[i]
    if ( P_id.indexOf(objectClass) == 0 )
    {
      validClass = true
    }
//      alert(P_id + " indexOf " + objectClass +  " = " + P_id.indexOf(objectClass))
  }
//  alert("validClasses=" + validClasses + " validClass=" + validClass + " P_id=" + P_id)
  if ( enable && ( validClass || ( G_itemSelectAddRoot && P_id == G_itemSelectRootFolder ) ) )
  {
    link = '<a style="text-decoration:none" href="javascript:itemSelectChoose(\'' + P_id + '\',\'' + escapeSingleQuote(P_name) + '\')">' + icons + P_name + '</a>'
  }
  else
  {
    link = '<strong>' +  icons + P_name + '</strong>'
  }

  var wait = ' <span style="font-style:italic" id="'+ waitId +'"></span>'
  var div = '<div style="margin-left:10px" id="'+divId+'"></div>'

  var item = brackets + ' ' + link + wait + div

  if ( getObj(parentSpanId) )
    getObj(parentSpanId).innerHTML = '-'

  if ( getObj(parentOpenIconId) )
    getObj(parentOpenIconId).style.display = "inline"

  if ( getObj(parentClosedIconId) )
    getObj(parentClosedIconId).style.display = "none"

  if ( getObj(parentDivId) )
    getObj(parentDivId).innerHTML += item
  else
    getObj('div_item_select_root').innerHTML = item

}

function itemSelectNodeLoaded(result)
{

  if ( getObj(G_itemSelectWaitId)  ) 
    getObj(G_itemSelectWaitId).innerHTML = ''
  getObj('wait_item_select_root').innerHTML = ''
  G_itemSelectWaitId = null

  if ( result[0] == 'OK' )
  {
    for ( var i = 1; i < result.length; i ++ )
    {
      var data = result[i].split(G_varSplitter);
//      if (data[0].indexOf(G_itemSelectFilter) == 0 || data[0].indexOf(G_itemSelectRootFolder) == 0)
      itemSelectLoadNode(data[7], data[0], data[1], data[2], data[3], data[4], data[5], data[6]==1?true:false);
    }
  }
  else
    alert(result)
}

function itemSelectLoadSubnodes(oid, addSelf, filter)
{

  if ( typeof(addSelf) == "undefined" )
    addSelf = 0
  if ( typeof(filter) == "undefined" )
    filter = 'ALL'

//  var container = getObj('div_' + id)
  var waitId = "wait_" + itemSelectId(oid)

  G_itemSelectWaitId = waitId

  
  if ( getObj(waitId) ) 
    getObj(waitId).innerHTML = loadingNodeMsg
  else
    getObj('wait_item_select_root').innerHTML = loadingNodeMsg
  //threadParams = { id: oid, filter: G_itemSelectFilter, addSelf: addSelf }
//  threadParams = { id: oid, addSelf: addSelf, filter: G_itemSelectFilter }
  threadParams ={ id: oid, addSelf: addSelf, filter: filter, classOrAncestor: G_itemSelectFilter }
  fakeThread("rpcQuery('rpc.php?function=loadSubitems', threadParams);", "itemSelectNodeLoaded");
}

function showElement(oid, reference)
{
  var obj = getObj(oid);
  obj.style.top = 10;
  obj.style.left = 10;
  obj.style.visibility = 'visible';
}

function hideElement(oid)
{
  var obj = getObj(oid);
  obj.style.visibility = 'hidden';
}

function trimString(sInString) 
{
  sInString = sInString.replace( /^\s+/g, "" );
  return sInString.replace( /\s+$/g, "" );
}

function getXY(oElement) 
{
  var oOrgElm = oElement;
  var iX=0;
  var iY=0;
  var iCount;
  var oElement2;
  var oElementOffset = oElement.offsetParent;

/*
  while(oElement) 
  {
    oElement2 = oElement.parentNode;
    if(oElementOffset == oElement) 
    {
      iX += oElement.offsetLeft;
      iY += oElement.offsetTop;
      //iX += oElement.left
      //iY += oElement.top
      // Add for borders
      iY += parseInt2(oElement.style.borderTopWidth);
      iX += parseInt2(oElement.style.borderLeftWidth);
      // Add for scrolling
      iX -= parseInt2(oElement.scrollLeft);
      iY -= parseInt2(oElement.scrollTop);
      // Get the next offsetParent
      oElementOffset = oElementOffset.offsetParent;
    }
    else 
    {
      iX -= parseInt2(oElement.scrollLeft);
      iY -= parseInt2(oElement.scrollTop);
    }

    oElement = oElement2;
  }
*/
  while(oElement) 
  {
    iX += oElement.offsetLeft;
    iY += oElement.offsetTop;
    //iX += oElement.left
    //iY += oElement.top
    // Add for borders
    //iY += parseInt2(oElement.style.borderTopWidth);
    //iX += parseInt2(oElement.style.borderLeftWidth);
    // Add for scrolling
//    iX -= parseInt2(oElement.scrollLeft);
//    iY -= parseInt2(oElement.scrollTop);
//    iX -= parseInt2(window.scrollLeft);
//    iY -= parseInt2(window.scrollTop);
//    iX -= parseInt2(document.documentElement.scrollLeft);
//    iY -= parseInt2(document.documentElement.scrollTop);
    // Get the next offsetParent
    oElement = oElement.offsetParent;

  } 
  return [iX, iY];
}

function parseInt2(sInt) 
{
  var i = parseInt(sInt);
  if(isNaN(i)) return 0;
  else return i;
}

function getFormAsArray(P_form)
{
  var a = new Object(); 
  var attributeNumber = 0
  for ( var i = 0; i < document[P_form].elements.length; i++ )
  {
    switch ( document[P_form].elements[i].nodeName.toLowerCase() )
    {
      case 'input':
        switch ( document[P_form].elements[i].type.toLowerCase() )
        {
          case 'checkbox':
            a[document[P_form].elements[i].name] = document[P_form].elements[i].checked?1:0;
            break;
          default: 
            var matchResult = document[P_form].elements[i].name.match(/attribute_value_(.*)/)
            if (matchResult)
            {
              var elementNumber = matchResult[1]
              var keyword = document.getElementById('attribute_keyword_' + elementNumber).value

              a['attributes[' + attributeNumber + ']'] = keyword  + '=' + document[P_form].elements[i].value
              attributeNumber++ 
              break;
            }
            a[document[P_form].elements[i].name] = document[P_form].elements[i].value;
            break;
         }
        break;
      case 'select':
        if (document[P_form].elements[i].name.match(/attribute_keyword_(.*)/))
          break
      default:
        a[document[P_form].elements[i].name] = document[P_form].elements[i].value;
        break;
    }
  }
  return a;
}

function eventBubbleStop(P_event)
{
  P_event.cancelBubble = true;
  if ( !document.all )
    P_event.stopPropagation();
}

function getSelectedRows(P_tableId)
{
  if ( !P_tableId )
    P_tableId = 'contentTable';

  var selectedRows = new Array();
  var contentTable = getObj(P_tableId);
  for ( var i = 0; i < contentTable.rows.length; i++ )
    if ( $(contentTable.rows[i]).hasClass('selected') ||  $(contentTable.rows[i]).hasClass('selected_disabled')) //changed (due to not using .selected, but classes)
      selectedRows[selectedRows.length] = contentTable.rows[i].id;
  return selectedRows;
}

function getSelectedPictures(P_tableId)
{
  if ( !P_tableId )
    P_tableId = 'contentTable';

  var selectedRows = new Array();
  var contentTable = getObj(P_tableId);
  for ( var j = 0; j < contentTable.rows.length; j++ )
  {
    var row = contentTable.rows[j];         
    for( var i = 0; i < row.cells.length; i++)
    {   
        var cell = contentTable.rows[j].cells[i];      
        if(cell.className == 'selected')
        {
            selectedRows[selectedRows.length] = cell.id; 
        }
    }
    
  }
  return selectedRows;
}


function itemsSelection()
{

  var checkbox = getObj('checkbox_header')
  if ( typeof(checkbox.selected) == "undefined" )
    checkbox.selected = false

  if ( checkbox.selected ) 
  {
    selectNone()
    checkbox.src = "src/img/check_off.gif"
    checkbox.selected = false
  }
  else
  {
    selectAll()
    checkbox.src = "src/img/check_on.gif"
    checkbox.selected = true
  }

  
}

function rowClick(e, obj)
{
   if ( ! e )
     e = window.event

   id = obj.id
   var startOffset = -1
   var stopOffset = -1


   if ( e.ctrlKey )
   {

     trSelect(obj);
     G_lastSelected = id

   } 
   else if ( e.shiftKey && typeof(G_lastSelected) != "undefined" )
   {
//     eventBubbleStop(e)
//     preventDefault(e)
//     alert(G_rowIds)
//     alert(id + " " + G_lastSelected)
     for ( var i = 0 ; i < G_rowIds.length; i ++ )
     {
       if (G_rowIds[i] == id)
       {
         if ( startOffset == -1 )
           startOffset = i
         else
           stopOffset = i
       }
       if (G_rowIds[i] == G_lastSelected)
       {
         if ( startOffset == -1 )
           startOffset = i
         else
           stopOffset = i
       }
     }
     if ( startOffset != -1 && stopOffset != -1 )
     {
       selectNone();
       for ( var i = startOffset; i <= stopOffset; i++ )
        trSelect(getObj(G_rowIds[i]))
     }
     else
      alert("huh?")

   }
   else
   {
     selectNone();
     trSelect(obj);
     G_lastSelected = id
   }

}


function selectAll(P_tableId)
{
  if ( P_tableId == 'contentTablePictures')
  {
    SelectAllPictures();
    return;
  }
  
  if ( !P_tableId || P_tableID != '' )
    P_tableId = 'contentTable';
  
//  if(P_tableId == 'pictureContentTable')
  var contentTable = getObj(P_tableId);
  for ( var i = 0; i < contentTable.rows.length; i++ )
  {
    var row = contentTable.rows[i];
    if ( row.id != '' && !( $(row).hasClass('selected') || $(row).hasClass('selected_disabled')) )
    {
      //bugfix: if we are over some row, and use ctrl+a, we must trOver this row before selectIt
      if ( row.className.indexOf("over") != -1 )
      {
        trOut( row );
      }
      row.oldClass = row.className;
      $(row).addClass('selected');
      var checkImg = getObj('checkbox_' + row.id);
      if ( checkImg )
        checkImg.src = "src/img/check_on.gif";
    }
  }
}

function SelectAllPictures(P_tableId)
{
  if ( !P_tableId )
    P_tableId = 'contentTable';

  var contentTable = getObj(P_tableId);  
  for ( var j = 0; j < contentTable.rows.length; j++ )
  {
    var row = contentTable.rows[j];         
    for( var i = 0; i < row.cells.length; i++)
    {   
        var cell = contentTable.rows[j].cells[i];        
        if(cell.className == 'image' || cell.className == 'over' || cell.className == 'deleted')
        {
            tdSelect(cell); 
        }
    }
    
  }
}

function SelectNonePictures(P_tableId)
{
  if ( !P_tableId )
    P_tableId = 'contentTable';

  var contentTable = getObj(P_tableId);  
  for ( var j = 0; j < contentTable.rows.length; j++ )
  {
    var row = contentTable.rows[j];         
    for( var i = 0; i < row.cells.length; i++)
    {   
        var cell = contentTable.rows[j].cells[i];        
        if(cell.className == 'selected')
        {
            tdSelect(cell); 
        }
    }
    
  }
}

function invertSelectionPictures(P_tableId)
{
  if ( !P_tableId )
    P_tableId = 'contentTable';

  var contentTable = getObj(P_tableId);  
  for ( var j = 0; j < contentTable.rows.length; j++ )
  {
    var row = contentTable.rows[j];         
    for( var i = 0; i < row.cells.length; i++)
    {   
        var cell = contentTable.rows[j].cells[i];        
        if(cell.className == 'selected' || cell.className == 'over' || cell.className == 'image' )
        {
            tdSelect(cell); 
        }
    }
    
  }
}

function selectNone(P_tableId)
{

  if ( P_tableId == 'contentTablePictures')
  {
    SelectNonePictures();
    return;
  }
  
  if ( !P_tableId )
    P_tableId = 'contentTable';

  var contentTable = getObj(P_tableId);
  for ( var i = 0; i < contentTable.rows.length; i++ )
  {
    var row = contentTable.rows[i];
    if ( row.id != '' && ( $(row).hasClass('selected') || $(row).hasClass('selected_disabled'))  )
    {
      $(row).removeClass('selected_disabled').removeClass('selected');
      var checkImg = getObj('checkbox_' + row.id);
      if ( checkImg )
        checkImg.src="src/img/check_off.gif";
    }
  }
}

function invertSelection(P_tableId)
{
  if ( P_tableId == 'contentTablePictures')
  {
    invertSelectionPictures();
    return;
  }
  
  if ( !P_tableId )
    P_tableId = 'contentTable';

  var contentTable = getObj(P_tableId);
  for ( var i = 0; i < contentTable.rows.length; i++ )
  {
    var row = contentTable.rows[i];
    if ( row.id != '' )
    {
      var checkImg = getObj('checkbox_' + row.id);
      if ( $(row).hasClass('selected') || $(row).hasClass('selected_disabled') )
      {
        $(row).removeClass('selected_disabled').removeClass('selected');
        if ( checkImg )
          checkImg.src="src/img/check_off.gif";
      }
      else
      {
        $(row).addClass('selected');
        if ( checkImg )
          checkImg.src = "src/img/check_on.gif";
      }
    }
  }
}

function getScreenWidth() 
{
  if (self.screen) 
    return screen.width;
  else 
    if (navigator.javaEnabled && navigator.javaEnabled())
      return java.awt.Toolkit.getDefaultToolkit().getScreenSize().width;
    else
      return -1;
}

function getScreenHeight()
{
  if (self.screen) 
    return screen.height;
  else 
    if (navigator.javaEnabled && navigator.javaEnabled())
      return java.awt.Toolkit.getDefaultToolkit().getScreenSize().height;
    else
      return -1;
}

function isValidNumber(numval)
{
  if (numval=="")
    return false;
  var myRegExp = new RegExp("^[/+|/-]?[0-9]*[/.]?[0-9]*$");
  return myRegExp.test(numval);
}

function storeCaret(textEl) 
{
  if (textEl.createTextRange) 
    textEl.caretPos = document.selection.createRange().duplicate();
}


function resizeToInner(x,y)
{
  self.innerWidth = x;
  self.innerHeight = y;
}

function preloadImages()
{
  preloadedImages = new Array();
  for ( var i = 0; i < arguments.length; i++ )
  {
    preloadedImages[i] = new Image();
    preloadedImages[i].src = arguments[i];
  }
}

function newImage(url)
{
  var img = new Image();
  img.src=url;
  return img;
}

function imageIsLoaded(img)
{
 if ( !img.complete )
   return false;
 if ( typeof img.naturalWidth != "undefined" && img.naturalWidth == 0 )
   return false;

 return true;
}

function fadeIn(objId, opac, inc, delay, runAfter) 
{
  var newOpac = opac + inc;
  var obj = getObj(objId);
  if ( newOpac < 100 ) 
  {
    obj.style.opacity = '.'+newOpac;
    obj.style.filter = "alpha(opacity:"+newOpac+")";
    opacityTimeout = window.setTimeout("fadeIn(\""+objId+"\","+newOpac+","+inc+","+delay+",\""+runAfter+"\")", delay);
  }
  else 
  { 
    obj.style.opacity = '100';
    obj.style.filter = "alpha(opacity:100)";
    if ( typeof runAfter != 'undefined' && runAfter.length > 0 )
      window.setTimeout(runAfter, 10);
  }
}

function fadeOut(objId, opac, dec, delay, runAfter) 
{
  var newOpac = opac - dec;
  var obj = getObj(objId);
  if ( newOpac > 0 ) 
  {
    obj.style.opacity = '.'+newOpac;
    obj.style.filter = "alpha(opacity:"+newOpac+")";
    opacityTimeout = window.setTimeout("fadeOut(\""+objId+"\","+newOpac+","+dec+","+delay+",\""+runAfter+"\")", delay);
  }
  else 
  { 
    obj.style.opacity = '0';
    obj.style.filter = "alpha(opacity:0)";
    if ( typeof runAfter != 'undefined' && runAfter.length > 0 )
      window.setTimeout(runAfter, 10);
  }
}

function getScrollY()
{
  if (self.pageYOffset) // all except Explorer
    return self.pageYOffset;
  else if (document.documentElement && document.documentElement.scrollTop) // Explorer 6 Strict
    return document.documentElement.scrollTop;
  else if (document.body) // all other Explorers
    return document.body.scrollTop;
}

function toggleNotification()
{
  var result = rpcQuery('rpc.php?function=toggleNotification');
  if ( result[0] != 'OK' )
    parent.showAlert(result[1]);
  else
    parent.showAlert(result[1], 'info');
}

function escapeSingleQuote(str)
{
  return str.replace(/\\/g,'\\\\').replace(/'/g, "\\'");
}

function escapeDoubleQuote(str)
{
  return str.replace(/"/g, '\\"');
}

function htmlEscapeDoubleQuote(str)
{
  return str.replace(/"/g, '&quot;');
}

function getFlashMovieObject(movieName)
{
  if (window.document[movieName]) 
  {
      return window.document[movieName];
  }
  if (navigator.appName.indexOf("Microsoft Internet")==-1)
  {
    if (document.embeds && document.embeds[movieName])
      return document.embeds[movieName]; 
  }
  else // if (navigator.appName.indexOf("Microsoft Internet")!=-1)
  {
    return document.getElementById(movieName);
  }
}

function fakeThread(body, end, timeout)
{
  if ( typeof(timeout) == 'undefined' )
    timeout = 100
  threadText="var threadReturnValue="+body+";";
  if ( end )
    threadText += end+"(threadReturnValue);";
  setTimeout(threadText, timeout)
}

function addNewMultiValue(fieldName, cssClass, oid, maxChoices, fieldN)
{
  contentChanged(getObj(fieldName))
  G_multiValueCurrentId[fieldName] += 1
  var currentId = G_multiValueCurrentId[fieldName]
  var el = document.createElement('p'); 
  var parentName = 'multiValueList_' + fieldName
  var arrayKey = fieldName + '[' + currentId + ']'


  el.setAttribute('id', arrayKey)
  el.style.display = 'none'

  var html = '<input type="text" class="'+ cssClass +'" value="" name="'+ arrayKey +'" id="multivalue_'+ arrayKey +'" style="width:200px"/>' + "\n" +
             '<a style="text-decoration:none" href="javascript:deleteAttributeById(\'' + parentName + '\',\'p\', \''+arrayKey+'\')"><img src="src/img/del-small.gif" onmouseover="showHint(deleteEntryMsg)" onmouseout="hideHint()"/></a>'
             
  el.innerHTML = html
  el.style.margin = "0px 0px 2px 0px"
  getObj(parentName).appendChild(el)
  changeObjectDisplayNice(arrayKey, 'block', 22, 0, 'autosize');
  
  $('multivalue_'+ arrayKey ).focus();
  
  if ( typeof(oid) != 'undefined')
  {
      var field = $('multivalue_'+arrayKey);
      var post  = {'oid' : oid, 'field' : fieldN};
      var max   = maxChoices
      var ac = new Autocompleter.Ajax.Json(field, 'ajax.php?function=autocomplete',{maxChoices: max, postData: post});   
  }
}

function deleteAttributeById(parentId, elementType, fullId)
{
  var parentObject = getObj(parentId)   
  contentChanged(parentObject) 
  var element = parentObject.getElementsByTagName(elementType);
/*  
  for (var i=0; i < element.length;i++)
  {
    if ( element[i].id == fullId ) 
    {
      var node = element[i];
      break;
    }
  }
*/
  changeObjectDisplayNice(fullId, 'none', true, false, 'remove');  
//  if (typeof node != "undefined")
//    node.parentNode.removeChild(node)  
//  else
//    alert('Node not found: parentId=' + parentId + ' elementType=' + elementType + ' fullId=' + fullId)
}

function addNewAttribute(parentName, cssClass)
{
  contentChanged(getObj(parentName))
  G_attributesCurrentId += 1
  var currentId = G_attributesCurrentId

  var el = document.createElement('p'); 

  var keywordId = 'attribute_keyword_' + currentId.toString()
  var valueId = 'attribute_value_' + currentId.toString()
  var elementId = 'attribute_element_' + currentId.toString()

  el.setAttribute('id', elementId)
  el.style.margin = "0px 0px 2px 0px"
  el.style.display = 'none'

  var typesHtml = ""
  var currentType = G_attributesTypes

  for ( var i = 0; i < currentType.length; i++ )
  {
    typesHtml += '<option value="' + currentType[i]['keyword'] + '">' + currentType[i]['name'] + '</option>' + "\n";
  }

  var html =  '<select name="' + keywordId + '" id="' + keywordId + '" class='+cssClass+'>' + typesHtml + '</select>' + "\n" + 
              '<input type="text" class="'+ cssClass +'" value="" name="'+ valueId + '" style="width:200px"/>'+ "\n"+
              '<a style="text-decoration:none" href="javascript:deleteAttributeById(\'' + parentName + '\',\'p\',\''+elementId+'\')"><img src="src/img/del-small.gif"/></a>'
  el.innerHTML = html
  el.style.margin = "0px 0px 2px 0px"
//  styleObj = getObj(elementId).style
//  styleObj.margin = "0px 0px 2px 0px"
  getObj(parentName).appendChild(el)
  changeObjectDisplayNice(elementId, 'block', 24, 0, 'autosize');
}

function showHelp(key, type, header)
{
  var params = {key: key, type:type }
  var result = rpcQuery("rpc.php?function=getHelp", params)
  if ( result[0] == "OK" )
  {
    if ( typeof ( header) == "undefined" )
      header = ''
    message = result[1]
    Tip(message, TITLE, header, FOLLOWMOUSE, false, CLOSEBTN, true, DELAY, 50, OPACITY, 100, STICKY, true, WIDTH, 200)
  }
  else
    alert(result)
    //parent.showAlert(result[1])
  //wnd = window.open("cmd.php?cmd=help&key=" + key, "helpWindow", 'menubar=no, toolbar=no, location=no, scrollbars=auto, resizable=yes, status=no, width=500, height=400')
}

function findPos(obj) {
  var curleft = curtop = 0;
  if (obj.offsetParent) {
    curleft = obj.offsetLeft
    curtop = obj.offsetTop
    while (obj = obj.offsetParent) {
      curleft += obj.offsetLeft
      curtop += obj.offsetTop
    }
  }
  return [curleft,curtop];
}

function hideInfo(force)
{
  if ( typeof(force) == "undefined" )
    force = false
  dateObject = new Date()
  if ( ! force && dateObject.getTime() < G_infoHideTime )
    return
  info = getObj('infoLayer')
//  if ( 
  info.style.visibility = 'hidden'
}

function printInfo()
{
  if ( G_infoMessagesList.length == 0 )
    return
//  for ( G_infoMessagesList.length 
}

function addInfoEntry(text, type)
{
  if ( G_infoMessagesList.length >=  G_infoMessagesMaxCount ) 
    G_infoMessagesList.shift()
  var item = { text: text, type: type }
  G_infoMessagesList.push(item)
}

/*
function showInfo(text, type, hide)
{
  showInfoWindow(type, text)
  return

  if ( typeof('type') == "undefined" )
    type = "error" 

  var info = getObj('infoLayer')
  var icon = ""
  centerDiv('infoLayer')
  info.style.top = px(0)
  switch ( type )
  {
    case 'error' : 
        time = 3000
        info.className = "info_error"
        icon = 'src/img/icon_error.gif'
      break
    case 'wait':
        time = 5000
        info.className = "info_wait"
        icon = 'src/img/icon_wait.gif'
        break;
    case 'info' :
        time = 2000
        info.className = "info_info"
        icon = 'src/img/icon_information.gif'
      break
  }
  //info.innerHTML = text
  getObj('infoLayerIcon').style.background = "url("+icon+")"
  getObj('infoLayerText').innerHTML = text
  info.style.visibility = "visible"
  if ( (typeof(scheduleHide) == "undefined") || scheduleHide )
  {
    scheduleHideInfo(time)
  }
}

function scheduleHideInfo(time)
{
  if ( typeof(time) == "undefined" )
    time = 2000
  dateObject = new Date()
  newHideTime = dateObject.getTime() + time - 10
  
  if ( G_infoHideTime <= newHideTime )
  {
    G_infoHideTime = newHideTime
    setTimeout('hideInfo()', time)
  }
}
*/

function reflow(obj) // reflow function for Opera
{
  if ( typeof(obj) == "undefined" ) 
  {
    obj = document.body;
  }
  var old = obj.className;
  obj.className = "_";
  obj.className = old;
}


/*
function checkRpcError()
{
  if ( result[2] && result[2].length > 0 )
    setStyle('td_' + result[2], 'description_error');
  var field = eval('document.objectForm.' + result[2]);
  if ( result[1] && result[1].length > 0 )             // expected answer
    parent.showAlert(result[1]);
  else if ( result[0] && result[0].length > 0 )        // unexpected answer 
    parent.showAlert('Unexpected answer: ' +  result[0]);
  else                                                 // all is corrupt
    alert(result);
}
*/

function moveMouseOver(obj, ev)
{
  return
  if( document.createEvent )
  {
    var evObj = document.createEvent('MouseEvents');
    //evObj.initEvent( 'mousemove', true, false );
    evObj.initMouseEvent( 'mousemove', true, false, window, 0, 12, 345, 7, 220, false, false, true, false, 0, null );
    obj.dispatchEvent(evObj);
  }
  else //if( document.createEventObject )
  {
    obj.fireEvent('onmousemove');
  }
}

/**
 * type: info, warning, error
 */
function showInfoWindow(type, text, autohide)
{
  if ( typeof(infoDelay) != 'undefined' )
    infoDelay = $clear(infoDelay); 

  G_busyEnabled = false;

  $('infoText').innerHTML = text;
  $('infoImage').src = 'src/img/alert_' + type + '.gif';

  
  infoFx.start(1);
  if ( typeof(autohide) == 'undefined' )
     autohide = true
  if ( autohide )
    infoDelay = hideInfoWindow.delay(4000);
//  infoDelay = (function() { hideInfoWindow(); } ).delay(4000);
}

function hideInfoWindow()
{
  infoDelay = $clear(infoDelay);  
  infoFx.start(0);
}

function showPasswordWindow(oid)
{
  G_busyEnabled = false;
  parent.getObj('passwordWindowFieldOid').value = oid;
  $( parent.getObj('passwordWindowFieldOid') ).setStyle('visibility', 'visible'); 
  $( parent.getObj('passwordWindowFieldOid') ).setStyle('opacity', 0.1);
  parent.passwordFx.start(1);
  parent.getObj('passwordWindowField').focus();
}

function hidePasswordWindow()
{  
  parent.passwordFx.start(0);
  parent.getObj('passwordWindowField').value = '';

  $( parent.getObj('passwordWindowFieldOid') ).setStyle('opacity', 1);
  $( parent.getObj('passwordWindowFieldOid') ).setStyle('visibility', 'hidden'); 
}

function showQuestionWindow(text, onOk, onCancel)
{
  $('questionWindowText').innerHTML = text;
  $('questionWindowHeader').innerHTML = questionWindowHeader;
  $('modalLayer').setStyle('visibility', 'visible'); 
  $('modalLayer').setStyle('opacity', 0.1);
  questionFx.start(1);
}

function hideQuestionWindow()
{
  if ( G_debug )
    return
  questionFx.start(0);
  $('modalLayer').setStyle('opacity', 1);
  $('modalLayer').setStyle('visibility', 'hidden'); 
}

function makeToolbarIcon(icon, action, hint)
{
  var text = null;

  if (/MSIE (5\.5|6\.)/.test(navigator.userAgent))
    text = '<div class="icon" onclick="' + action + '"' +
          'onmouseover="this.className=\'icon iconHover\';showHint(\'' + hint + '\')" onmouseout="this.className=\'icon\';hideHint();">' + 
          '<img style="width:49px;height:26px;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' +
          icon + '\', sizingMethod=\'scale\')" src="src/img/blank.gif"></div>';
  else
    text = '<div class="icon" onclick="' + action + '" onmouseover="showHint(\'' + hint + '\')" onmouseout="hideHint()"><img style="width:49px;height:26px;" src="' + icon + '"></div>';

  return text
}

function makeImg(img)
{
  var style = '';
  var id = '';

  if ( img.width )
    style += 'width:' + img.width + 'px;';
  if ( img.height )
    style += 'height:' + img.height + 'px;';
  if ( img.style )
    style += img.style;

    //alert(img.src )
  if ( img.id )
    id = 'id="' + img.id + '"';
//  if ( /MSIE (5\.5|6\.)/.test(navigator.userAgent) && /\.png$/.test(img.src) )
  if ( /MSIE (5\.5|6\.)/.test(navigator.userAgent) )
  {
    return '<img ' + id + ' style="' + style + 'filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + 
      img.src + '\', sizingMethod=\'scale\')" src="src/img/blank.gif" ' + img.extra + '/>';
  }
  else
  {
    return '<img ' + id + ' style="' + style + '" src="' + img.src + '" ' + img.extra + '/>';
  }
}

function putImg(img)
{
  document.write(makeImg(img));
}

function busyStart()
{
  showInfoWindow('wait',pleaseWaitMsg, false)
  G_busyEnabled = true
}

function busyStop()
{
  if ( typeof(G_busyEnabled) != 'undefined' && G_busyEnabled )
    hideInfoWindow()
}

function showModal()
{
  if ( G_debug )
    return
  $('modalLayer').setStyle('visibility', 'visible'); 
  $('modalLayer').setStyle('opacity', 0.1);
}

function hideModal()
{
  if ( G_debug )
    return
  $('modalLayer').setStyle('opacity', 1);
  $('modalLayer').setStyle('visibility', 'hidden'); 
}

function toggleModal(arg)
{
  var o = arg.getStyle('opacity');
  if ( o == 0 )
    hideModal();
  else
    showModal();
}

function deleteObjectById(id)
{
  var obj = getObj(id)
  if ( obj )
  {
    obj.parentNode.removeChild(obj)
  }
}

function text2html(text)
{
  text = text.replace(/\&/g, '&amp;')
  text = text.replace(/\</g, '&lt;')
  text = text.replace(/\>/g, '&gt;')
  text = text.replace(/\n/g, '<br />\n')
  return text
}

function getWindowSize()
{
  if (parseInt(navigator.appVersion)>3)
  {
   if (navigator.appName=="Netscape") 
   {
    winW = window.innerWidth-16;
    winH = window.innerHeight-16;
   } 
   if (navigator.appName.indexOf("Microsoft")!=-1) 
   {
    winW = document.body.offsetWidth-20;
    winH = document.body.offsetHeight-20;
   }
  }
  return {'width': winW, 'height':winH}
}

function resetSignatureCounter()
{
  parent.showQuestion(parent.resetSignatureCounterConfirm, resetSignatureCounter_ok,null);
}

function resetSignatureCounter_ok()
{
  
  var result = rpcQuery("rpc.php?function=documents.resetSignatureCounter");
  parent.showAlert(result[1], result[0] == 'OK' ? 'info' : 'error');

  if ( result[0] == 'OK' )
  {
    document.location = document.location;
  }
}

/**
 * clog - this function is usefull to debuging JavaScript code. Please use it insead of console.log, which
 * works only in Firefox (with firebug)
 * 
 * @param mixed $value Value which we want to watch (string, object, array, number, etc.)
 * @access public
 * @return void
 */
function clog( value )
{
  if ( typeof(console) != 'undefined' )
  {
    console.log ( value )
  }
}

function linkToItem( elem )
{
  var result = rpcQuery('rpc.php?function=documents.linkToItem')  
  if( result[0] == 'OK' ) 
  {
    link = result[1];
  }
  else
  {
    parent.showAlert('Error during getting item link');
    return;
  } 
  
  var a = new Element('a', {'href' : link, 'target': '_blank', 'class' : 'linkToItemLink'});
  $(a).setHTML( link ); 
  $(elem).replaceWith( a );
}


/**
 * putIcon 
 * 
 * @param name  $name  
 * @access public
 * @return void
 */
function putIcon( name )
{
  var name = eval('G_icon' + name);
  var size = 16;
  putImg({'src' : name, 'extra' : '', 'width': size, 'height': size});
}
