//
// default theme settings
//

var toggleImage            = new Image();
toggleImage.src            = '/misc_/LimeBase/toggle_select.gif';

var arrowUpImage           = new Image();
arrowUpImage.src           = '/misc_/LimeBase/default_white_arrow_up.gif';
var arrowDownImage         = new Image();
arrowDownImage.src         = '/misc_/LimeBase/default_white_arrow_down.gif';

var listBrightestColor     = 'white';
var listBrightestTextColor = 'black';
var listBrightColor        = '#efefff';
var listBrightTextColor    = 'white';
var listDarkColor          = '#cfcfee';
var listDarkTextColor      = 'black';
var listLockedColor        = '#ffdddd';
var tabsBrightColor        = 'white';
var tabsDarkColor          = '#06287D';
var tabsHoverColor         = '#0834A3';
var iconBorderBgColor      = '#cfcfee';
var iconBorderOffColor     = '#dae0e9';
var iconBorderOnColor      = '#9f9fcc';
var timer                  = null;
var rpi                    = false;

//
//

var errorTexts   = new Array();
var monthNames   = new Array();
var warningTexts = new Array();
monthNames[0]   = "January";
monthNames[1]   = "February"
monthNames[2]   = "March";
monthNames[3]   = "April";
monthNames[4]   = "May";
monthNames[5]   = "June";
monthNames[6]   = "July";
monthNames[7]   = "August";
monthNames[8]   = "September";
monthNames[9]   = "October";
monthNames[10]  = "November";
monthNames[11]  = "December";
errorTexts[0]   = "No objects selected...";
errorTexts[1]   = "No users selected...";
warningTexts[0] = "Are you sure you want to delete ";
warningTexts[1] = "selected items";
warningTexts[2] = "the selected item";
warningTexts[3] = "selected users";
warningTexts[4] = "the selected user";


try
{
  if (currentLanguage == "no")
  {
    monthNames[0]   = "Januar";
    monthNames[1]   = "Februar"
    monthNames[2]   = "Mars";
    monthNames[3]   = "April";
    monthNames[4]   = "Mai";
    monthNames[5]   = "Juni";
    monthNames[6]   = "Juli";
    monthNames[7]   = "August";
    monthNames[8]   = "September";
    monthNames[9]   = "Oktober";
    monthNames[10]  = "November";
    monthNames[11]  = "Desember";
    errorTexts[0]   = "Du har ikke valgt noen elementer...";
    errorTexts[1]   = "Du har ikke valgt noen brukere...";
    warningTexts[0] = "Er du sikker på at du vil slette ";
    warningTexts[1] = "valgte elementer";
    warningTexts[2] = "valgt element";
    warningTexts[3] = "valgte brukere";
    warningTexts[4] = "valgt bruker";
  }
  else if (currentLanguage == "sv")
  {
    monthNames[0]   = "Januari";
    monthNames[1]   = "Februari"
    monthNames[2]   = "Mars";
    monthNames[3]   = "April";
    monthNames[4]   = "Maj";
    monthNames[5]   = "Juni";
    monthNames[6]   = "Juli";
    monthNames[7]   = "Augusti";
    monthNames[8]   = "September";
    monthNames[9]   = "Oktober";
    monthNames[10]  = "November";
    monthNames[11]  = "December";
    errorTexts[0]   = "Du har ikke valgt noen elementer...";
    errorTexts[1]   = "Du har ikke valgt noen brukere...";
    warningTexts[0] = "Er du sikker på at du vil slette ";
    warningTexts[1] = "valgte elementer";
    warningTexts[2] = "valt element";
    warningTexts[3] = "valgte brukere";
    warningTexts[4] = "valgt bruker";
  }
  else if (currentLanguage == "nl")
  {
    monthNames[0]   = "Januari";
    monthNames[1]   = "Februari"
    monthNames[2]   = "Maart";
    monthNames[3]   = "April";
    monthNames[4]   = "Mei";
    monthNames[5]   = "Juni";
    monthNames[6]   = "Juli";
    monthNames[7]   = "Augustus";
    monthNames[8]   = "September";
    monthNames[9]   = "Oktober";
    monthNames[10]  = "November";
    monthNames[11]  = "December";
    errorTexts[0]   = "Du har ikke valgt noen elementer...";
    errorTexts[1]   = "Du har ikke valgt noen brukere...";
    warningTexts[0] = "Er du sikker på at du vil slette ";
    warningTexts[1] = "valgte elementer";
    warningTexts[2] = "valt element";
    warningTexts[3] = "valgte brukere";
    warningTexts[4] = "valgt bruker";
  }
}
catch(e)
{
}


function editWithFCK(id, easydesk)
{
  el = document.getElementById('edit_' + id);
  if (el != null)
  {
    var sBasePath = '/FCKeditor/';
    var oFCKeditor;
    oFCKeditor          = new FCKeditor(id);
    oFCKeditor.BasePath = sBasePath;
    oFCKeditor.Value    = el.innerHTML;
    oFCKeditor.Height   = '100%';

    if (easydesk == 1)
    {
      oFCKeditor.Config["ForcePasteAsPlainText"] = true;
      oFCKeditor.ToolbarSet = "EasyDesk";
    }

    el.innerHTML = oFCKeditor.CreateEx();
  }
}

//
// other important variables
//

var formIsModified   = false;
var dragDisabled = false;

//
//
//

function disableDragAndDrop()
{
  dragDisabled = true;
}

//
//
//

function setImages()
{
  if (document.images.toggleLimeObjects)
    document.images.toggleLimeObjects.src = toggleImage.src;
  if (document.images.toggleSystemObjects)
    document.images.toggleSystemObjects.src = toggleImage.src;

  if (document.images.deskSortArrow)
    if (document.images.deskSortArrow.order != "reverse")
      document.images.deskSortArrow.src = arrowUpImage.src;
    else
      document.images.deskSortArrow.src = arrowDownImage.src;
}

//
// checkSelectedElements()
//
// purpose: check if any checkbox items are checked
//
//

function checkSelectedElements()
{
	var el = document.getElementById('objectItems');
	if (!el) return 0;

  itemsSelected = 0;

  // has the user selected any checkbox items?
  var l = el.length;
  for (i = 0; i < l; i++)
  {
    if (el[i].type == "select-multiple")
    {
    	var ll = el[i].options.length;
      for (j = 0; j < ll; j++)
      {
        if (el[i].options[j].selected) itemsSelected++;
      }
    }
    if (el[i].type == "checkbox" && el[i].checked)
      itemsSelected++;
  }

  return itemsSelected;
}


function checkCustomSelectedElements()
{
  f       = document.forms.objectItems;
  k       = 0;
  element = new Array();

  // go thru all elements in the form, check <select> elements
  for (i=0; i < f.length; i++)
  {
    if (f.elements[i].type == "select-multiple")
    {
      // check all options of the current <select> element
      for (j=0; j < f.elements[i].length; j++)
      {
        // is there a selected element
        if (f.elements[i][j].selected)
          element[k++] = f.elements[i][j].value
      }
    }
  }

  // set the action to selected element
  return element;
}

function checkCustomFirstSelectedElement(action)
{
  f       = document.forms.objectItems;
  element = "";

  // go thru all elements in the form, check <select> elements
  for (i=0; i < f.length; i++)
  {
    if (f.elements[i].type == "select-multiple")
    {
      // check all options of the current <select> element
      for (j=0; j < f.elements[i].length; j++)
      {
        // is there a selected element
        if (element == "" && f.elements[i][j].selected)
          element = f.elements[i][j].value
      }
    }
  }

  // set the action to selected element
  if (element != "")
  {
    f.action = element + action;
    return 1;
  }

  // default action...
  return 0;
}

//
// checkDelElements()
//
// purpose: when the user clicks the delete button, check if there are any items selected.
//          if no objects are selected, alert the user, otherwise the user must confirm the operation.
//

function checkDelElements()
{
  itemsSelected = checkSelectedElements();

  // notify the user, no elements are selected
  if ( itemsSelected == 0 )
  {
    alert(errorTexts[0]);
  }
  else
  {
    // build querystring prior to delete, as we want to make the user aware of his actions
    s = warningTexts[0];
    if ( itemsSelected > 1 )
      s += warningTexts[1];
    else
      s += warningTexts[2];
    s += '?';

    // ask user to confirm deletion
    return confirm( s );
  }

  return false;
}

function checkCustomDelElements()
{
  itemsSelected = checkCustomSelectedElements();

  // notify the user, no elements are selected
  if ( itemsSelected.length == 0 )
  {
    alert(errorTexts[0]);
  }
  else
  {
    // build querystring prior to delete, as we want to make the user aware of his actions
    s = warningTexts[0];
    if ( itemsSelected.length > 1 )
      s += warningTexts[1];
    else
      s += warningTexts[2];
    s += '?';

    // ask user to confirm deletion
    return confirm( s );
  }

  // default value...
  return false;
}

function checkDelUsers()
{
  itemsSelected = checkSelectedElements();

  // notify the user, no elements are selected
  if ( itemsSelected == 0 )
  {
    alert(errorTexts[1]);
  }
  else
  {
    // build querystring prior to delete, as we want to make the user aware of his actions
    s = warningTexts[0];
    if ( itemsSelected > 1 )
      s += warningTexts[3];
    else
      s += warningTexts[4];

    s += '?';

    // ask user to confirm deletion
    if (confirm(s))
    {
      document.forms.objectItems.action = 'manage_deleteUsers';
       document.forms.objectItems.submit();
    }
  }

  return false;
}


//
// checkWebElements()
//
// purpose: when the user clicks a button whos action depends on an item being checked, check if there
//          are any items selected. if no objects are selected, alert the user.
//          if the action is severe, like delete, the user must confirm the operation.
//

function checkWebElements()
{
  itemsSelected = checkSelectedElements();

  // notify the user, no elements are selected
  if ( itemsSelected == 0 )
  {
    alert(errorTexts[1]);
  }
  else
  {
    return true;
  }

  return false;
}


function checkCustomWebElements()
{
  itemsSelected = checkCustomSelectedElements();

  // notify the user, no elements are selected
  if ( itemsSelected.length == 0 )
  {
    alert(errorTexts[1]);
  }
  else
  {
    // return true if there are selected elements
    return true;
  }

  // default value...
  return false;
}

function checkCustomWebFirstElement(action)
{
  itemsSelected = checkCustomFirstSelectedElement(action);

  // notify the user, no elements are selected
  if ( itemsSelected == 0 )
  {
    alert(errorTexts[1]);
  }
  else
  {
    // return true if there are selected elements
    return true;
  }

  // default value...
  return false;
}


//
// toggleSelect(mode)
//
// purpose: toggle the list of checkboxes on/off
//
//

var isSelected  = false;
var sisSelected = false;

function toggleSelect(mode)
{
  var checkCount = 0; // count checkbox elements

  // set checkboxes for current range
  if ((isSelected == false && mode == "lime") || (sisSelected == false && mode == "sys"))
  {
    for (i = 0; i < document.objectItems.length; i++)
    {
      if (mode == "lime")
      {
        if (document.objectItems.elements[i].type == "checkbox")
        {
          if (!document.objectItems.elements[i].isimportant)
          {
            checkCount++;
            if (document.objectItems.elements[i].checked == false)
            {
              document.objectItems.elements[i].checked = true;
              // set background color for selected lines to...
              // toggleRowColor('selected', i+1, 'line' + document.objectItems.elements[i].value, 0);
            }
          }
        }
      }
      else if (mode == "sys")
      {
        if (document.objectItems.elements[i].type == "checkbox")
        {
          if (document.objectItems.elements[i].isimportant)
          {
            checkCount++;
            document.objectItems.elements[i].checked = true;
          }
        }
      }
    }

    if (checkCount != 0)
    {
      if (mode == "lime")
      {
        isSelected = true;
        return isSelected;
      }
      else
      {
        sisSelected = true;
        return sisSelected;
      }
    }

    return false;
  }

  //
  // clear checkboxes for current range
  else
  {
    if (mode == "lime")
    {
      for (i = 0; i < document.objectItems.length; i++)
      {
        if (!document.objectItems.elements[i].isimportant)
        {
          if (document.objectItems.elements[i].checked == true)
          {
            document.objectItems.elements[i].checked = false ;

            // toggle background color of selected rows
            /*
            if (document.objectItems.elements[i].locked)
              toggleRowColor('restoreLocked', i+1, 'line' + document.objectItems.elements[i].value, 1);
            else
              toggleRowColor('restore', i+1, 'line' + document.objectItems.elements[i].value, 1);
            */
          }
        }
      }

      isSelected = false;
      return isSelected;
    }
    else
    {
      for (i = 0; i < document.objectItems.length; i++)
        if (document.objectItems.elements[i].isimportant)
          document.objectItems.elements[i].checked = false ;

      sisSelected = false;

      return sisSelected;
    }
  }
}

function togglePublishFlag(ob)
{
	var fieldname = ob.getAttribute('id');
	var fieldvalue = ob.checked;

	var data = fieldname + '=' + (fieldvalue ? '1' : '0');
	var ajax = new Ajax().Request('post', 'manage_modifyTagsEx', updatePublishStatus, data);
}

function updatePublishStatus(response)
{
	var status = response.responseText;
	var el = document.getElementById('publishFlagStatus');
	if (el)
	{
		if (status == 'PUBLISHED')
		{
			el.src = '/misc_/LimeBase/icon_published.png';
			el.title = el.getAttribute('ptxt');
		}
		else
		{
			el.src = '/misc_/LimeBase/icon_notpublished.png';
			el.title = el.getAttribute('ntxt');
		}
	}
}

//
//
//

var leftButton  = false;
var rightButton = false;
var dragging    = false;
var dragMaxY    = 0;
var dragButton  = -1;
var dragClick   = null;
var dragObject  = null;
var dragOrigin  = null;
var dragShrink  = null;
var dragStart   = null;
var dragType    = 'both';
var dragHide    = true;
var dragOffset  = [0, 0, false];
var cursors     = {'both':'move', 'horizontal':'w-resize', 'vertical':'n-resize'};
var dragItem;
var dragMover;
var oldEl;

function dragInfo()
{
  this.itemId = '';
  this.itemNo = -1;
  this.items = 0;
  this.nodes = null;
  this.columns = 0;
  this.rows = 0;
  this.x = 0;
  this.y = 0;
  this.left = 0;
  this.top = 0;
  this.iX = null;
  this.iY = null;
  this.xDelta = 0;
  this.yDelta = 0;
  this.action = '';
  this.block = null;
  this.parent = null;
  this.firstMove = true;

  //

  this.Init = function(ob, table)
  {
    var scrollPos = getScrollXY();

    this.parent = table;
    this.nodes = table.childNodes;
    this.block = ob.cloneNode(true);
    this.block.id = 'insertDummy';
    this.block.style.filter = 'alpha(Opacity=50)';
    this.mainPos = findPos(table);

    this.x = scrollPos[0] + window.event.clientX - 55;
    this.y = scrollPos[1] + window.event.clientY - 75;
    this.items = this.nodes.length;
    this.columns = parseInt(table.offsetWidth / 110);
    this.rows = parseInt(this.items / this.columns);
    if ((this.items / this.columns) - this.rows > 0.0)
      this.rows += 1;

    // center the drag pos (virtual only - mathematical purposes)
    this.itemId = el.id;
    this.itemNo = this.itemId.split('_');
    this.itemNo = this.itemNo[this.itemNo.length-1] - 1;
    this.itemId = this.itemId.split('_' + (this.itemNo + 1))[0];
    this.itemId = this.itemId.substring(4, this.itemId.length);

    this.left = 120 + (this.itemNo * 110) - 110;
    this.top = parseInt(this.itemNo / this.columns);

    this.iX = this.itemNo;
    this.iY = this.top;
    this.yy = this.mainPos[1] + (this.top * 150) - 75;
    this.firstMove = true;
  }

  this.Drag = function(pos, mouse)
  {
    var action = '';
    var hovX = parseInt((pos[0] + 45) / 110);
    var hovY = this.top + parseInt((pos[1] - this.y + 75) / 150);
    var xx = pos[0] - (120 + (parseInt((pos[0] + 45) / 110) * 110) - 110);
    var yy = pos[1] - (160 + (parseInt((pos[1] + 55) / 150) * 150) - 150)

    if (mouse[1] < this.yy)
      hovY -= 1;

    if (xx < -15)
    {
      action = 'insert before';
    }
    else if (xx > 15)
    {
      action = 'insert after';
    }
    // moving from one row to another always insert before
    if (this.rows > 1)
    {
      if (yy < -40 || yy > 30)
      {
        action = 'insert before';
      }
    }

    //

    this.xDelta = Math.abs(this.iX - hovX);
    this.yDelta = Math.abs(this.iY - hovY);
    if (this.yDelta != 0 || this.xDelta != 0)
      this.action = '';

    if (action != this.action)
    {
      this.action = action;

      if (action == 'insert before')
      {
        if (hovX < this.iX || hovY != this.iY)
        {
          var pos = hovX + 1 + (this.columns * hovY);
          if (pos > this.itemNo)
            pos += 1;

          var rel = document.getElementById('insertDummy');
          if (rel != null)
          {
            this.parent.removeChild(rel);

            var el = this.nodes[pos];
            if (hovX + (this.columns * hovY) >= this.nodes.length-2)
              table.appendChild(this.block);
            else
              el.parentNode.insertBefore(this.block, el);

            dragItem.style.display = 'none';
            this.iX = hovX;
            this.iY = hovY;
          }
          else
          {
            if (this.xDelta != 0 || this.yDelta != 0)
            {
              var el = this.nodes[pos];
              el.parentNode.insertBefore(this.block, el);

              dragItem.style.display = 'none';
              this.iX = hovX;
              this.iY = hovY;
              this.firstMove = false;
            }
          }
        }
      }
      else if (action == 'insert after')
      {
        if (hovX > this.iX)
        {
          var pos = hovX + (this.columns * hovY);
          if (pos > this.itemNo)
            pos += 1;

          var rel = document.getElementById('insertDummy');
          if (rel != null)
          {
            this.parent.removeChild(rel);

            var el = this.nodes[pos];
            el.parentNode.insertBefore(this.block, el.nextSibling);

            dragItem.style.display = 'none';
            this.iX = hovX;
            this.iY = hovY;
          }
          else
          {
            if (this.xDelta > 0 || this.firstMove)
            {
              var el = this.nodes[pos];
              if (this.firstMove)
                el.parentNode.insertBefore(this.block, el.nextSibling);
              else
                el.parentNode.insertBefore(this.block, el);

              dragItem.style.display = 'none';
              this.iX = hovX;
              this.iY = hovY;
              this.firstMove = false;
            }
          }
        }
      }
    }

    //return 'Current item: ' + this.itemNo + '<br />Items: ' + this.items + ', Columns: ' + this.columns + ', Rows: ' + this.rows + '<br />Start position: ' + this.x + ', ' + this.y + '<br />Adjusted position: ' + this.left + ', ' + this.top + ' (' + this.yy + ')<br /><b>Action:</b> ' + this.action + '<br />mouse: ' +
    //        mouse + ' pos=[' + (pos[0] - this.left) + ', ' + (pos[1] - this.top) + '] : xx, yy=(' + xx + ', ' + yy + ')<br /> hovX=' + hovX + ', iX=' + this.iX + ' ->> DeltaX=' + this.xDelta + ' | hovY=' + hovY + ', iY=' + this.iY + ' -->> DeltaY=' + this.yDelta + '<br />';
  }
}

var DragInfo = new dragInfo();

function doDragStart()
{
  if (!dragDisabled)
  {
    el = event.srcElement;
   	if (el.className == 'thumbnail')
   		el = el.parentNode;

    if (window.event.dataTransfer.getData("text") == null)
    {
      while ((el.id == null) || (el.id == ''))
      {
        if (el.parentElement)
        {
          el = el.parentElement;
        }
        else
        {
          el.id = null;
        }
      }

	   	if (el.className == 'thumbnail')
	   		el = el.parentNode;

      list  = document.getElementById('myList');
      table = list.parentNode;
      lp    = list.offsetParent;
      listY = Math.ceil(lp.offsetTop) + Math.ceil(list.height);
      DragInfo.Init(el, table);

      dragItem = el;
      if (el.dragEnabled || el.dragenabled)
      {
        event.dataTransfer.setData("Text", el.id);
        event.dataTransfer.effectAllowed = "move";

        if (el.className.substring(0, 10) == 'mouseBlock')
        {
          pos = findPos(el);
          el.style.filter = "alpha(Opacity=50)";
          var dest = document.getElementById('mover');
          dest.innerHTML = el.innerHTML;
          dest.style.left = pos[0] + 'px';
          dest.style.top = pos[1] + 'px';
          dest.style.display = "block";
          dragMover = dest;
        }
        else
        {
          el.style.display = "none";
        }

        var dragData = window.event.dataTransfer;
        dragData.effectAllowed = 'move';

        // use the special 'move' cursor when dragging:
        dragData.dropEffect = 'move';
      }
    }
  }
}


function doDrag()
{
  if (!dragDisabled)
  {
    if (dragItem.className.substring(0, 10) != 'mouseBlock')
    {
      list  = document.getElementById('myList');
      lp    = list.offsetParent;
      sct   = document.body.scrollTop;
      if (document.documentElement.scrollTop)
        sct = document.documentElement.scrollTop;
      listY = Math.ceil(lp.offsetTop) + Math.ceil(list.height);

      if (listY > (event.clientY + sct - 20))
      {
        if (oldEl != null)
           oldEl.style.display = "none";
        if (dragItem != null) {
          el = document.getElementById('row0');
          el.style.display = "block";
        }
        oldEl = el;
      }
    }
    else
    {
      try
      {
        var scrollPos = getScrollXY();
        var mouseXY = [scrollPos[0] + window.event.clientX - 55, scrollPos[1] + window.event.clientY - 75];
        var pos = [window.event.clientX - 55, scrollPos[1] + window.event.clientY - 75];
        DragInfo.Drag(mouseXY, pos);
        dragMover.style.left = pos[0] + 'px';
        dragMover.style.top = pos[1] + 'px';
      }
      catch (e)
      {}
    }
  }

  return false;
}


function dragEnter(id)
{
  el = document.getElementById(id);

  if (dragItem.className.substring(0, 10) != 'mouseBlock')
  {
    if ((el != null) && (el != oldEl) && (dragItem != null))
    {
      if (oldEl != null)
        oldEl.style.display = "none";
      oldEl = el;
      el.style.display = "block";
    }

    fnCancelDefault();
  }
}

function dragEnterThumb(id)
{
  el = document.getElementById(id);
  el.style.width = "100px";
  el.style.backgroundColor = "gray";
}

function dragDropped()
{
  if (dragItem.className.substring(0, 10) == 'mouseBlock')
  {
    var oldPos = DragInfo.itemNo;
    var newPos = (DragInfo.iX + (DragInfo.iY * DragInfo.columns));

    if (oldPos == newPos)
    {
      var rel = document.getElementById('insertDummy');
      if (rel != null)
        rel.parentNode.removeChild(rel);
      dragMover.style.display = 'none';
      dragMover.innerHTML = '';
      dragItem.style.filter = 'alpha(Opacity=100)';
      dragItem.style.display = 'block';
      return false;
    }

    dragMover.style.display = 'none';
    dragMover.innerHTML = '';
    dragMover = null;

    newPos -= 1;

    if (newPos >= oldPos)
      newPos += 1;

    window.location = 'manage_dropObject?ids=' + DragInfo.itemId + '&from=' + oldPos + '&to=' + newPos;
    return false;
  }
  else
  {
    if (oldEl != null && dragItem != null)
    {
      myObject    = dragItem.id;
      newPosition = oldEl.id;

      // drop data
      oldEl.style.display = "none";
      oldEl               = null;

      // remove line and row from parameters
      myObject    = myObject.substring(4, myObject.length);

      myIndex     = myObject.lastIndexOf("_");
      myPosition  = myObject.substring(myIndex+1, myObject.length);
      myObject    = myObject.substring(0, myIndex);
      newPosition = newPosition.substring(3, newPosition.length);

      // redirect to the server and manage the object move
      if ((myPosition - newPosition) != 1)
      {
        window.location = 'manage_dropObject?ids=' + myObject + '&from=' + myPosition + '&to=' + newPosition;
      }
      else
      {
        dragItem.style.display = "block";
        dragItem               = null;
      }
    }
    else if (dragItem != null)
    {
      dragItem.style.display = "block";
      dragItem = null;
    }
  }
}

function debug(s, empty)
{
  var el = document.getElementById('debugInfo');
  if (el)
  {
    if (empty)
      el.innerHTML = '';

    el.innerHTML += s + '<br />';
  }
}

// extended mouse library

function translateButton(button, mode)
{
	if (mode == 0)
	{
		switch (button)
		{
			case 3:
				button = 2;
				break;
		}
	}

	return button;
}

function mouseDown(e)
{
	if (dragObject)
		return false;

  var srcElement;

  if(e)
  {
    srcElement = e.target;
    dragButton = translateButton(e.which, 0);
  }
  else
  {
    srcElement = event.srcElement;
    dragButton = translateButton(event.button, 1);
  }

	//debug("Button clicked: " + dragButton);

  var draggable = srcElement.getAttribute('allowdrag');
  if (dragButton == 1)
  {
  	dragObject = srcElement;
		if (!draggable)
		{
			try
			{
				while (!draggable && dragObject.nodeName != 'body')
				{
					dragObject = dragObject.parentNode;
					if (dragObject.nodeName != 'body')
						draggable = dragObject.getAttribute('allowdrag');
				}
			}
			catch(E)
			{}
		}

		if (draggable)
		{
	    if (dragObject.getAttribute('dragObject') == 'parent')
	    	dragObject = dragObject.parentNode;

	    leftButton = true;
	    dragType = draggable;
	    dragClick = srcElement;
	    dragHide = dragObject.getAttribute('hide') != 'no' ? true : false;
	    srcElement.style.cursor = cursors[dragType];
	    //debug("Drag type: " + dragType + ", Mouse: " + getMouseXY(e) + ", Obj: " + findPos(dragObject));
		  return false;
	  }
	  return true;
  }
  else if (dragButton == 2)
  {
  	getPositions();
		if (!draggable && 1 == 0)
		{
			while (!draggable && srcElement.nodeName != 'body')
			{
				draggable = srcElement.getAttribute('allowmenu');
				srcElement = srcElement.parentNode;
			}
		}

		if (draggable)
		{
	    if (srcElement.getAttribute('dragObject') == 'parent')
	    	srcElement = srcElement.parentNode;

			var index = srcElement.getAttribute('index');
			if (index != null)
			{
		  	rightButton = true;
		  	dragObject = srcElement;
		  	var p = placements[index];
		  	p.menu();
		  	debug("MENU" + index);
		  }
		}
	  return false;
  }

  return true;
}

//
var box1 = null;
var box2 = null;

function mouseMove(e)
{
  if (leftButton)
  {
		if (dragObject == null)
		  return false;

    if (!dragging)
    {
      // init drag
      dragging = true;
      dragStart = findPos(dragObject);
      dragMaxY = findPos(dragObject.parentNode);
      box1 = document.getElementById('hidertop');
      box2 = document.getElementById('hiderbot');

      debug("Drag start: " + dragStart + " (" + dragObject.nodeName + ")");
      dragOffset = getMouseXY(e);
      debug("Drag mouse: " + dragOffset + ", Boundaries: " + dragMaxY);
/*
      if (!dragStart[2])
      {
        dragOffset[0] = dragOffset[0] - dragStart[0];
	      dragOffset[1] = dragOffset[1] - dragStart[1];
      }
      debug('Drag offset=' + dragOffset + " (mousexy corrected)");
      */
    }
    else
    {
      if (dragging)
      {
        var xy = getMouseXY(e);
        var xo = dragOffset;

        if (dragType == 'both' || dragType == 'horizontal')
          dragObject.style.left = xy[0] - xo[0] + 'px';
        if (dragType == 'both' || dragType == 'vertical')
        {
        	var d = xo[1] - xy[1];
        	//debug(xo[1] + ", " + xy[1] + " = " + d + " :> " + (dragStart[1] - d));
        	var y1 = y = dragStart[1] - d + 5;

        	var h1 = y1 - dragMaxY[1] - 4;
					var h2 = dragMaxY[4] - y1 + dragStart[4] - 5;

        	if ((y1 - 5) < dragMaxY[1])
        	{
        		y1 = 5 + dragMaxY[1];
        		h1 = 0;
        	}
        	else if ((y1 + dragStart[4]) > (dragMaxY[1] + dragMaxY[4] - 5))
        	{
        		y1 = dragMaxY[1] + dragMaxY[4] - dragStart[4] - 5;
        		h2 = y1 - 4;
        		h1 = y1 - dragMaxY[1] - 4;
        	}

        	var y3 = y1 + dragStart[4];
					var h2 = (dragMaxY[4] + dragMaxY[1]) - y3 - 5;

        	if (h1 < 0) h1 = 0;
        	if (h2 < 0) h2 = 0;

          dragObject.style.top = y1 + 'px';
        	box1.style.height = h1 + 'px';
        	box2.style.top = y3 + 'px';
        	box2.style.height = h2 + 'px';
        }
      }
    }
  }
}

//

function mouseReleased(e)
{
  if (dragging)
  {
    var xy = getMouseXY(e);
  	var dropSpot = [xy[0] - dragOffset[0], xy[1] - dragOffset[1]];
		debug("Dropped: " + dropSpot + ", " + findPos(dragObject));

  	dragging = false;

    debug("Drag 'n dropped: " + dropSpot);
	  debug("-------------------------------");
  }

  if (dragClick)
    dragClick.style.cursor = 'n-resize';

	if (dragButton == 1)
	{
		//var menu = document.getElementById('limedesk_menu')
		//if (menu) LimeDesk.desk.removeChild(menu);
	}

  leftButton = false;
  rightButton = false;
  dragging = false;
  dragType = 'both';
  dragOffset = [0, 0, false];
  //dragObject = false;
  dragClick = false;
  dragObject = null;
}

function fnCancelDefault()
{
  event.returnValue = false;
  event.dataTransfer.dropEffect = "move";
}


// capture events
document.ondragstart = doDragStart;

// --------------------------------------------------------------------------- */

function button_over(eButton)
{
   eButton.style.backgroundColor = "#B5BDD6";
   eButton.style.borderColor = "darkblue darkblue darkblue darkblue";
}

function button_out(eButton)
{
  eButton.style.backgroundColor = "threedface";
  eButton.style.borderColor = "threedface";
}

function button_down(eButton)
{
  eButton.style.backgroundColor = "#8494B5";
  eButton.style.borderColor = "darkblue darkblue darkblue darkblue";
}

function button_up(eButton)
{
  eButton.style.backgroundColor = "#B5BDD6";
  eButton.style.borderColor = "darkblue darkblue darkblue darkblue";
  eButton = null;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

activeSection = null;
colorType     = 0;

function cmdExec(sectionName, cmd, opt)
{
  section = document.getElementById(sectionName);
  button  = document.getElementById('tblTxtHtml_' + sectionName);

  if (button != null)
  {
    if (button.isHTMLMode)
    {
      alert("Please select 'Edit in design mode'");
      return;
    }
  }

  section.focus();
  document.execCommand(cmd,"",opt);
  // document.execCommand(cmd);

}

function setMode(sectionName)
{

   var sTmp;

  section = document.getElementById(sectionName);
  button  = document.getElementById('tblTxtHtml_' + sectionName);

  if (!button.isHTMLMode)
  {
    sTmp = section.innerHTML;
    section.innerText = sTmp;
    button.innerHTML  = '<img src="/misc_/LimeBase/design.gif" border="0" width="24" height="16">';
    button.title      = "Vis i designmodus";
    button.isHTMLMode = true;
    section.contentEditable = false;
  }
  else
  {
    sTmp = section.innerText;
    section.innerHTML = sTmp;
    if (button != null)
    {
      button.innerHTML = '<img src="/misc_/LimeBase/html.gif" border="0" width="24" height="16">';
      button.title     = "Vis HTML-koder";
    }
    button.isHTMLMode = false;
    section.contentEditable = false;
  }

  section.focus();
}

function insertImage(sectionName)
{
  button  = document.getElementById('tblTxtHtml_' + sectionName);

  if (button.isHTMLMode)
  {
    alert("Please select 'Edit in design mode'");
    return;
  }

  var sImgSrc = prompt("Insert Image File (You can use your local image file) : ","http://www.snapper.no/27098/images/Volvo_FH12.jpg");
  if (sImgSrc != null)
    cmdExec(sectionName, "InsertImage",sImgSrc);
}

function foreColor(sectionName)
{
  var arr = showModalDialog("selcolor.htm","","font-family:Verdana; font-size:12; dialogWidth:30em; dialogHeight:34em" );
  if (arr != null) cmdExec("idContent", "ForeColor", arr);
}

function isTextSelected()
{
  if (foo.document.selection.type == "Text")
  {
    return true;
  }
  else
  {
    return false;
  }
}

function showColor(oBox, oColor)
{
  oBox.innerHTML = oColor.style.backgroundColor.toUpperCase();
  oBox.style.backgroundColor = oColor.style.backgroundColor
}

function doColor(oColor)
{
  if (colorType == 1)
  {
    myCommand = 'BackColor'
  } else {
    myCommand = 'ForeColor'
  }

  section = null;

  if (activeSection != null)
  {
    section = document.getElementById(activeSection);
    section.focus();
    document.execCommand(myCommand, false, oColor.innerHTML);
  }

  activeSection = null;
  oPopup.hide()
}

/*
var oPopup = window.createPopup();
function showMenu(sectionName, menu, width, height)
{
  var lefter   = event.clientX;
  var leftoff  = event.offsetX
  var topper   = event.clientY;
  var topoff   = event.offsetY;
  var oPopBody = oPopup.document.body;

  activeSection = sectionName;

  var HTMLContent    = eval(menu).innerHTML;
  oPopBody.innerHTML = HTMLContent;
  oPopup.show(lefter - leftoff - 2, topper - topoff + 22, width, height, document.body);

  return false;
}
*/

// Dynamic Version by: Nannette Thacker
// http://www.shiningstar.net -->
// Original by :  Ronnie T. Moore -->
// Web Site:  The JavaScript Source -->
// Use one function for multiple text areas on a page -->
// Limit the number of characters per textarea -->

function textCounter(field, cntfield, maxlimit)
{
  // if too long...trim it!
  if (field.value.length > maxlimit)
    field.value = field.value.substring(0, maxlimit);
  // otherwise, update 'characters left' counter
  else
    cntfield.value = maxlimit - field.value.length;
}


swapFields = new Array()

function prepareSave()
{
  for (index = 0; index < swapFields.length; index++)
  {
    divSection = document.getElementById(swapFields[index] + '_div');
    textObject = eval("document.Form1." + swapFields[index]);
    textObject.value = divSection.innerHTML
  }

  return false;
}

function addToSwapList(swapField)
{
  swapFields[swapFields.length] = swapField
}

function checkField(Which)
{
  var el = Which + 'ModeB';

  d = document.getElementById(el);

  if (d != null)
  {
    d.checked = true;
  }
}

function validateField(Which)
{
  DayObject = eval("document.Form1." + Which + "Day");
  MonthObject = eval("document.Form1." + Which + "Month");
  YearObject = eval("document.Form1." + Which + "Year");

  if (DayObject.type == 'hidden' && MonthObject.type == 'hidden' && YearObject.type == 'hidden')
    return;

  Day = DayObject[DayObject.selectedIndex].text;
  Month = MonthObject[MonthObject.selectedIndex].value;
  Year = YearObject[YearObject.selectedIndex].text;

  HourObject = eval("document.Form1." + Which + "Hour");
  if (HourObject && HourObject.type != 'hidden')
    Hour = HourObject[HourObject.selectedIndex].text;
  else
    Hour = 0

  MinuteObject = eval("document.Form1." + Which + "Minute");
  if (MinuteObject && MinuteObject.type != 'hidden')
    Minute = MinuteObject[MinuteObject.selectedIndex].text;
  else
    Minute = 0

  TextObject = eval("document.Form1." + Which)
  TextObject.value = MonthObject.selectedIndex+1
}

//set todays date
Now = new Date();
NowDay = Now.getDate();
NowMonth = Now.getMonth();
NowYear = Now.getYear();
NowHour = Now.getHours();
NowMinute = Now.getMinutes();
if (NowYear < 2000) NowYear += 1900; //for Netscape

//function for returning how many days there are in a month including leap years
function DaysInMonth(WhichMonth, WhichYear)
{
  var DaysInMonth = 31;
  if (WhichMonth == "4" || WhichMonth == "6" || WhichMonth == "9" || WhichMonth == "11") DaysInMonth = 30;
  if (WhichMonth == "2" && (WhichYear/4) != Math.floor(WhichYear/4))  DaysInMonth = 28;
  if (WhichMonth == "2" && (WhichYear/4) == Math.floor(WhichYear/4))  DaysInMonth = 29;

  return DaysInMonth
}

//function to change the available days in a months
function ChangeOptionDays(Which)
{
  DaysObject = eval("document.Form1." + Which + "Day");
  MonthObject = eval("document.Form1." + Which + "Month");
  YearObject = eval("document.Form1." + Which + "Year");

  Month = MonthObject[MonthObject.selectedIndex].value;
  Year = YearObject[YearObject.selectedIndex].text;

  DaysForThisSelection = DaysInMonth(Month, Year);
  CurrentDaysInSelection = DaysObject.length;
  if (CurrentDaysInSelection > DaysForThisSelection)
  {
    for (i=0; i<(CurrentDaysInSelection-DaysForThisSelection); i++)
    {
      DaysObject.options[DaysObject.options.length - 1] = null
    }
  }
  if (DaysForThisSelection > CurrentDaysInSelection)
  {
    for (i=0; i<(DaysForThisSelection-CurrentDaysInSelection); i++)
    {
      NewOption = new Option(DaysObject.options.length + 1);
      DaysObject[DaysObject.length] = NewOption;
    }
  }
  if (DaysObject.selectedIndex < 0) DaysObject.selectedIndex == 0;

  validateField(Which)
}

//function to set options to today
function SetToToday(Which)
{
  DayObject = eval("document.Form1." + Which + "Day");
  MonthObject = eval("document.Form1." + Which + "Month");
  YearObject = eval("document.Form1." + Which + "Year");

  if (DayObject.type == 'hidden' && MonthObject.type == 'hidden' && YearObject.type == 'hidden')
    return;

  for (i = 0; i < YearObject.length; i++)
  {
    if (YearObject[i].value == NowYear)
    {
      YearObject[i].selected = true;
    }
  }

  MonthObject[NowMonth].selected = true;

  HourObject = eval("document.Form1." + Which + "Hour");
  if (HourObject && HourObject.type != 'hidden')
    HourObject[NowHour].selected = true;

  MinuteObject = eval("document.Form1." + Which + "Minute");
  if(MinuteObject  && MinuteObject.type != 'hidden')
    MinuteObject[NowMinute].selected = true;

  ChangeOptionDays(Which);

  DayObject[NowDay-1].selected = true;
}

//function to set options to today
function SetDate(Which, year, month, day, hour, minute)
{

  DayObject   = eval("document.Form1." + Which + "Day");
  MonthObject = eval("document.Form1." + Which + "Month");
  YearObject  = eval("document.Form1." + Which + "Year");
  var mode    = 1;

  if (DayObject.type != 'hidden' && MonthObject.type != 'hidden' && YearObject.type != 'hidden')
  {
    mode = 3;
    FirstYear = YearObject.options[0].value;
  }

  try
  {
    if (mode & 2)
    {
      if (year < FirstYear)
        year = NowYear;

      YearObject[ year - FirstYear].selected = true;
      MonthObject[month-1].selected = true;
    }

    HourObject = eval("document.Form1." + Which + "Hour");
    if (HourObject && HourObject.type != 'hidden')
      HourObject[hour].selected = true;

    MinuteObject = eval("document.Form1." + Which + "Minute");
    if(MinuteObject  && MinuteObject.type != 'hidden')
      MinuteObject[minute].selected = true;

    if (mode & 2)
    {
      ChangeOptionDays(Which);

      DayObject[day-1].selected = true;
    }
  }
  catch (e)
  {}
}



//function to write option years plus x
function WriteYearOptions(from, to)
{
  line       = "";
  YearsAhead = to - from;

  for (i=0; i < YearsAhead; i++)
  {
    line += "<OPTION value=\"" + (from + i) + "\">";
    line += from + i;
  }

  return line;
}

//function to write option years plus x
function WriteHourOptions(YearsAhead)
{
  line = "";
  for (i=1; i<25; i++)
  {
    line += "<OPTION>";
    line += i;
  }
  return line;
}

function WriteRangeOptions(start, end)
{
  line = "";
  for (i=start; i <= end; i++)
  {
    line += "<OPTION>";
    if (i < 10)
      line += '0';
    line += i;
  }
  return line;
}

/* date selection with three modes:
 *
 * mode 3: Date and time
 * mode 2: Date only
 * mode 1: Time only
 *
 */
function dateSelect(Which, mode, from, to)
{
  if (from == null)
    from = 1995;

  if (to == null)
    to = from + 20;

  if (mode & 2)
  {
    document.write('<SELECT name="' + Which + 'Day" onchange="checkField(\'' + Which + '\'); validateField(\'' + Which + '\')">');
    document.write(WriteRangeOptions(1, 31));
    document.write('</SELECT>');

    document.write('<SELECT name="' + Which + 'Month" onchange="checkField(\'' + Which + '\'); ChangeOptionDays(\'' + Which +'\')">');

    for (i=1; i <= 12; i += 1)
    {
      document.write("<option value=\"" + i + "\" i18n:translate=\"\">" + monthNames[i-1] + "</option>\n");
    }
    document.write('</SELECT>');

    document.write('<SELECT name="' + Which + 'Year"  onchange="checkField(\'' + Which + '\'); ChangeOptionDays(\'' + Which +'\')">');
    document.write(WriteYearOptions(from, to));
    document.write('</SELECT> ');
  }
  else
  {
    document.write('<input type="hidden" name="' + Which + 'Day" value="1">');
    document.write('<input type="hidden" name="' + Which + 'Month" value="1">');
    document.write('<input type="hidden" name="' + Which + 'Year" value="1970">');
  }

  if (mode & 1)
  {
    document.write('<SELECT name="' + Which + 'Hour" onchange="checkField(\'' + Which + '\'); validateField(\'' + Which +'\')">');
    document.write(WriteRangeOptions(0, 23));
    document.write('</SELECT>');


    document.write('<SELECT name="' + Which + 'Minute" onchange="checkField(\'' + Which + '\'); validateField(\'' + Which +'\')">');
    document.write(WriteRangeOptions(0, 59));
    document.write('</SELECT>');
  }
  else
  {
    document.write('<input type="hidden" name="' + Which + 'Hour" value="0">');
    document.write('<input type="hidden" name="' + Which + 'Minute" value="0">');
  }

  document.write('<input type="hidden" name="' + Which + '" value="">');
}


//
//
//

function confirmCancelChanges(s)
{
  if (formIsModified)
    return confirm(s);

  return true;
}

function formIsChanged()
{
  formIsModified = true;
  alert("changed");
}


//
//
//

function confirmCancelChanges(s)
{
  if (formIsModified)
    return confirm(s);

  return true;
}

function formIsChanged()
{
  formIsModified = true;
  alert("changed");
}

//
//

function confirmCancelChanges(s)
{
  if (formIsModified)
    return confirm(s);

  return true;
}

function formIsChanged()
{
  formIsModified =   true;
  alert("changed");
}

disabledfields = [];
function initPage(e)
{
  el = document.body;
  if (el.addEventListener)
  {
    tlist = document.getElementsByTagName("input");
    for (i = 0; i < tlist.length; i++)
    {
      var cb = tlist[i].getAttribute('cancelBubble');
      if (cb == "yes")
        tlist[i].addEventListener("click", cancelBubbling, false);
    }
  }

	var debugdiv = document.createElement('div');
	debugdiv.id = 'debugInfo';
	el.appendChild(debugdiv);

  // do other initializations
  setImages();
  //setupEditors();
  disableFields();
}

function disableFields()
{
	for (var i=0; i < disabledfields.length; i++)
	{
		var field	= document.getElementById('tf_' + disabledfields[i]);
		if (field) field.disabled = true;
	}
}

function enableFields()
{
	for (var i=0; i < disabledfields.length; i++)
	{
		var field	= document.getElementById('tf_' + disabledfields[i]);
		if (field) field.disabled = false;
	}
}

function searchOnEnter(e, url)
{
  if (!e)
  	e = window.event;

  var kC = (window.event) ? event.keyCode : e.which;

  if (kC == 13)
  {
  	document.location.href = url;
    return false;
  }

  return true;
}

function cancelBubbling(e)
{
  if (!e)
    e = window.event;

  if (e)
  {
    var tg = (e.target) ? e.target : e.srcElement
    var cb = tg.getAttribute('cancelBubble')

    if (cb == "yes")
    {
      if (e.stopPropagation)
        e.stopPropagation();
      else
        e.cancelBubble = true;
    }
  }
}

function disableSaveButtons()
{
	var el = document.getElementById('form1');
	if (el)
	{
		var action = 'Add';
		if (el.action == 'manage_modify') action = 'Modify';
		var valid = true;

		var inps = el.getElementsByTagName('input');
		for (var i=0; i < inps.length; i++)
		{
			var inp = inps[i];
			if (inp.getAttribute('required') && (inp.getAttribute('required') == action || inp.getAttribute('required') == 'Always'))
			{
				if (inp.value == '')
					valid = false;
			}
		}

		if (!valid)
		{
			alert("Du har ikke fylt ut alle nødvendige felt i skjemaet!");
			return false;
		}
	}

	enableFields();
  tags = document.getElementsByTagName('input');

  for(i=0; i < tags.length; i++)
  {
  	var tname = tags[i].getAttribute('name');
    if(tname == 'save' || tname == 'save_and_new')
      tags[i].disabled = true;
  }

  var el = document.getElementById('unlockButton');
  if (el != null)
    el.style.visibility = "visible";

  el = document.getElementById('tf_file');
  if (el)
  {
 		var value = el.value;
  	var f = document.getElementById('form1');
  	if (f)
  	{
  		var metatype = f.getAttribute('metatype');
  		if (metatype == 'LimeTVSubConcept' || metatype == 'LimeTVConcept')
  		{
  			value = ''
  		}

	  	if (value == '')
		  	f.target = '_self';
		  else
		  	f.target = 'genericProgress';
		}
  }
}

function enableSaveButtons()
{
	disableFields();
  tags = document.getElementsByTagName('input');

  for(i=0; i < tags.length; i++)
  {
    if(tags[i].getAttribute('name') == 'save' || tags[i].getAttribute('name') == 'save_and_new')
      tags[i].disabled = false;
  }

  el = document.getElementById('unlockButton');
  if (el != null)
    el.style.visibility = "hidden";
}

function toggleSelections(el)
{
  id = el.id.split('_');
  id = id[1];

  if (el.checked == false)
  {
    sb = document.getElementById('select_' + id);
    for (i = 0; i < sb.length; i++)
    {
      sb[i].selected = false;
    }
  }
  //if (document.objectItems.elements[i].checked == false)
}

function setParentCategory(el)
{
  id = el.id.split('_')
  id = id[1];

  if (el.value != "")
  {
    cb = document.getElementById('checkbox_' + id);
    cb.checked = true;
  }
}

function openMessageDialog(id)
{
  el = document.getElementById('MessageDialog');
  if (el != null)
  {
    el.style.top = 300 + document.documentElement.scrollTop;
    el.innerHTML='<iframe src="LimeNotifyInbox/readMessage?id=' + id + '" width="400" height="300" border="0" frameborder="0"></iframe>';
    el.style.visibility = "visible";

    image = document.getElementById('img_' + id);
    if (image != null)
    {
      image.src = '/misc_/LimeNotifyInbox/env_read.gif';
    }
  }
}

function closeMessageDialog()
{
  el = document.getElementById('MessageDialog');
  if (el != null)
  {
    el.innerHTML='';
    el.style.visibility = "hidden";
  }
}

function toggleNonTranslated()
{
  el = document.getElementById('nontranslatedlist');
  if (el != null)
  {
    if (el.style.display == "inline")
      el.style.display = "none";
    else
      el.style.display = "inline";
  }
}

prevtab      = null;
prevpriority = null;
function togglePriority(id)
{
  if (prevpriority != null)
    prevpriority.style.display = "none";

  if (prevtab != null)
    prevtab.className = "indextabsDarkColor";

  el = document.getElementById(id);
  if (el != null)
  {
    prevpriority = el;
    el.style.display = "block";
  }

  el = document.getElementById('tab_' + id);
  if (el != null)
  {
    prevtab = el;
    el.className = "indextabsBrightColor";
  }
}

function indextabOut(id)
{
  el = document.getElementById('tab_' + id);
  if (el != null && el != prevtab)
    el.className = "indextabsDarkColor";
}

function createNewRule()
{
  var rules  = document.getElementById('rules');
  var rsrce = document.getElementById('rule');
  if (rules != null && rsrce != null)
  {
    rules.innerHTML += rsrce.innerHTML;
  }
}

function removeRule()
{
  el = event.srcElement;
  if (el.parentElement)
  {
    el = el.parentElement;
    el.style.display = "none";
    el.innerHTML = "";
  }
}

function updateField(id, length)
{
  var dest = document.getElementById('box_' + id);
  var value = '';

  if (dest != null)
  {
    for (var i = 0; i < length; i++)
    {
      var el = document.getElementById('box_' + id + '_' + i);
      if (el != null)
      {
        if (value != '')
          value += ':'
        value += el.value;
      }
    }

    dest.value = value;
  }
}


/* progress bar */

function InsertProgressBar(title, id, url, classname)
{
  if (url != null && url != '')
    url = ' src="' + url + '"';
  else
    url = '';

  if (classname == null)
    classname = 'progress';

  var output = '' +
               '   <di' + 'v class="lime_' + classname + 'bar" id="' + id + '_progressbar">' +
               '     <di' + 'v class="title" id="' + id + '_progress_title">' + title + '<\/di' + 'v>' +
               '     <di' + 'v class="bar"><di' + 'v class="meter" id="' + id + '_progress_bar"><\/di' + 'v><\/di' + 'v>' +
               '     <di' + 'v class="amount" id="' + id + '_progress_num" onclick="toggleProgressDebug(\'' + id + '\');"><\/di' + 'v>' +
               '     <di' + 'v class="text" id="' + id + '_progress_text"><\/di' + 'v>' +
               '     <ifram' + 'e class="lime_progressbuffer"' + url + ' style="display: none;" name="' + id + '" id="' + id + '" width="100%"><\/ifram' + 'e>' +
               '   <\/di' + 'v>';
  document.write(output);
}

function toggleProgressDebug(id)
{
	//UpdateProgressBar(id, 40, '', '', null, null);
	var el = document.getElementById(id);
	if (el)
	{
		var s = el.style.display;
		if (s == 'block')
			el.style.display = 'none';
		else
			el.style.display = 'block';
	}
}

//
//

function EnableProgressBar(id)
{
  var el = document.getElementById(id + '_progressbar')
  {
    if (el != null)
      el.style.display = 'block';
  }
}

//
//

function UpdateProgressBar(id, progress, status, url, millis, method)
{
  timer = null;
  clearTimeout(timer);

  if (millis == null)
    millis = 5000;

  var el = document.getElementById(id + '_progressbar');
  if (el != null)
  {
    el.style.display = 'block';
  }

  el = document.getElementById(id + '_progress_bar');
  if (el != null)
  {
    el.style.width = progress + '%';
  }

  el = document.getElementById(id + '_progress_num');
  if (el != null)
  {
    el.innerHTML = progress + '%';
  }

  // update the text window
  if (status != '')
  {
    el = document.getElementById(id + '_progress_text');
    if (el != null)
    {
      el.innerHTML = status;
    }
  }

  // prepare for redirect
  if (url != null && url != '')
  {
    timer = setTimeout("moveOn(url)", parseInt(millis));
  }

  if (progress >= 100)
  {
    if (millis > 0)
      timer = setTimeout("HideProgressBar('" + id + "')", parseInt(millis));

    if (method != null && method['call'] != '')
    {
      eval(method['call']);
    }
  }

  // clear frame buffer
  el = document.getElementById(id);
  if (el != null) window[id].window.document.clear;
}

function UpdateProgressTitle(id, header)
{
  var el = document.getElementById(id + '_progress_title');
  if (el) el.innerHTML = header;
}

function moveOn(URL)
{
  if (redirect != '');
    document.location.href = URL;
}

function reloadPage(URL)
{
	if (!rpi)
	{
		timer = setTimeout('_reloadPage("' + URL + '")', 500);
		rpi = true;
	}
}

function _reloadPage(URL)
{
	if (top.frames.length > 1)
	{
  	top.frames[1].location.href = URL;
		top.frames[0].location.reload();
	}
	else
	{
  	parent.location.href = URL;
  }

	clearTimeout(timer);
	rpi = false;
}

function reloadParent()
{
	timer = setTimeout('_reloadParent()', 5000);
}

function _reloadParent()
{
	parent.location.reload();
}

function openDialog(id, text)
{
  alert(text);
  HideProgressBar(id);
}

function HideProgressBar(id)
{
  var el = document.getElementById(id + '_progressbar');
  if (el != null)
  {
    el.style.display = 'none';
  }

  el = document.getElementById(id + '_progress_bar');
  if (el != null)
  {
    el.style.width = '0%';
  }

  el = document.getElementById(id + '_progress_num');
  if (el != null)
  {
    el.innerHTML = '';
  }

  // clear the text window
  if (status != '')
  {
    el = document.getElementById(id + '_progress_text');
    if (el != null)
    {
      el.innerHTML = '';
    }
  }
}

function findPos(obj)
{
  var curleft = curtop = 0;
  var domobj = obj;
  var curwidth = obj.offsetWidth;
  var curheight = obj.offsetHeight;

  if (obj.offsetParent)
  {
  	//debug("Alpha");
    curleft = obj.offsetLeft;
    curtop = obj.offsetTop;
    while (obj = obj.offsetParent)
    {
    	//debug("Bravo: " + obj.offsetTop + ", " + domobj.scrollTop);
    	domobj = domobj.parentNode;
      curleft += obj.offsetLeft;
      curtop += obj.offsetTop;
      //curtop -= domobj.scrollTop;
    }
  }

  return [curleft, curtop, 0, curwidth, curheight];
}

function getMouseXY(e)
{
  tempX = 0;
  tempY = 0;

  if (!e)
  { // grab the x-y pos.s if browser is IE
    try
    {
      tempX = event.clientX + document.body.scrollLeft;
      tempY = event.clientY + document.body.scrollTop;
    }
    catch (e)
    {}
  }
  else
  {  // grab the x-y pos.s if browser is NS
    tempX = e.pageX - window.pageXOffset;
    tempY = e.pageY - window.pageYOffset;
  }

  // catch possible negative values in NS4
  if (tempX < 0)
    tempX = 0;
  if (tempY < 0)
    tempY = 0;

  return [tempX, tempY];
}

function getScrollXY()
{
  var scrOfX = 0, scrOfY = 0;
  if( typeof( window.pageYOffset ) == 'number' )
  {
    //Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  }
  else if (document.body && ( document.body.scrollLeft || document.body.scrollTop))
  {
    //DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  }
  else if (document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop))
  {
    //IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }

  return [scrOfX, scrOfY];
}

//
//

function toggleTools(el)
{
  pl = el.parentNode;
  if (pl != null)
  {
    if (pl.getAttribute('selected') == 'yes')
    {
      pl.removeAttribute('selected');
      pl.style.backgroundColor = iconBorderBgColor;
    }
    else
    {
      pl.setAttribute('selected', 'yes');
      pl.style.backgroundColor = iconBorderSelColor;
    }
  }
}

function hoverThumb(el)
{
  var selected = false;
  if (el.getAttribute('selected') == 'yes')
    selected = true;

  el.className = 'mouseBlock active';
  if (!selected)
  {
    el.style.backgroundColor = iconBorderBgColor;
    el.style.borderColor = iconBorderOnColor;
  }
}

function leaveThumb(el)
{
  var selected = false;
  if (el.getAttribute('selected') == 'yes')
    selected = true;

  el.className = 'mouseBlock';
  if (!selected)
  {
    el.style.backgroundColor = iconBorderOffColor;
    el.style.borderColor = iconBorderOffColor;
  }
}


/* */

function openBigView(img)
{
  var el = document.getElementById('bigViewer');
  if (el)
  {
    var url = img.getAttribute('url');
    el.innerHTML = '<img src="' + url + '" alt="" />';
    el.style.display = 'block';
  }
}

function closeBigView()
{
  var el = document.getElementById('bigViewer');
  if (el)
  {
    el.style.display = 'none';
    el.innerHTML = '';
  }
}

function serialize(node)
{
	if (!node) return null;

	var ob = {};
	var i = node.childNodes.length-1;
	do
	{
		ob[node.childNodes[i].nodeName] = (node.childNodes[i].firstChild) ? node.childNodes[i].firstChild.nodeValue : '';
	} while (i--);

	return ob;
}

function Ajax(parent)
{
	this.Request = function()
	{
	  function handleReadyState(o, callback, parent)
	  {
	    var poll = window.setInterval(function()
	    {
	      if(o && o.readyState == 4)
	      {
	        window.clearInterval(poll);

	      	if (o.status == 200)
	      	{
		        if (callback)
		          callback(o, parent);
		      }
		      else
		      {
						debug("Error " + o.status + ": " + o.statusText + '<br /><br />-----------------------');
		      }
	      }
	    }, 50);
	  }

	  var http;
	  try
	  {
	    http = new XMLHttpRequest();
	  }
	  catch(e)
	  {
	    var msxml = ['MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
	    for (var i=0, len = msxml.length; i < len; ++i)
	    {
	      try
	      {
	        http = new ActiveXObject(msxml[i]);
	        break;
	      }
	      catch(e)
	      {}
	    }
	  }

	  return function(method, uri, callback, postData)
	  {
	    if (http.overrideMimeType)
	      http.overrideMimeType('text/xml');
	    http.open(method, uri, true);
	   	http.setRequestHeader("Content-Type", "application/xml");
	    handleReadyState(http, callback, parent);
	    http.send(postData || null);
	    return http;
	  };
	}();
}

var AjaxRequest = function()
{
  function handleReadyState(o, callback, parent)
  {
    if (o && o.readyState == 4 && o.status == 200)
    {
      if (callback) callback(o, parent);
    }
  }

  var getXHR = function()
  {
    var http;
    try
    {
      http = new XMLHttpRequest;
      getXHR = function() { return new XMLHttpRequest; };
    }
    catch(e)
    {
      var msxml = [ 'Microsoft.XMLHTTP', 'MSXML2.XMLHTTP', 'MSXML2.XMLHTTP.3.0'];
      var i = msxml.length-1;
      do
      {
        try
        {
          http = new ActiveXObject(msxml[i]);
          getXHR = function()
          {
            return new ActiveXObject(msxml[i]);
          };
          break;
        }
        catch(e) {}
      } while (i--)
    }
    return http;
  };

  return function(method, uri, callback, postData, parent)
  {
		debug(uri, '#00f');
		var http = getXHR();
		if (http.overrideMimeType)
			http.overrideMimeType('text/xml');
		http.open(method, uri, true);
		http.setRequestHeader("Content-Type", "application/xml");
		http.onreadystatechange = function(){handleReadyState(http, callback, parent)};
		http.send(postData || null);
		return http;
  };
}();

//

function setupEditors()
{
	if (edobs.length == 0)
	  return;

	for (var i=0; i < edobs.length; i++)
	{
		var oFCKeditor = edobs[i];
		if (oFCKeditor)
			oFCKeditor.CreateEx();
	}
}

//

var _request = null;

function TreeModel()
{
  this.id = null;
  this.name = null;
  this.variable = null;
  this.selected = null;
  this.body = null;
  this.xml = null;
  this.URL = null;
  this.value = null;
  this.opened = null;
  this.insert = null;

  this.Open = function(variable, id, name, URL)
  {
    this.id = id;
    this.name = name;
    this.variable = variable;

    var el = document.getElementById(this.id);
    if (el)
    {
      this.body = el;
      this.URL = URL;
      this.AjaxRequest('', this.URL, this.LoadTree)
    }

    this.OpenTree();
  }

  // ajax loader / handler

  this.AjaxRequest = function(url, method, handler)
  {
    if (_request)
      _request.abort();

    _request = false;

    if (window.XMLHttpRequest)
    {
      _request = new XMLHttpRequest();
      if (_request.overrideMimeType)
      {
        _request.overrideMimeType('text/xml');
      }
    }
    else if (window.ActiveXObject)
    {
      try
      {
        _request = new ActiveXObject("Msxml2.XMLHTTP");
      }
      catch (e)
      {
        try
        {
          _request = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(e)
        {}
      }
    }

    if (!_request)
    {
      alert('Giving up :( Cannot create an XMLHTTP instance');
      return false;
    }
  }

  //

  this.LoadTree = function()
  {
    if (_request.readyState == 4)
    {
      if (_request.status == 200)
      {
        LTree.BuildTree(_request.responseXML);
      }
    }
  }

  //

  this.OpenTree = function()
  {
    try
    {
      _request.open('GET', this.URL, true);
      _request.onreadystatechange = this.LoadTree;
      _request.send(null);
    }
    catch(E)
    {}
  }

  //

  this.BuildTree = function(xml)
  {
    this.xml = xml;
    var root = xml.getElementsByTagName('tree')[0];
    this.value = this.GetCurrentValue();

    var output = this.GetNodeTree(root);

    if (this.body)
      this.body.innerHTML = output;

    this.Synchronize();
  }

  //

  this.GetNodeTree = function(node, level)
  {
    var output = '';
    var nodes = node.childNodes;

    if (!level) level = 0;

    level++;
    for (var i=0; i < nodes.length; i++)
    {
      var n = nodes[i];
      if (n.nodeName == 'item')
      {
        var cn = parseInt(n.getAttribute('children'));
        var metatype = n.getAttribute('type');
        var action = '';
        var m = 'option';

        if (n.getAttribute('selected') == 'yes')
        {
          var sel = document.getElementById(this.variable);
          if (sel)
          {
            sel.value = n.getAttribute('id');
            this.value = sel.value;
          }
        }

        if (cn > 1)
        {
          m += ' open';
          action = ' onclick="' + this.name + '.ToggleTree(this)"';
        }
        var title = n.getElementsByTagName('title')[0].firstChild.nodeValue;
        var pm = '<div class="' + m + '"' + action + '></div>';

        action = '';
        if (cn > 1)
          action = ' ondblclick="' + this.name + '.ToggleTree(this.parentNode.firstChild)"';

        var sqlId = n.getAttribute('id');
        var icon = '<div class="icon" onclick="' + this.name + '.SelectTree(this);" id="l' + sqlId + 'n' + i + '" sqlid="' + sqlId + '"' + action + '><img src="' + n.getAttribute('icon') + '" alt="" /><div>' + title + '</div></div>';

        if (sqlId == this.value)
          this.opened = 'l' + sqlId + 'n' + i;

        output += '<div class="node closed" id="l' + sqlId + 'n' + i + '" sqlid="' + sqlId + '">' + pm + icon;
        if (cn.length > 0)
          output += this.GetNodeTree(n, level);
        output += '</div>';
      }
    }
    level--;

    return output;
  }

  //

  this.ToggleTree = function(el)
  {
    var node = el.parentNode;
    if (node.className == 'node opened')
    {
      node.className = 'node closed';
      el.className = 'option open';
    }
    else
    {
      node.className = 'node opened';
      el.className = 'option close'
      if (node.childNodes.length < 3)
      {
        this.timer = setInterval('LTree.ShowProgress()', 1000);
        this.insert = node;
        this.OpenNode(node.getAttribute('sqlid'));
      }
    }
  }

  //

  this.SelectTree = function(el)
  {
    if (this.selected != null)
    {
      var tl = document.getElementById(this.selected);
      if (tl)
      {
        tl.childNodes[1].className = 'icon'
      }

      //this.selected.className = 'icon';
    }

    el.className = 'icon selected';
    this.selected = el.parentNode.getAttribute('id');

    var sel  = document.getElementById(this.variable);
    if (sel)
      sel.value = el.parentNode.getAttribute('sqlid');
  }

  //

  this.GetCurrentValue = function()
  {
    if (this.variable)
    {
      var el = document.getElementById(this.variable);
      if (el)
        return el.value;
    }
  }

  //

  this.Synchronize = function()
  {
    if (this.opened)
    {
      var el = document.getElementById(this.opened);
      if (el)
      {
        el.className = 'node opened';
        var n = el.childNodes;
        n[1].className = 'icon selected';
        this.selected = this.opened;

        // UNCOMMENT TO AUTO OPEN DEFAULT NODE
        //this.insert = el;
        //this.OpenNode(el.getAttribute('sqlid'));

        this._Synchronize(el.parentNode);
      }
    }
  }

  this._Synchronize = function(el)
  {
    if (el.id != this.id)
    {
      el.className = 'node opened';
      el.firstChild.className = 'option close';
      this._Synchronize(el.parentNode);
    }
  }

  //

  this.OpenNode = function(sqlid)
  {
    try
    {
      _request.open('GET', this.URL + '&id=' + sqlid, true);
      _request.onreadystatechange = this.AppendToTree;
      _request.send(null);
    }
    catch(E)
    {}
  }

  this.AppendToTree = function()
  {
    if (_request.readyState == 4)
    {
      if (_request.status == 200)
      {
        var xml = _request.responseXML;
        var root = xml.getElementsByTagName('tree')[0];
        var output = LTree.GetNodeTree(root);

        LTree.insert.innerHTML += output;
        LTree.insert.firstChild.className = 'option close';
        clearTimeout(LTree.timer);
      }
    }
  }

  //

  this.ShowProgress = function()
  {
    if (this.insert)
    {
      this.insert.firstChild.className = 'option waiting';
    }
  }
}

var LTree = new TreeModel();

//

function SelectActive(id)
{
  var eSrc = document.getElementById(id + '_src');
  var eDst = document.getElementById(id + '_dst');
  var eValue = document.getElementById(id);

  if (eSrc && eDst)
  {
    for (var i=0; i < eSrc.childNodes.length; i++)
    {
      var node = eSrc.childNodes[i];
      if (node.selected)
      {
        node.selected = false;
        eDst.appendChild(node);
        var newNode = document.createElement('option');
        newNode.value = node.value;
        newNode.innerText = node.innerText;
        newNode.selected = true;
        eValue.appendChild(newNode);
      }
    }
  }
}

function RemoveActive(id)
{
  var eSrc = document.getElementById(id + '_src');
  var eDst = document.getElementById(id + '_dst');
  var eValue = document.getElementById(id);

  if (eSrc && eDst)
  {
    for (var i=0; i < eDst.childNodes.length; i++)
    {
      var node = eDst.childNodes[i];
      if (node.selected)
      {
        node.selected = false;
        eSrc.appendChild(node);

        for (var j=0; j < eValue.childNodes.length; j++)
        {
          var rNode = eValue.childNodes[j];
          if (rNode.value == node.value)
            eValue.removeChild(rNode);
        }
      }
    }
  }
}

function MoveActiveUp(id)
{
  var buffer = [];
  var eSrc = document.getElementById(id + '_src');
  var eDst = document.getElementById(id + '_dst');
  var eValue = document.getElementById(id);
  var nextNode = null;

  if (eSrc && eDst)
  {
    var n = 0;
    var q = null;
    for (var i=0; i < eDst.childNodes.length; i++)
    {
      var node = eDst.childNodes[i];
      buffer[buffer.length] = node;
      if (node.selected)
      {
        n++;
        q = i-1;
        nextNode = document.createElement('option');
        nextNode.selected = false;
        nextNode.value = node.value;
        nextNode.innerText = node.innerText;
      }
    }

    if (n != 1)
      alert("Du må velge ett element for flytting");
    else
    {
      // remove all nodes
      while (eDst.childNodes.length)
      {
        eDst.removeChild(eDst.childNodes[0]);
      }

      // replace the nodes in the new order
      for (var i=0; i < buffer.length; i++)
      {
        if ((nextNode != null && q == i) || (q < 0 && nextNode != null))
        {
          eDst.appendChild(nextNode);
          nextNode = null;
        }

        var newNode = document.createElement('option');
        newNode.selected = false;
        newNode.value = buffer[i].value;
        newNode.innerText = buffer[i].innerText;

        if (!buffer[i].selected)
        {
          eDst.appendChild(newNode);
        }
      }

      ReplicateActive(id);
    }
  }
}

function MoveActiveDown(id)
{
  var buffer = [];
  var eSrc = document.getElementById(id + '_src');
  var eDst = document.getElementById(id + '_dst');
  var eValue = document.getElementById(id);

  if (eSrc && eDst)
  {
    var n = 0;
    for (var i=0; i < eDst.childNodes.length; i++)
    {
      var node = eDst.childNodes[i];
      buffer[buffer.length] = node;
      if (node.selected)
      {
        n++;
      }
    }

    if (n != 1)
      alert("Du må velge ett element for flytting");
    else
    {
      // remove all nodes
      while (eDst.childNodes.length)
      {
        eDst.removeChild(eDst.childNodes[0]);
      }

      // replace the nodes in the new order
      var nextNode = null;
      for (var i=0; i < buffer.length; i++)
      {
        var newNode = document.createElement('option');
        newNode.selected = false;
        newNode.value = buffer[i].value;
        newNode.innerText = buffer[i].innerText;

        if (buffer[i].selected)
        {
          nextNode = newNode;
        }
        else
        {
          eDst.appendChild(newNode);
          if (nextNode != null)
          {
            eDst.appendChild(nextNode);
            nextNode = null;
          }
        }
      }

      if (nextNode)
        eDst.appendChild(nextNode);

      ReplicateActive(id);
    }
  }
}

function ReplicateActive(id)
{
  var eDst = document.getElementById(id + '_dst');
  var eValue = document.getElementById(id);

  while (eValue.childNodes.length)
  {
    eValue.removeChild(eValue.childNodes[0]);
  }

  for (var i=0; i < eDst.childNodes.length; i++)
  {
    var node = eDst.childNodes[i];
    var newNode = document.createElement('option');
    newNode.selected = true;
    newNode.value = node.value;
    newNode.innerText = node.innerText;
    eValue.appendChild(newNode);
  }
}


function EmptySelected(id)
{
  var eSrc = document.getElementById(id + '_src');
  var eDst = document.getElementById(id + '_dst');
  var eValue = document.getElementById(id);

  if (eSrc && eDst)
  {
    while (eDst.childNodes.length)
    {
      var node = eDst.childNodes[0];
      node.selected = false;
      eSrc.appendChild(node);

      for (var j=0; j < eValue.childNodes.length; j++)
      {
        var rNode = eValue.childNodes[j];
        if (rNode.value == node.value)
          eValue.removeChild(rNode);
      }
    }
  }
}

function detectKey(e)
{
	var el = document.getElementById('objectItems');
	if (!el) return true;

  var kC = (window.event) ? event.keyCode : e.keyCode;
  var Esc = (window.event) ? 27 : e.DOM_VK_ESCAPE;
  var Del = (window.event) ? 46 : e.DOM_VK_DELETE;

  if (kC == Del)
  {
  	if (checkDelElements())
  	{
			el.action = 'manage_delObjects';
			el.submit();
  	}
  };
}

function updateThumbImage(url, id)
{
	var el = document.getElementById(id);
	if (el) el.style.backgroundImage = 'url(' + url + ')';
}

//

function getPositions()
{
	var el = document.getElementById('wideselector');
	var pos = findPos(el.parentNode);
}

var wide_lime_redirectURL = 'manage_workspace';
var iewait = false;
var ietimer = false;

function allowWideSelector()
{
	iewait = true;
	initWideSelector();
}

function initWideSelector()
{
	var el = document.getElementById('wideselector');
	if (el) wide_lime_redirectURL = el.getAttribute('redir');
	if (wide_lime_redirectURL == '') wide_lime_redirectURL = 'manage_workspace';

	if (ISIE && !iewait)
	{
		ietimer = setTimeout('allowWideSelector()', 450);
		return true;
	}

	dragDisabled = true;
	var img = document.getElementById('theimage');
	var w = width = img.parentNode.getAttribute('ix');
	var height = img.parentNode.getAttribute('iy');
	var dim = eval('[' + img.parentNode.getAttribute('dim') + ']');
	var r = parseFloat(width) / parseFloat(height);
	var h = 600 / r;
	var shade = (dim.length >= 5) ? dim[4] : 0;
	var el = document.getElementById('wideselector');
	el.style.height = h + 'px';

	var xr = height / h;
	var wr = 16 / 9;
	var wh = w / wr / xr;

	if (dim.length > 0) wh = dim[3];

	if (wh > h) return;
	var pos = findPos(el);

	var h1 = (h - wh) / 2;
	var h2 = wh;
	var y1 = ISIE ? 130 : 128;
	var h3 = h - h1 - h2 + 1;
	var y2 = y1 + h1;
	var y3 = y2 + h2;

	if (dim.length > 0)
	{
		y2 = y1 + dim[1];
		h1 = dim[1];
		y3 = y2 + h2;
		h3 = h - h1 - h2 + 1;
	}

	var shader = shade == 0 ? 'barred.gif' : 'barred_white.gif';
  var html = '<div id="hidertop" style="position: absolute; top: ' + y1 + 'px; left: 5px; width: 600px; height: ' + h1 + 'px; background: black url(/misc_/LimeBase/' + shader + '); font-size: 1px; filter: alpha(opacity: 65); opacity: .65;"></div>' +
		       	 '<div id="selector" style="position: absolute; top: ' + y2 + 'px; left: 5px; width: 600px; height: ' + h2 + 'px; border: #999 0px solid; border-left: 0px; border-right: 0px; font-size: 1px; cursor: n-resize; z-index: 9999;" allowdrag="vertical"><img src="/misc_/LimeBase/pixel.gif" alt="" width="600" height="' + h2 + '" /></div>' +
		       	 '<div id="hiderbot" style="position: absolute; top: ' + y3 + 'px; left: 5px; width: 600px; height: ' + h3 + 'px; background: black url(/misc_/LimeBase/' + shader + ') bottom left; font-size: 1px; filter: alpha(opacity: 65); opacity: .65;"></div>';
  el.innerHTML += html;

  // insert format selectors
  var shades = '<div style="float: right;" id="shades">Shades: <input type="radio" name="shade" value="0" ' + ((shade == 0) ? ' checked="checked"' : '') + ' onclick="setShade(\'black\', \'barred.gif\');" /> Dark <input type="radio" name="shade" value="1" onclick="setShade(\'white\', \'barred_white.gif\');"' + ((shade == 1) ? ' checked="checked"' : '') + ' /> Bright</div>';

  el = document.getElementById('formats');
  html = '<div style="width: 610px;">' + shades +
  			 'Format: <input type="radio" name="wformat" value="16:9" checked="checked" onclick="resizeSelector(null, \'16:9\')" /> 16:9 ' +
				 '<input type="radio" name="wformat" value="4:3" onclick="resizeSelector(null, \'4:3\')" /> 4:3' +
				 //'<input type="radio" name="wformat" value="custom" onclick="resizeSelector(200)" /> Custom<br />' +
				 '<button style="float: right;" onclick="createWideImage();">Save image</button></div>';
	el.innerHTML = html;

	document.onmousedown = mouseDown;
	document.onmouseup = mouseReleased;
	document.onmousemove = mouseMove;
	document.ondragstart = function(){return false;};
	document.onselectstart = function(){return false;};
}

function setShade(color, img)
{
  box1 = document.getElementById('hidertop');
  box2 = document.getElementById('hiderbot');
  box1.style.background = color + ' url(/misc_/LimeBase/' + img + ')';
  box2.style.background = color + ' url(/misc_/LimeBase/' + img + ')';
}

function resizeSelector(setHeight, format)
{
  box1 = document.getElementById('hidertop');
  box2 = document.getElementById('hiderbot');
	var el = document.getElementById('selector');
	var img = document.getElementById('theimage');
	var w = width = img.parentNode.getAttribute('ix');
	var height = img.parentNode.getAttribute('iy');
	var r = parseFloat(width) / parseFloat(height);
	var h = 600 / r;

	var xr = height / h;
	var wr = format == '4:3' ? 4 / 3: 16 / 9;
	var wh = Math.round(w / wr / xr);

	if (setHeight) wh = setHeight;
	if (wh > h) return;

	var h1 = (h - wh) / 2;
	var h2 = wh;
	var h3 = h - h1 - h2;
	var y1 = ISIE ? 130 : 128;
	var y2 = y1 + h1;
	var y3 = y2 + h2;

	el.style.top = y2 + 'px';
	el.style.height = h2 + 'px';
	el.childNodes[0].style.height = h2 + 'px';
	box1.style.height = h1 + 'px';
	box2.style.top = y3 + 'px';
	box2.style.height = h3 + 'px';
}

function createWideImage()
{
	var img = document.getElementById('theimage');
	var sel = document.getElementById('selector');
	var opt = document.getElementById('shades');
	var imgpos = findPos(img);
	var selpos = findPos(sel);
	var shade = 0;
	if (opt != null)
	{
		opt = opt.getElementsByTagName('input');
		for (var i=0; i < opt.length; i++)
		{
			var inp = opt[i];
			if (inp.checked)
				shade = parseInt(inp.value);
		}
	}
	var widepos = '' + [selpos[0] - imgpos[0], selpos[1] - imgpos[1], selpos[3], selpos[4], shade];
	var savereq = new Ajax().Request('post', 'manage_createWideImage', imgUpdated, widepos);
}

function imgUpdated()
{
	document.location.href = wide_lime_redirectURL;
}

var topicxml = null;
function initializeTopicEngine(response)
{
	var xml = response.responseXML;
	var root = xml.getElementsByTagName('categories')[0];
	topicxml = root;
	var items = root.childNodes;
	var html = '';
	var level0 = document.getElementById('topic_selector_level0');

	for (var i=0; i < items.length; i++)
	{
		var item = items[i];
		var sql_id = item.getAttribute('sql_id');
		var title = item.getAttribute('title');

		if (availtopics[0][sql_id] == null)
		{
			availtopics[0][sql_id] = [title, 0];
			availtopics[1].push(sql_id);
		}
		html += '<option value="' + sql_id + '">' + title + '</option>\n';
	}

	level0.innerHTML = '<select onchange="renderTopicEngineLevel1(this.value)"><option value="0">Velg hovedkategori</option>' + html + '</select>';

	if (mytopics['keys'].length)
	{
		var topics = '';
		for (var i=0; i < mytopics['keys'].length; i++)
		{
			if (topics != '') topics += ',';
			topics += mytopics['keys'][i];
		}
		var topicreq = new Ajax().Request('post', 'LimeTopicAddOn/getCurrentCategoriesXml', setupMyTopics, topics);
	}
}

function setupMyTopics(response)
{
	var xml = response.responseXML;
	var root = xml.getElementsByTagName('categories')[0];
	var items = root.childNodes;

	for (var i=0; i < items.length; i++)
	{
		var item = items[i];
		var sql_id = item.getAttribute('sql_id');
		var title = item.getAttribute('title');
		var parent_id = item.getAttribute('parent_id');
		var status = '';

		if (availtopics[0][sql_id] == null)
		{
			availtopics[0][sql_id] = [title, parent_id];
			availtopics[1].push(sql_id);
		}
		addToBoard(sql_id);
	}
	updateTopicList();
}

function renderTopicEngineLevel1(id)
{
	var level1 = document.getElementById('topic_selector_level1');
	var level2 = document.getElementById('topic_selector_level2');

	if (id == '0')
	{
		level1.innerHTML = '';
		level2.innerHTML = '';
		return;
	}

	var html = '';
	var items = topicxml.childNodes;
	for (var i=0; i < items.length; i++)
	{
		var item = items[i];
		if (item.getAttribute('sql_id') == id)
		{
			var subtitle = id;
			var subitems = item.childNodes;
			for (var j=0; j < subitems.length; j++)
			{
				var subitem = subitems[j];
				var sql_id = subitem.getAttribute('sql_id');
				var title = subitem.getAttribute('title');
				var status = '';
				if (objecttopics[0][sql_id] != null) status = ' checked="checked"';

				if (availtopics[0][sql_id] == null)
				{
					availtopics[0][sql_id] = [title, id];
					availtopics[1].push(sql_id);
				}
				html += '<div sql_id="' + sql_id + '" onclick="triggerTopicEngineLevel2(event, \'' + title + '\')"><input type="checkbox" id="chkbx_' + sql_id + '" onclick="cancelBubbling(event); if (!this.checked) return false; addTopic(event)" cancelBubble="yes"' + status + ' /> ' + title + '</div>\n';
			}
		}
	}

	level1.innerHTML = html;
	level2.innerHTML = '';
}

var availtopics = [{}, []];
var objecttopics = [{}, []];
var topicbuffer = {};
function triggerTopicEngineLevel2(e, title)
{
	var level2 = document.getElementById('topic_selector_level2');
  var el = (e.target) ? e.target : e.srcElement;
  if (el.nodeName.toLowerCase() == 'input') el = el.parentNode;
  var sql_id = el.getAttribute('sql_id');
  var subtitle = sql_id;

  if (el.className == 'active')
  {
  	el.className = '';
  	var box = document.getElementById('topics_' + sql_id);
  	if (box) box.parentNode.removeChild(box);
  }
  else
  {
  	var mybox = document.getElementById('topics_' + sql_id);
  	if (mybox)
  	{
  		mybox.childNodes[0].className = 'title blink';
  		var timer = setTimeout('blinkTopicBox(' + sql_id + ')', 140);
  		return;
  	}

  	//el.className = 'active';
  	var box = document.createElement('div');
  	box.id = 'topics_' + sql_id;
  	box.className = 'selector';
  	box.innerHTML = '<div class="title"><img src="/misc_/LimeBase/minus.gif" alt="" onclick="removeTopicBox(' + sql_id + ')" />' + title + '</div><div class="box" id="' + box.id + '_box">&nbsp;</div>';
  	level2.appendChild(box);

		if (topicbuffer[box.id] != null)
		{
			topicbuffer[box.id].Render();
		}
		else
		{
	  	var topicbox = new TopicBox(box.id, sql_id, subtitle);
  		topicbuffer[box.id] = topicbox;
  		var topicreq = new Ajax(topicbox).Request('post', 'LimeTopicAddOn/getSubCategoriesXml', topicbox.Prepare, sql_id);
  	}
  }
}

function removeTopicBox(id)
{
	var box = document.getElementById('topics_' + id);
	if (box) box.parentNode.removeChild(box);
}

function blinkTopicBox(id)
{
	var box = document.getElementById('topics_' + id);
	if (box) box.childNodes[0].className = 'title';
}

function addTopic(e)
{
  var el = (e.target) ? e.target : e.srcElement;
  if (el.nodeName.toLowerCase() == 'input') el = el.parentNode;
  var sql_id = el.getAttribute('sql_id');

  if (el.className == 'active')
  {
  	//el.className = '';
  }
  else
  {
  	//el.className = 'active';
	}

	addToBoard(sql_id);
	updateTopicList();
}

function addToBoard(sql_id)
{
	var html = '';
	var actives = document.getElementById('topic_active');
	if (objecttopics[0][sql_id] == null)
	{
		var t = availtopics[0][sql_id]
		if (objecttopics[0][sql_id] == null)
			objecttopics[0][sql_id] = availtopics[0][sql_id];

		pt = t;
		while (t != null && t[1] != 0)
		{
			html = ' &raquo; ' + t[0] + html;
			pt = t;
			t = availtopics[0][t[1]]
		}
		if (t) pt = t;
		html = '<div sql_id="' + sql_id + '"><input type="checkbox" onclick="delTopic(event)" checked="checked" title="Klikk for å fjerne denne kategori" /> ' + pt[0] + html + '</div>';
		objecttopics[0][sql_id].push(html);
  }

  html = '';
	for (var i=0; i < availtopics[1].length; i++)
	{
		var p = availtopics[1][i];
		if (objecttopics[0][p] != null)
		{
			html += objecttopics[0][p][2];
		}
	}
  actives.innerHTML = '<div style="height: 100%;">' + html + '</div>';
}

function delTopic(e)
{
  var el = (e.target) ? e.target : e.srcElement;
  if (el.nodeName.toLowerCase() == 'input') el = el.parentNode;
  var sql_id = el.getAttribute('sql_id');

	if (objecttopics[0][sql_id] != null)
	{
		objecttopics[0][sql_id] = null;
	}
	el.parentNode.removeChild(el);

	var cel = document.getElementById('chkbx_' + sql_id);
	if (cel) cel.checked = false;
	updateTopicList();
}

function updateTopicList()
{
	var topics = '';
	var t = {};
	for (var i=0; i < availtopics[1].length; i++)
	{
		var p = availtopics[1][i];
		if (objecttopics[0][p] != null)
		{
			var topic = availtopics[0][p];
			if (topic[1] != 0 && t[topic[1]] == null)
			{
				t[topic[1]] = 1;
				if (topics != '') topics += ', ';
				topics += topic[1];
			}
			if (t[p] == null)
			{
				t[p] = 1;
				if (topics != '') topics += ', ';
				topics += p;
			}
		}
	}

	var el = document.getElementById('topics');
	if (el) el.value = '[' + topics + ']';
}

function TopicBox(id, sql_id, subtitle)
{
	this.id = id;
	this.sql_id = '';
	this.area = document.getElementById(this.id + '_box');
	this.html = '';
	this.subtitle = subtitle;

	this.Prepare = function(response, parent)
	{
		if (parent.html != '')
		{
			parent.area.innerHTML = parent.html;
			return;
		}
		var html = '';
		var xml = response.responseXML;
		var items = xml.getElementsByTagName('category');
		for (var i=0; i < items.length; i++)
		{
			var item = items[i];
			var sql_id = item.getAttribute('sql_id');
			var title = item.getAttribute('title');

			if (availtopics[0][sql_id] == null)
			{
				availtopics[0][sql_id] = [title, parent.subtitle];
				availtopics[1].push(sql_id);
			}
			//html += '<div onclick="addTopic(event)" sql_id="' + sql_id + '">*' + title + '</div>\n';
			html += '<div sql_id="' + sql_id + '" onclick="triggerTopicEngineLevel2(event, \'' + title + '\')"><input type="checkbox" id="chkbx_' + sql_id + '" onclick="cancelBubbling(event); if (!this.checked) return false; addTopic(event)" cancelBubble="yes"' + status + ' /> ' + title + '</div>\n';
		}

		html = '<div>' + html + '</div>';

		parent.html = html;
		parent.area.innerHTML = html;
	}

	this.Render = function()
	{
		this.area = document.getElementById(this.id + '_box');
		this.area.innerHTML = this.html;
	}
}

function AutoTextField(id, xml, tag, disable_fields)
{
	this.id = id;
	this.xml = xml;
	this.tag = tag;
	this.buffer = {};
	this.disablefields = disable_fields;
	this.index = ['', 0];
	this.mover = 1;
	this.newpress = true;
	this._length = 0;

	// disable fields?
	for (var i=0; i < disable_fields.length; i++)
	{
		disabledfields.push(disable_fields[i]);
	}
	disableFields();

	this.Prepare = function(response, parent)
	{
		var xml = response.responseXML;
		var items = xml.getElementsByTagName(parent.tag);
		var buffer = parent.buffer;
		var el = document.getElementById('atf_' + parent.id + '_field');
		if (el)
		{
			el.childNodes[0].style.backgroundColor = 'white';
			el.childNodes[0].disabled = false;
		}

		for (var i=0; i < items.length; i++)
		{
			var item = items[i];
			try
			{
				var sqlid = item.getAttribute('sql_id');
				var name = item.firstChild.nodeValue;
				if (name.length)
				{
				  var key = name.toLowerCase().substring(0, 1);
					if (buffer[key] == null)
						buffer[key] = [];

					buffer[key].push([name.toLowerCase(), name, sqlid]);
				}
			}
			catch(e)
			{}
		}
		parent.buffer = buffer;
	}

	this.UpdateDisabledFields = function(response, parent)
	{
		var xml = response.responseXML;
		var fields = xml.getElementsByTagName('field');
		for (var i=0; i < fields.length; i++)
		{
			var field = fields[i];
			try
			{
				var name = field.getAttribute('id');
				var value = field.firstChild.nodeValue;
				var el = document.getElementById('tf_' + name);
				if (el) el.value = value;
			}
			catch(e)
			{}
		}
	}

	this.LookUp = function(e)
	{
	  var el = (e.target) ? e.target : e.srcElement;
		var atf = document.getElementById('atf_' + this.id + '_field');
		var atfl = document.getElementById('atf_' + this.id + '_field_list');
	  var value = atf.firstChild.value.toLowerCase();
	  var buffer = this.buffer;
	  var kC = (window.event) ? event.keyCode : e.keyCode;

	  if (this.newpress)
	  {
	  	this.newpress = false;
	  	return false;
	  }

	  if (value == '')
	  {
			if (atfl) atfl.parentNode.removeChild(atfl);
	  	return;
	  }

	  var key = value.substring(0, 1);
		if (buffer[key] != null)
		{
			var html = '';
			for (var i=0; i < buffer[key].length; i++)
			{
				if (buffer[key][i][0].substring(0, value.length) == value)
				{
					html += this.AddField(buffer[key][i]);
				}
			}

			if (html != '')
			{
				if (!atfl)
				{
					atf.style.position = 'relative';
			    this.atfpos = findPos(atf);
			    var nel = document.createElement('div');
			    nel.id = 'atf_' + this.id + '_field_list';
			    nel.className = 'atf_selector';
			    atf.appendChild(nel);
					var atfl = document.getElementById('atf_' + this.id + '_field_list');
			  }
		    atfl.innerHTML = html;
			}
			else
				if (atfl) atfl.parentNode.removeChild(atfl);
		}

	  if (kC == 38)
	  {
	  	if (this.mover > 1)
 		  	this.mover -= 1;

	  }
	  else if (kC == 40)
	  {
	  	if (this.mover < atfl.childNodes.length)
 		  	this.mover += 1;
	  }

	 	if (atfl)
	 	{
	 		if (this._length != atfl.childNodes.length)
		 	{
		 		this.mover = 1;
			 	this._length = atfl.childNodes.length;
			}

	  	var ob = atfl.childNodes[this.mover-1];
	  	if (ob)
	  	{
	  		ob.style.backgroundColor = 'navy';
	  		ob.style.color = 'white';
	  	}
	  }
	}

	this.AddField = function(field, classname)
	{
		classname = classname != null ? ' class="' + classname + '"' : '';
		return '<div' + classname + ' onkeypress="atf_' + this.id + '.LookUp(event)" onclick="atf_' + this.id + '.Select(event)" key="' + field[0].substring(0, 1) + '" sql_id="' + field[2] + '">' + field[1] + '</div>';
	}

	this.Select = function(e)
	{
	  var el = (e.target) ? e.target : e.srcElement;
	  this.SelectObject(el)
	}

	this.SelectObject = function(el)
	{
		var atf = document.getElementById('atf_' + this.id + '_field');
		var key = el.getAttribute('key');
		var sql_id = el.getAttribute('sql_id');
		var obj = this.GetObject(key, sql_id)
		if (obj)
		{
			atf.firstChild.value = obj[1];
			var data = obj[2] + ',' + this.disablefields;
			this.request = new Ajax(this).Request('post', 'util_getDisabledFieldsXml', this.UpdateDisabledFields, data);
		}
		var rtf = document.getElementById(this.id + '_real');
		rtf.value = el.getAttribute('sql_id');
		var atfl = document.getElementById('atf_' + this.id + '_field_list');
		if (atfl) atfl.parentNode.removeChild(atfl);
		this.newpress = true;
	}

	this.GetObject = function(key, sql_id)
	{
		var buffer = this.buffer[key];
		if (!buffer) return null;
		for (var i=0; i < buffer.length; i++)
		{
			var obj = buffer[i];
			if (obj[2] == sql_id)
				return obj;
		}
		return null;
	}

	this.Validate = function(e)
	{
	  var el = (e.target) ? e.target : e.srcElement;
		var atf = document.getElementById('atf_' + this.id + '_field');
		var atfl = document.getElementById('atf_' + this.id + '_field_list');
	  var value = atf.firstChild.value.toLowerCase();
	  var valid = false;
	  var buffer = this.buffer;

	  if (value != '')
	  {
		  var key = value.substring(0, 1);
			if (buffer[key] != null)
			{
				for (var i=0; i < buffer[key].length; i++)
				{
					if (buffer[key][i][0] == value)
						valid = true;
				}
			}
			if (valid)
			{
				return true;
			}
		}

	  var kC = (window.event) ? event.keyCode : e.keyCode;
  	if (kC == 13)
  	{
	  	if (this.mover <= atfl.childNodes.length)
	  	{
		  	var ob = atfl.childNodes[this.mover-1];
		  	if (ob) this.SelectObject(ob);
				atf.firstChild.focus();
		  }
  		return false;
  	}

  	alert('Du må velge blant de tilgjengelige valgene i listen');
		return false;
	}

	this.CheckEnter = function(e)
	{
	  var kC = (window.event) ? event.keyCode : e.keyCode;
  	//var Enter = (window.event) ? 13 : e.DOM_VK_ENTER;

  	if (kC == 13)
  	{
  		return this.Validate(e);
  	}

		return true;
	}

	this.request = new Ajax(this).Request('post', this.xml, this.Prepare);
}

function checkBTreeEnter(e, ob)
{
  var kC = (window.event) ? event.keyCode : e.keyCode;

 	if (kC == 13)
 	{
  	checkCustomWebFirstElement('/manage_workspace');
  	document.location = ob.form.action;
  	return false;
	}
  return true;
}

function addToShortcuts(el)
{
	el.style.display = 'none';
	var obid = el.getAttribute('sqlid');
	var ajax = new Ajax().Request('post', 'manage_addShortcut', shortcutAdded, obid);
}

function removeShortcuts(el)
{
	var el = document.getElementById('myShortcutList');
	if (el)
	{
		s = '';
		var inps = el.getElementsByTagName('input');
		for (var i=0; i < inps.length; i++)
		{
			var inp = inps[i];
			if (inp.type == 'checkbox' && inp.checked)
				s += inp.value + ',';
		}
		var ajax = new Ajax().Request('post', 'manage_delShortcuts', shortcutAdded, s);
	}
}

function killShortcuts()
{
	var ajax = new Ajax().Request('post', 'manage_killShortcuts', shortcutAdded);
	document.location.href = './manage_workspace';
}

function shortcutAdded(response)
{
	top.frames[0].location.reload();
}

var tm_active = 1;
function toggleMenu(id)
{
	if (id != tm_active)
	{
		var el = document.getElementById('mi' + tm_active);
		if (el) el.className = 'title';
		el = document.getElementById('fi' + tm_active);
		if (el) el.style.display = 'none';

		tm_active = id;

		el = document.getElementById('mi' + id);
		if (el) el.className = 'title active';
		el = document.getElementById('fi' + id);
		if (el)
		{
			el.style.display = 'block';

			if ((tm_active == 2 || tm_active == 3) && el.getAttribute('loaded') == null)
			{
				var type = (id == 3) ? 'video' : 'image';
				el.loaded = true;
				var data = '<?xml version="1.0" encoding="iso-8859-1"?><data>' +
									 '<field id="searchType">' + type + '</field>' +
									 '<field id="searchLimit">10</field>' +
									 '</data>';
				var ajax = new Ajax().Request('post', 'searchCatalogXml', doMMRender, data);
			}
		}
	}
}

function addMultiMedia(el)
{
	var id = el.getAttribute('sqlid');
	if (id)
	{
		var ajax = new Ajax().Request('post', 'addReference', refreshMultiMedia, id);
	}
}

function refreshMultiMedia(response)
{
	var u = response.responseText;
	if (u == "NOT OK")
	{
		alert("Couldn't add reference");
		return;
	}

	var xml = response.responseXML;
	var fields = xml.getElementsByTagName('field');
	var html = '';

	if (fields.length > 0)
	{
		var field = fields[0];
		var u = [];
		u.push(field.getAttribute('type'));
		u.push(field.getAttribute('icon'));
		try
		{
			u.push(field.firstChild.nodeValue);
		}
		catch (e)
		{
			u.push('');
		}

		html = '<div class="item" title="' + u[2] + '"><div class="image" style="background-image: url(' + u[1] + ');">&nbsp;</div>' + u[2] + '</div>';
	}

	var el = document.getElementById(u[0] + '_list');
	if (el)
	{
		if (el.getElementsByTagName('div').length == 0)
			el.innerHTML = '';
		el.innerHTML += html;
	}

	doMMUpdateCalled = false;
}

function searchMMOnEnter(e)
{
  if (!e)
  	e = window.event;

  var kC = (window.event) ? event.keyCode : e.which;

  if (kC == 13) searchMultiMedia();
}

function searchMultiMedia()
{
	document.body.focus();
	var searchString = document.getElementById('searchString').value;
	var searchType = document.getElementById('types').value;
	var data = '<?xml version="1.0" encoding="iso-8859-1"?><data><field id="searchString"><![CDATA[' + searchString + ']]></field>' +
						 '<field id="searchType">' + searchType + '</field>' +
						 '</data>';

	var el = document.getElementById('result_list')
	if (el) el.innerHTML = '<div class="header">Søker <img src="/misc_/LimeEasyDesk/Progress.gif" alt="" align="absmiddle" /></div>';

	var ajax = new Ajax().Request('post', 'searchCatalogXml', renderMultiMediaSearch, data);
	itemsSearch = searchString;
}

var itemsSearch = '';
var itemsStart = 0;
var itemsMax = 50;
var itemsXml = null;
var itemsList = [];

function renderMultiMediaSearch(response)
{
	itemsXml = response.responseXML;
	itemsList = itemsXml.getElementsByTagName('item');
	itemsMax = (itemsList.length < 50) ? itemsList.length : 50;
	doMMRenderSearch(itemsStart, itemsMax);
}

function doMMRenderSearch(start, num)
{
	var el = document.getElementById('result_list');
	var html = '';
	var roof = (start + num);
	if (roof > itemsList.length) roof = itemsList.length;

	if (tm_active != 1)
	{
		el = document.getElementById('fi' + tm_active);
	}

	for (var i=start; i < roof; i++)
	{
		var item = itemsList[i];
		var title = item.firstChild.nodeValue;
		var icon = item.getAttribute('icon');
		var sqlid = item.getAttribute('sql_id');

		html += '<div class="item" title="' + title + '" ondblclick="addMultiMedia(this)" sqlid="' + sqlid + '"><div class="image" style="background-image: url(' + icon + ');">&nbsp;</div>' + title + '</div>';
	}

	if (itemsList.length > 0)
	{
		var nav = '<div class="header">Fant ' + itemsList.length + ' objekter som matchet søk etter "' + itemsSearch + '"</div>';
		var pages = parseInt(itemsList.length / itemsMax);
		if (itemsList.length % itemsMax != 0) pages++;

		nav += '[';
		if (start > 0)
		{
			nav += '<span title="Bakover" style="cursor: pointer;" onclick="doMMRenderSearch(' + (start - itemsMax) + ', ' + itemsMax + ')">&laquo;&laquo;</span>';
		}
		else
			nav += '<span style="color: #ccc; cursor: default;">&laquo;&laquo;</span>';
		nav += ' <span style="color: #888">|</span> ';
		if ((start + itemsMax) < (pages * itemsMax))
		{
			nav += '<span title="Fremover" style="cursor: pointer;" onclick="doMMRenderSearch(' + (start + itemsMax) + ', ' + itemsMax + ')">&raquo;&raquo;</span>';
		}
		else
			nav += '<span style="color: #ccc; cursor: default;">&raquo;&raquo;</span>';
		nav += '] ';
		nav += 'Viser ' + (1 + start) + ' til ' + roof;

		if (tm_active == 1)
			html = nav + '<br /><br />' + html;
	}
	else
		html = '<div class="header none">Fant dessverre ingen  objekter som matchet søk etter "' + itemsSearch + '"</div>Prøv å gjøre søkekriteriene enklere om du har satt på filtrering';

	el.innerHTML = html
}

function doMMRender(response)
{
	var el = document.getElementById('fi' + tm_active);
	var html = '';
	var items = response.responseXML.getElementsByTagName('item');

	for (var i=0; i < items.length; i++)
	{
		var item = items[i];
		var title = item.firstChild.nodeValue;
		var icon = item.getAttribute('icon');
		var sqlid = item.getAttribute('sql_id');

		html += '<div class="item" title="' + title + '" ondblclick="addMultiMedia(this)" sqlid="' + sqlid + '"><div class="image" style="background-image: url(' + icon + ');">&nbsp;</div>' + title + '</div>';
	}

	if (items.length == 0)
		html = '<div class="header none">Fant ingen objekter</div>';

	el.innerHTML = html
}

var doMMUpdateCalled = false;
function doMMUpdate(id)
{
	if (!doMMUpdateCalled)
	{
		doMMUpdateCalled = true;
		var timer = setTimeout('doMMUpdateDelayed(' + id + ')', 3000);
	}
}

function doMMUpdateDelayed(id)
{
	var url = document.location.href.replace('manage_mapMedia', 'addReference');
	if (id)
	{
		var ajax = new Ajax().Request('post', 'gui_getLatestReference', refreshMultiMedia, '' + id);
		var f = document.getElementById('Form1');
		if (f) f.reset();
	}
	else
		alert("missing id")
}

function display(id)
{
	var el = document.getElementById(id);
	if (el) el.style.display = 'block';
}

function hide(id)
{
	var el = document.getElementById(id);
	if (el) el.style.display = 'none';
}

function uploadFile()
{
	var f_date = new Date();
	var mm_type = (document.getElementById('mm_type_1').checked) ? 'LimeImage' : 'LimeFile';
	var f_title = document.getElementById('my_title').value;
	var f_aimgs = document.getElementById('arch_images').value;
	var f_afile = document.getElementById('arch_files').value;
	var f_descr = document.getElementById('my_description').value;

	var mf_title = document.getElementById('mf_title');
	var mf_descr = document.getElementById('mf_description');
	var mf_file = document.getElementById('mf_file');
	var mf_archiveFolder = document.getElementById('mf_archiveFolder');
	var mf_date_year = document.getElementById('mf_pubdate_year');
	var mf_date_month = document.getElementById('mf_pubdate_month');
	var mf_date_day = document.getElementById('mf_pubdate_day');
	var mf_date_hour = document.getElementById('mf_pubdate_hour');
	var mf_date_minute = document.getElementById('mf_pubdate_minute');

	if (mf_date_year) mf_date_year.value = f_date.getFullYear();
	if (mf_date_month) mf_date_month.value = f_date.getMonth();
	if (mf_date_day) mf_date_day.value = f_date.getDay();
	if (mf_date_hour) mf_date_hour.value = f_date.getHours();
	if (mf_date_minute) mf_date_minute.value = f_date.getMinutes();
	if (mf_title) mf_title.value = f_title;
	if (mf_descr) mf_descr.value = f_descr;
	if (mf_archiveFolder) mf_archiveFolder.value = (mm_type == 'LimeImage') ? f_aimgs : f_afile;
	if (mf_file && mf_file.value == '')
	{
		alert("Du må velge fil for opplasting først!");
		return false;
	}

	var f = document.getElementById('Form1');
	f.action = 'manage_addProduct/' + mm_type + '/manage_add' + mm_type;
	if (f) f.submit();
}

var condData = {};
function updateConditionalField(el)
{
	var value = el.value;
	AjaxRequest('post', 'getListOptionsXml', renderConditionalFields, value);

	var cl = document.getElementById('conditionalRecipients');
	var electors = document.getElementById('condElector');
	var conditionals = electors.getElementsByTagName('input');
	for (var i=0; i < conditionals.length; i++)
	{
		var sql_id = conditionals[i].getAttribute('sql_id');
		var verdi = conditionals[i].value;
		condData[sql_id] = verdi;
	}

	cl.innerHTML = value + '|';
	electors.innerHTML = '';
}

function updateConditionalFieldData(el)
{
	debug("UPDATE FIELD")
	var cl = document.getElementById('conditionalRecipients');
	var electors = document.getElementById('condElector');
	var conditionals = electors.getElementsByTagName('input');
	var html = cl.innerHTML.split('|')[0] + '|';
	debug("items: " + conditionals.length)

	for (var i=0; i < conditionals.length; i++)
	{
		var sql_id = conditionals[i].getAttribute('sql_id');
		var value = conditionals[i].value;
		if (value != '') html += sql_id + ':' + value + '|';
	}

	cl.innerHTML = html;
}


function renderConditionalFields(response)
{
	var cl = document.getElementById('conditionalRecipients');
	var html = ['<table width="100%%" style="float: left; clear: none;" cellpadding="0">'];
	var _txt = [];
	var items = response.responseXML.getElementsByTagName('option');
	var ll = items.length;
	for (var i=0; i < ll; i++)
	{
		var item = serialize(items[i]);
		var value = condData[item.sql_id] || '';
		html.push('<tr><td align="right">' + item.title + ' -&gt; </td><td width="70%"><input type="text" value="' + value + '" style="width: 98%;" sql_id="' + item.sql_id + '" onblur="updateConditionalFieldData(this)" /></td></tr>');
		_txt.push(item.sql_id + ':' + (condData[item.sql_id] || '') + '|');
	}
	html.push('</table>');
	var el = document.getElementById('condElector');
	if (el) el.innerHTML = html.join('');
	cl.innerHTML += _txt.join('');
}

function toggleRecipients(el)
{
	var l = document.getElementById('log_rec_' + el.getAttribute('eventId'));
	if (l)
	{
		if (l.style.display == 'none') l.style.display = 'block';
		else l.style.display = 'none';
	}
}

function hideRecipients(el)
{
	var l = document.getElementById('log_rec_' + el.getAttribute('eventId'));
	if (l) l.style.display = 'none';
}

document.onkeyup = detectKey;
