/* -*- mode: C;-*--------------------------------------------------------------
 * (C)2009-2011 Copyright InfoStreet, Inc.
 * Use without the permission of InfoStreet Inc. is strictly prohibited.
 * Contact InfoStreet for more details (http://www.infostreet.com)
 *
 * Name:           $RCSfile: browseFunctions.js,v $
 * Author:         Alex Soleymani <alex@infostreet.com>
 * Created On:     February 23, 2009
 * Last Modified:  $Date: 2011/09/26 19:37:13 $
 * Last Modifier:  $Author: pratik $
 * Version:        $Revision: 1.31 $
 *
 *-----------------------------------------------------------------------------*/

var resizingHeaders;
var resizingFolders;
var order;
var orderBy;
var pageStart;
var copyTree;
var copyMoveTree;
var selectedQId;
var currentAnswerId;
var currentAnswerCatId;
var backCounts = null;

var processingFolders = true;
var processingHeaders = true;
var firstLoad = true;
var headersLoaded;

var nextPreviousLinks = new Array();
var deleteFolders = new Array();

var scoreRaisedViewed = new Object();
var scoreRaisedHelped = new Object();
var answersData = new Object();
var answersDataNotTranslated = new Object();
var subFoldersCalled = new Object();
var copyOfTrees = new Object();
var numberOfPopups = 0;
var selectedPathID = "/";

function processFolders(data) {
  mainTree.drawTree(data["folders"]);
  if (firstLoad) {
    mainTree.openTreeFolder(selectedPathID, true);
  } else {
    mainTree.openTreeFolder(fullPathID, true);
  }
  processingFolders = false;
  if (!processingHeaders) {
    if (firstLoad) {
      setTimeout("hideProgressBar()", 100);
      firstLoad = false;
    } else {
      hideProgressBar();
    }
    resizeMessageFrame();
  }
}

function processSubfolders(data){
  if (data["folders"][0] && data["folders"][0]["subFolders"]) {
     addSubfolder( data["folders"][0] );
     subFoldersCalled[ data["folders"][0]["id"] ] = 1;
  }
}

function processHeaders(data) {
  if (data["error"]) {
    hideProgressBar();
    if (data["reload"] == 1) {
      reloadHeaders();
    }
    alert(data["error"]);
    return;
  }
  clearList("HeaderList");
  var answerPane = document.getElementById("AnswerPane");

  //alert(data["row"]);
  if (data["access"] == "READ") {
    var isDraggable = false;
  } else {
    var isDraggable = true;
  }
  ajaxDrawList("HeaderList", data["columns"], data["row"], "ID", isDraggable, data);
  categoryID = data["categoryID"];
  fullPathID = data["fullPathID"];
  setNextPreviousLink(fullPathID);
  checkButtons(data["access"]);
  drawBreadcrumbs();
  order = data["order"];
  orderBy = data["orderBy"];
  pageStart = data["pageStart"];
  access = data["access"];
  if (data["row"] && !data["row"].push) {
    data["row"] = new Array(data["row"])
  }

  var qID = "";

  if ((selectedQId || selectedItemName) && data["row"]) {
    for (var i=0; i< data["row"].length; i++) {
      if (selectedQId && data["row"][i]["ID"] == selectedQId) {
        qID = selectedQId;
        rowID = i;
        break;
      }
      if (selectedItemName && data["row"][i]["question"] == selectedItemName) {
        qID = data["row"][i]["ID"];
        rowID = i;
        break;
      }
    }
  }
  // we only use it for the first load
  selectedItemName = "";
  if (!qID && data["row"] ) {
    //qID = data["row"][0]["ID"];
    //rowID = 0;
  }

  if (data["copyMoveResult"]) {
    var theObj = data["copyMoveResult"];
    if (theObj.folderErrors) {
      var folderErrors = theObj.folderErrors;
      if (!folderErrors.push) {
        folderErrors = new Array(folderErrors);
      }
    }
    if ( theObj.act == "move" || theObj.act == "delete" ) {
      for ( var i=0; i < deleteFolders.length; i++ ) {
        if ( isFolderDeleted(deleteFolders[i].id, folderErrors) ) {
          if ( deleteFolders[i].fullName == mainTree.selectedRow ) {
            var parentPath = getParentPath(mainTree.selectedRow);
            mainTree.openTreeFolder( parentPath, true);
          }
          mainTree.deleteTreeRow(deleteFolders[i].fullName);
        }
      }
    }

    if (theObj["folders"] && theObj["folders"][0] && theObj["folders"][0]["subFolders"]) {
       addSubfolder( theObj["folders"][0] );
    }
  }

  if (data["renameInfo"]) {
    renameTheTree(data["renameInfo"]["newName"], data["renameInfo"]["oldPath"], true)
  }
  if (data["newName"]) {
    insertTheTree(data["newName"], data["newID"], data["newLink"], data["newAccess"], data["parentID"], data["newFullPathID"], true)
  }

  if (qID) {
    selectRowById(qID);
    var myRow = data["row"][rowID];
    displayAnswers(myRow);
    currentAnswerId = qID;
    if (myRow["link"] != 0) {
      var catID =  myRow["link"];
    } else {
       var catID = categoryID;
    }
    currentAnswerCatId = catID;
  } else {
    if (fullPathID != "/") {
      callAnswers();
    } else {
      document.getElementById("AnswerPane").style.display = "none";
    }

    processingHeaders = false;


    if (!processingFolders) {
      if (firstLoad) {
        setTimeout("hideProgressBar()", 100);
        firstLoad = false;
      } else {
        hideProgressBar();
      }
      resizeMessageFrame();
    }
  }
}

function insertTheTree(newName, newID, newLink, newAccess, parentID, newFullPathID, notReload) {
  newName = unescape(newName);
  newFullPathID = unescape(newFullPathID);
  mainTree.insertTreeRow( newName, parentID);
  mainTree.treeData[ newFullPathID ].categoryID = newLink;
  mainTree.treeData[ newFullPathID ].realID = newID;
  mainTree.treeData[ newFullPathID ].access = newAccess;

  for ( var j=1; j<=numberOfPopups; j++ ) {
    if( copyOfTrees[j] && !copyOfTrees[j].treeRowExists(newName , parentID) ) {
      copyOfTrees[j].insertTreeRow(newName, parentID );
      if (copyOfTrees[j].treeData[newFullPathID]) {
        copyOfTrees[j].treeData[newFullPathID].categoryID = newLink;
        copyOfTrees[j].treeData[newFullPathID].realID = newID;
        copyOfTrees[j].treeData[newFullPathID].access = newAccess;
      }
    }
  }

  if ( !notReload) {
    reloadHeaders();
    hideProgressBar();
  }

}

function renameTheTree(newPath, oldPath, notReload) {
  mainTree.renameTreeRow(newPath, oldPath);

  for ( var j=1; j<=numberOfPopups; j++ ) {
    if( copyOfTrees[j]) {
      copyOfTrees[j].renameTreeRow(newPath, oldPath);
    }
  }
  if ( !notReload) {
    reloadHeaders();
    hideProgressBar();
  }
}

function callAnswers() {

 var url = "ajax_answers.pyt?categoryID=" + categoryID;
 if (mainTree.selectedRow) {
   try {
     var treeObj = mainTree.treeData[mainTree.selectedRow];
     var qID = treeObj.realID;
     if (qID && answersData[qID]) {
       var thisAnswerData = answersData[qID];
       displayAnswers(thisAnswerData);
       return;
     } else if (qID) {
       var url = "ajax_answers.pyt?ID=" + qID;
     }
   } catch(e) {
     //alert(mainTree.selectedRow + "\n" + e);
   }
 }
 var xmlAnswers2 = AJAXRequest(processAnswers);
 makeAJAXCall(xmlAnswers2, url, true);
 showProgressBar();
}

function processAnswers(data) {
  if(data) {
    displayAnswers(data["row"]);
  }
  hideProgressBar();
}

function addSubfolder( folds ) {
  var subFolders = folds["subFolders"];
  var foldID = folds["id"];
  if (!subFolders.push) {
    subFolders = new Array(subFolders);
  }

  for ( var i=0; i< subFolders.length; i++) {
    var fullPathID = foldID + "/" + subFolders[i]["name"];
    if( !mainTree.treeRowExists(subFolders[i]["name"] , foldID) ) {
      mainTree.insertTreeRow(subFolders[i]["name"], foldID );
      if (mainTree.treeData[fullPathID]) {
        mainTree.treeData[fullPathID].categoryID = subFolders[i].categoryID;
        mainTree.treeData[fullPathID].realID = subFolders[i].realID;
        mainTree.treeData[fullPathID].access = subFolders[i].access;
      }
    }

    for ( var j=1; j<=numberOfPopups; j++ ) {
      if( copyOfTrees[j] && !copyOfTrees[j].treeRowExists(subFolders[i]["name"] , foldID) ) {
        copyOfTrees[j].insertTreeRow(subFolders[i]["name"], foldID );
        if (copyOfTrees[j].treeData[fullPathID]) {
          copyOfTrees[j].treeData[fullPathID].categoryID = subFolders[i].categoryID;
          copyOfTrees[j].treeData[fullPathID].realID = subFolders[i].realID;
          copyOfTrees[j].treeData[fullPathID].access = subFolders[i].access;
        }
      }
    }
    if (subFolders[i]["subFolders"]) {
      addSubfolder( subFolders[i] );
    }
  }
}

function reloadHeaders(isSearch) {
  if (!isSearch) {
    // search always set a selectedQId and should not be changed.
    if( numSelected == 1 ){
      selectedQId = getSelectedColumn( "ID" );
    } else {
      selectedQId = "";
    }
  }
  var xmlHeaders2 = AJAXRequest( processHeaders);
  makeAJAXCall(xmlHeaders2, "ajax_headers.pyt" + getArgs(), true);
  showProgressBar();
}

function reloadHeadersByPath(path) {
  var url = "ajax_headers.pyt" + getArgs(true);
  url += "&path=" + path;
  var xmlHeaders2 = AJAXRequest( processHeaders);
  makeAJAXCall(xmlHeaders2, url, true);
  mainTree.openTreeFolder(path, true);
  showProgressBar();

}

function drawBreadcrumbs() {
  var breadcrumbSpan = document.getElementById("BreadcrumbSpan");
  breadcrumbSpan.innerHTML = "";


  if( rootID == fullPathID) return;
  if (rootID == "/") {
    var currentFolderArr = fullPathID.substr(1);
    var myfold = "";
  } else {
    var currentFolderArr = fullPathID.split(rootID)[1];
    currentFolderArr = currentFolderArr.substr(1);
    var myfold = rootID;
  }

  currentFolderArr = currentFolderArr.split("/");

  for (i=0; i<currentFolderArr.length; i++) {
    myfold += "/" + currentFolderArr[i];
    var textNode = document.createTextNode(" > ");
    breadcrumbSpan.appendChild(textNode);
    var a = document.createElement("a");
    a.href = "#";
    a.id = myfold;
    a.onclick = function test(event) { callHeaders(event); return false; };
    a.innerHTML = currentFolderArr[i];
    breadcrumbSpan.appendChild(a);
  }
}
function callHeaders(event) {
  var el = getElement(event);
  reloadHeadersByPath(el.id);
  resetNextPreviousLink();
}

function displayAnswers(data) {
  var answerPane = document.getElementById("AnswerPane");
  if (data && data.question) {
    var answerTitle = document.getElementById("AnswerPopupTitle");
    var answerContent = document.getElementById("AnswerContent")
    answerTitle.innerHTML = data.question;
    answerContent.innerHTML = getContent(data.answer, data.type);
    answerPane.style.display = "block";
  } else {
    answerPane.style.display = "none";
  }

  processingHeaders = false;
  if (!processingFolders) {
    if (firstLoad) {
      setTimeout("hideProgressBar()", 100);
      firstLoad = false;
    } else {
      hideProgressBar();
    }
    resizeMessageFrame();
  }
  if (data) {
    answersData[data.ID] = data;
  }
}

function checkButtons(access){
  currentAccess = access;
  if ( access == "ADMIN"  || access == "RW") {
    try{
      showMenuAction ( "NEW_FOLDER" );
      showMenuAction ( "NEW_ITEM" );
      showMenuAction ( "COPY" );
      showMenuAction ( "DELETE" );
      showMenuAction ( "MOVE" );
      showMenuAction ( "MAIL_LOCATION" );
      showMenuAction ( "MAIL_ITEM" );

    } catch(e) {}
  } else {
    try{
      hideMenuAction( "NEW_FOLDER" );
      hideMenuAction( "NEW_ITEM" );
      hideMenuAction( "COPY" );
      hideMenuAction( "DELETE" );
      hideMenuAction( "MOVE" );
      hideMenuAction( "MAIL_LOCATION" );
      hideMenuAction( "MAIL_ITEM" );

    } catch(e) {}
  }
}

function getContent(answer, textType) {
  var content = "";
  if (answer) {
    if (!answer.push) {
      answer = new Array(answer);
    }
    for (var i=0; answer.length >i; i++) {
      if (textType == "text") {
        content += answer[i] + "&lt;br&gt;";
      } else {
        content += answer[i];
      }
    }
  }
  return content;
}

function clicked(row) {
  searchOptions.clearSearchText();
  var message = "Loading folder... [" + row["name"] + "]...";
  showProgressBar(message);
  var xmlHeaders2 = AJAXRequest( processHeaders);
  categoryID = row["categoryID"];
  makeAJAXCall(xmlHeaders2, "ajax_headers.pyt" + getArgs(), true);
  resetNextPreviousLink();
}

function openClicked(row) {
  if(row["id"] == fullPathID) {
    return;
  }
  if (!subFoldersCalled[row["id"]]) {
    var xmlSubFolders = AJAXRequest(processSubfolders);
    makeAJAXCall(xmlSubFolders, "ajax_folders.pyt?categoryID=" + row["categoryID"], true);
  }
}

function paginateKB( url, mPP ) {
  if (!url) {
    maxPerList = mPP;
    var args = getArgs();
    args += "&maxPerList=" + maxPerList;
    url = "ajax_headers.pyt" + args;
  }
  showProgressBar();
  var xmlHeaders2 = AJAXRequest( processHeaders);
  makeAJAXCall(xmlHeaders2, url, true);
}

function doSort(url) {
  if( numSelected == 1 ){
    selectedQId = getSelectedColumn( "ID" );
  } else {
    selectedQId = "";
  }
  showProgressBar();
  var xmlHeaders2 = AJAXRequest( processHeaders);
  makeAJAXCall(xmlHeaders2, url, true);
}

function singleClickFunc() {
  document.getElementById("AnswerPane").style.display = "none";
  if( numSelected == 1 ){
    var ID = getSelectedColumn( "ID" );
    var listRow = getListRow( ID );
    //displayAnswers(listRow.answer, listRow.question, listRow.type, ID);
    displayAnswers(listRow);
    if (listRow.link != 0) {
      var catID =  listRow.link;
    } else {
       var catID = categoryID;
    }

    currentAnswerId = ID;
    currentAnswerCatId = catID;
    addScore(ID, catID, 1, true);
  } else if (numSelected == 0) {
    callAnswers();
  }
}

function addScore(ID, catID, rank, view) {
  //ss_writeToConsole(ID + ", " + catID + ", " + rank);
  if (view) {
    if (scoreRaisedViewed[ID]) {
      return;
    } else {
      scoreRaisedViewed[ID] = 1;
    }
  } else {
    if (scoreRaisedHelped[ID]) {
      return;
    } else {
      scoreRaisedHelped[ID] = 1;
    }
  }

  var scoreCall = AJAXRequest(processScore);
  var url = "ajax_actions.pyt?raiseScore=" + ID + "&rank=" + rank + "&categoryID=" + catID;
  makeAJAXCall(scoreCall, url, true);
  showProgressBar();
}

function processScore(data) {
  hideProgressBar();
}


function deleteFunc() {
  if (access == "READ") return;
  var delFolder = false;
  var delItem = false;
  var noAccessIDs = new Array();
  if (numSelected == 0) {
    //var treeObj = mainTree.treeData[mainTree.selectedRow];
    if (mainTree.selectedRow == "/")  return;
    var delFolder = true;
  } else {
    var IDs = getSelection();
    if (!IDs.push) {
      IDs = new Array(IDs);
    }
    for( i=0; i<IDs.length; i++){
      var listRow = getListRow( IDs[i] );
      //alert(IDs[i] + ", " + listRow.access);
      if( listRow.link  != 0 ){
        delFolder = true;
      } else {
        delItem = true;
      }
    }
  }
  if( delFolder && delItem ) {
    conf = "Are you sure you want to delete the selected folder(s) and item(s)?<br>Note that deleting a folder will delete all of its content." ;
  }
  else if( delFolder ){
    conf = "Are you sure you want to delete the selected folder(s)?<br>Note that deleting a folder will delete all of its content." ;
  }
  else {
    conf = "Are you sure you want to delete the selected item(s)?" ;
  }

  var confirmText = document.getElementById("ConfirmText");

  if ( 1 == 1 ) { // check access
    confirmText.innerHTML = conf;
    setPopupTitle("ConfirmPopup", "Confirm Delete");
    showPopup("ConfirmPopup");
  }

}

function confirmFunc() {
  if (numSelected == 0) {
    if (mainTree.selectedRow == "/")  return;
    var treeObj = mainTree.treeData[mainTree.selectedRow];
    var IDs = treeObj.realID;
    var myObj = new Object();
    myObj.id = treeObj.realID;
    myObj.fullName = mainTree.selectedRow;
    //myObj.parent = fullPathID;
    deleteFolders.push(myObj);
  } else {
    var IDs = getSelection();
    if(!IDs.push) {
      IDs = new Array(IDs);
    }
    for (var i=0; i<IDs.length; i++) {
      var listRow = getListRow( IDs[i] );
      if (listRow.link != 0) {
        var myObj = new Object();
        myObj.id = IDs[i];
        myObj.fullName = listRow.fullName;
        //myObj.parent = fullPathID;
        deleteFolders.push(myObj);
      }
    }
    var num = clearSelected();
  }
  var message = "Deleting " + num + " item(s)";
  var url = "ajax_headers.pyt?deleteIDs=" + IDs + "&amp;categoryID=" + categoryID;
  var xmlHeaders2 = AJAXRequest( processHeaders);
  makeAJAXCall(xmlHeaders2, url , true);
  hidePopup("ConfirmPopup");
  showProgressBar(message);
}


function trackMouse(event) {
  var fl = document.getElementById("FolderTree");
  var hl = document.getElementById("HeaderList");

  var ft = document.getElementById("FixedTop");
  var sc = document.getElementById("ScrollableContent");
  var ri = document.getElementById("ResizeIndicator");
  var br = document.getElementById("Breadcrumb");

  var ftHeight = ft.offsetHeight;

  var x = getEventX(event);
  var y = getEventY(event) - ftHeight - br.offsetHeight;

  if (0 >= fl.offsetWidth - x && fl.offsetWidth - x >= -3) {
    sc.style.cursor = "e-resize";
    ss_attachEvent(sc, "mousedown", startResizingFolders);
    ss_attachEvent(sc, "mouseup", stopResizing);

  } else if (0 >= hl.offsetHeight - y && hl.offsetHeight - y >= -3  && x > fl.offsetWidth) {
    sc.style.cursor = "n-resize";
    ri.style.top =  y  + "px";
    ss_attachEvent(sc, "mousedown", startResizingHeaders);
    ss_attachEvent(sc, "mouseup", stopResizing);
  } else if (!resizingHeaders && !resizingFolders) {
    sc.style.cursor = "auto";
    ri.style.left = x + "px";
    ss_detachEvent(sc, "mousedown", startResizingFolders);
    ss_detachEvent(sc, "mousedown", startResizingHeaders);
    ss_detachEvent(sc, "mouseup", stopResizing);
  }
}

function startResizingFolders() {
  ss_attachEvent(document, "mousemove", doBasicDrag);
  resizingFolders = true;

  return false;
}

function startResizingHeaders() {
  ss_attachEvent(document, "mousemove", doBasicDrag);
  resizingHeaders = true;

  return true;
}

function stopResizing() {
  var minSize = 50;
  var ri = document.getElementById("ResizeIndicator");
  var fl = document.getElementById("FolderTree");
  var hl = document.getElementById("HeaderList");
  var mp = document.getElementById("MessagePane");
  var ft = document.getElementById("FixedTop");
  var br = document.getElementById("Breadcrumb");

  var indicatorOffsetLeft = ri.offsetLeft;
  if ( indicatorOffsetLeft < minSize ) {
    indicatorOffsetLeft = minSize;
  }

  var indicatorOffsetTop = ri.offsetTop - br.offsetHeight; //  + ft.offsetHeight;

  if ( indicatorOffsetTop < minSize ) {
    indicatorOffsetTop = minSize;
  }

  if (resizingFolders) {
    fl.style.width = indicatorOffsetLeft;
    hl.style.marginLeft = fl.offsetWidth;
    mp.style.marginLeft = fl.offsetWidth;
    fl.scrollLeft = 0;
  } else if (resizingHeaders) {
    hl.style.height = indicatorOffsetTop;
    //ss_writeToConsole("folderTreeWidth= " + fl.offsetWidth + ", headerListHeight= " + hl.offsetHeight + ", indicatorOffsetTop= " + indicatorOffsetTop);
  } else {
    return;
  }

  ri.style.visibility = "hidden";

  // do not let Header frame be bigger than folder frame which causes to diappear message frame.
  if ( hl.offsetHeight > ( fl.offsetHeight- 20) ) {
    //ss_writeToConsole("hi-h= " + hl.offsetHeight + ", fl-h= " + fl.offsetHeight );
    hl.style.height = fl.offsetHeight - 20;
  }

  if (isOwner) {
    var args = "?folderTreeWidth=" + fl.offsetWidth;
    args += "&headerListHeight=" + hl.offsetHeight;
    args += "&op=resize";
    var saveCall = AJAXRequest(nothing);
    makeAJAXCall(saveCall, "ajax_actions.pyt" + args, true);
  }

  ss_detachEvent(document, "mousemove", doBasicDrag);
  document.body.style.MozUserSelect = "";
  if (resizingFolders) {
    resizeMessageFrame(1);
  } else {
    resizeMessageFrame();
  }
  resizingFolders = false;
  resizingHeaders = false;
}

function callBackFunc() {
  if ( numSelected == 0 ) {
    if (mainTree.selectedRow == "/") {
      disableMenuAction( "PRINT" );
      disableMenuAction( "DELETE" );
      disableMenuAction( "COPY" );
      disableMenuAction( "MOVE" );
    } else {
      enableMenuAction( "PRINT" );
      enableMenuAction( "DELETE" );
      enableMenuAction( "COPY" );
      enableMenuAction( "MOVE" );
    }
    enableMenuAction( "PROPERTIES" );
    disableMenuAction( "OPEN" );
  } else if ( numSelected == 1 ) {
    enableMenuAction( "PRINT" );
    enableMenuAction( "DELETE" );
    enableMenuAction( "PROPERTIES" );
    enableMenuAction( "COPY" );
    enableMenuAction( "MOVE" );
    enableMenuAction( "OPEN" );
  } else {
    document.getElementById("AnswerPane").style.display = "none";
    disableMenuAction( "PRINT" );
    enableMenuAction( "DELETE" );
    disableMenuAction( "PROPERTIES" );
    enableMenuAction( "COPY" );
    enableMenuAction( "MOVE" );
    if (isFolederSelected() ) {
      disableMenuAction( "OPEN" );
    } else {
      enableMenuAction( "OPEN" );
    }
  }

}

function isFolederSelected() {
  var links = getSelectedColumn("link");
  for (var i=0; i<links.length; i++ ){
    if (links[i] != 0) {
      return true;
    }
  }
  return false;
}

function clearSelected() {
  var IDs = getSelection();
  if ( !IDs.push ) {
    IDs = new Array(IDs);
  }
  numMessages = IDs.length;
  for (var i = 0; i < IDs.length; i++) {
    var rowId = IDs[i];
    if (selectedRows[rowId].parentNode) {
      selectedRows[rowId].parentNode.removeChild(selectedRows[rowId]);
      pos = indexOf(listOrder, rowId);
      listOrder.splice(pos, 1);
      delete listData[ rowId ];
    }
  }
  deselectAll();
  return numMessages;
}

function getArgs( noCategoryID ) {
  var args = "?" +  searchOptions.getQueryString();
  if (!noCategoryID) {
    args += "&categoryID=" + categoryID;
  }
  if (orderBy) {
    args += "&orderBy=" + orderBy;
  }
  if (order) {
    args += "&order=" + order;
  }

  return args;
}

function reSetMainForm(noCategoryID) {
  var formObj = document.mainForm;
  for (var i=0; i<formObj.length; i++) {
    formObj[i].value = "";
  }
  formObj.categoryID.value = categoryID;
}

function openFunc() {
  
  if (numSelected == 0) {
    return;
  } else if (numSelected == 1) {
    var ID = getSelection();
    var listRow = getListRow( ID );
    if(listRow.link != 0) {
      var row = new Object();
      row.categoryID = listRow.link;
      clicked(row);
      mainTree.openTreeFolder(listRow.fullName, true);
    } else {
      var contentDetails = document.getElementById("contentDetails")
      contentDetails.innerHTML = getContent(listRow.answer, listRow.type);
      setPopupTitle("ContentScreenPopup", listRow.question);
      showPopup("ContentScreenPopup");
    }
  } else {
    var IDs = getSelection();
    for (var i=0; i< IDs.length; i++) {
      if (i < (numberOfPopups + 1)) {
        var ID = IDs[i];
        var listRow = getListRow( ID );
        if(listRow.link == 0) {
          openProperties("", ID);
        }
      }
    }
  }
}

function setSelectValue(selectObj, val) {
  if (selectObj) {
    for ( i=0; i<selectObj.options.length; i++) {
      if (selectObj.options[i].value == val ) {
        selectObj.options[i].selected = true;
        break;
      }
    }
  }
}


function dropOnTree(event) {
  if(access == "READ") return;
  if (listDragging) {
    var droppedOn = getRowUnderCursor(event);
    if (droppedOn) {

      if(droppedOn.rowId == fullPathID) {
        return;
      }
      var args = getArgs();
      deleteFolders = new Array();
      args += "&MoveDest=" + mainTree.treeData[droppedOn.rowId].categoryID;
      args += "&destPath=" + droppedOn.rowId;

      var IDs = getSelection();
      if(!IDs.push) {
        IDs = new Array(IDs);
      }
      var selectedIds = "";
      for (var i=0; i<IDs.length; i++) {
        var listRow = getListRow( IDs[i] );
        if (listRow.link != 0) {
          selectedIds += ",c" + IDs[i];
          var myObj = new Object();
          myObj.id = IDs[i];
          myObj.fullName = listRow.fullName;
          myObj.parent = fullPathID;
          deleteFolders.push(myObj);
        } else {
          selectedIds += ",q" + IDs[i];
        }
      }
      args += "&Ids=" + selectedIds.substr(1);
      var url = "ajax_headers.pyt" + args;
      var num = clearSelected();
      var message = "Moving " + num + " item(s)";
      var xmlHeaders2 = AJAXRequest( processHeaders);
      makeAJAXCall(xmlHeaders2, url , true);
      hidePopup("CopyTreePopup");
      showProgressBar(message);
    }

  }
}

function openReadProperties(listRow) {

  if (!listRow || listRow.ID == 0) return;

  var thisPopup = false;
  for (var i=1; i<= numberOfPopups; i++ ) {
    if ( !isPopupOpen("PropertiesPopup" + i)) {
      var thisPopup = i;
      break;
    }
  }
  if (!thisPopup) {
    alert(allWindowAlert);
    return;
  }

  var  propertyParentSpanObj  = document.getElementById("PropertyParentSpan" + thisPopup);
  var  propertyNameSpanObj    = document.getElementById("PropertyNameSpan" + thisPopup);
  var  propertyIdSpanObj      = document.getElementById("PropertyIdSpan" + thisPopup);
  var  propertyWebSpanObj     = document.getElementById("PropertyWebSpan" + thisPopup);
  var  propertyUpdatedSpanObj = document.getElementById("PropertyUpdatedSpan" + thisPopup);
  var  PropertyScoreSpanObj   = document.getElementById("PropertyScoreSpan" + thisPopup);

  var thisPath = listRow.fullName;
  if(listRow.link != 0) {
    var parentPath = getParentPath(thisPath);
  } else {
    var parentPath = thisPath;
  }
  if (!parentPath) {
    parentPath = "/";
  }

  propertyParentSpanObj.innerHTML  = parentPath;
  propertyNameSpanObj.innerHTML    = listRow.question;
  propertyIdSpanObj.innerHTML      = listRow.ID;
  propertyWebSpanObj.innerHTML     = webBaseUrl + "ID=" + listRow.ID;
  propertyUpdatedSpanObj.innerHTML = listRow.dateDisplay;
  PropertyScoreSpanObj.innerHTML   = listRow.rank;
  showPopup("PropertiesPopup" + thisPopup, "TC");
  movePopup("PropertiesPopup" + thisPopup, thisPopup*20 - 10, 710, 250 );
  setTimeout(function() { adjustJSPopup("PropertiesPopup" + thisPopup);}, 50);
}

function callReadProperties(ID) {
  var data = answersData[ID];
  openReadProperties(data);
}

function callEditProperties(ID) {
  if ( answersDataNotTranslated[ID] ) {
    openEditProperties( answersDataNotTranslated[ID] );
  } else {
    var url = "ajax_answers.pyt?noTranslate=1&ID=" + ID ;
    var xmlAnswers2 = AJAXRequest(openEditProperties);
    makeAJAXCall(xmlAnswers2, url, true);
    showProgressBar();
  }

}


function openProperties(buttonName, ID) {

  if (numSelected > 1 && !ID) {
    return;
  } else if ( numSelected == 0 ) {
    var treeObj = mainTree.treeData[mainTree.selectedRow];
    if (mainTree.selectedRow == rootID) {
      var editAccess = rootAccess;
    } else {
      var editAccess = treeObj.access;
    }
    //alert("rootID=" + rootID + "\nrootAccess=" + rootAccess + "\nselected=" + mainTree.selectedRow);
    if ( editAccess == "READ" ) {
      callReadProperties(treeObj.realID);
    } else {
      callEditProperties(treeObj.realID);
    }
  } else {
    if(!ID) {
      var ID = getSelection();
    }
    var listRow = getListRow( ID );
    if ( listRow.editAccess == "READ") {
      openReadProperties(listRow);
    } else {
      callEditProperties(listRow.ID);
    }
  }
}



function openEditProperties( data ) {
  var row = data["row"];
  if (row.ID == 0) {
    showRootPropeties(row);
    return;
  }
  answersDataNotTranslated[row.ID] = data;
  var thisPopup = false;
  for (var i=1; i<= numberOfPopups; i++ ) {
    if ( !isPopupOpen("CopyTreePopup" + i)) {
      var thisPopup = i;
      break;
    }
  }
  if (!thisPopup) {
    alert(allWindowAlert);
    return;
  }

  var folderNameObj = document.getElementById("FolderName" + thisPopup);
  var itemNameObj = document.getElementById("ItemName" + thisPopup);
  var oldFolderNameObj = document.getElementById("OldFolderName" + thisPopup);
  var editCatgoryIDObj = document.getElementById("EditCatgoryID" + thisPopup);
  var editParentCatgoryObj = document.getElementById("EditParentCatgoryID" + thisPopup);
  var parentDivObj = document.getElementById("ParentDiv" + thisPopup);
  var parentSpanObj = document.getElementById("ParentSpan" + thisPopup);
  var escalteObj    = document.getElementById("Escalte" + thisPopup);
  var treeFolderIntroObj = document.getElementById("TreeFolderIntro" + thisPopup);
  var editInfoObj = document.getElementById("EditInfo" + thisPopup);
  var timeSelect = document.getElementById("TimeSelect" + thisPopup);
  var repliesSelect = document.getElementById("RepliesSelect" + thisPopup);
  var editIdSpanObj = document.getElementById("EditIdSpan" + thisPopup);
  var editIdValue = document.getElementById("EditIdValue" + thisPopup);
  var editWebSpanObj = document.getElementById("EditWebSpan" + thisPopup);
  var editUpdatedSpan = document.getElementById("EditUpdatedSpan" + thisPopup);
  var editScoreSpan = document.getElementById("EditScoreSpan" + thisPopup);
  var editorDivObj = document.getElementById("EditorDiv" + thisPopup);
  var folderNameDiv = document.getElementById("FolderNameDiv" + thisPopup);
  var helpUserObj   = document.getElementById("HelpUser" + thisPopup);
  var helpFeatureObj   = document.getElementById("HelpFeature" + thisPopup);
  var treeCopyObj = document.getElementById("TreeCopy" + thisPopup);
  var popAction = document.getElementById("PopAction" + thisPopup);
  var oldDescriptionLen = document.getElementById("OldDescriptionLen" + thisPopup);
  var isPopDirty = document.getElementById("IsPopDirty" + thisPopup);

  treeCopyObj.style.display = "none";

  treeFolderIntroObj.style.display = "none";
  editInfoObj.style.display = "block";
  if (helpActivated && row.helpID) {
    editIdSpanObj.innerHTML = row.helpID;
    editWebSpanObj.innerHTML = webBaseUrl + "helpID=" + row.helpID;
  } else {
    editIdSpanObj.innerHTML = row.ID;
    editWebSpanObj.innerHTML = webBaseUrl + "ID=" + row.ID;
  }
  editIdValue.value = row.ID;
  editUpdatedSpan.innerHTML = row.dateDisplay;
  editScoreSpan.innerHTML = row.rank;
  editorDivObj.style.display = "block";
  folderNameDiv.style.display = "block";

  setPopupTitle("CopyTreePopup" + thisPopup, "Properties");
  parentDivObj.style.display = "block";

  oldFolderNameObj.value = row.question;

  var content = getContent(row.answer);
  var thisEditor = eval("tinyMCE.editors.Description" + thisPopup);
  //tinyMCE.activeEditor.setContent( getContent(row.answer, row.type) );
  var thisContent = getContent(row.answer, row.type);
  thisEditor.setContent( thisContent );
  oldDescriptionLen.value = thisContent.length;
  isPopDirty.value = "";
  var thisPath = row.fullName;
  if (isPartner) {
    setSelectValue(helpUserObj, row.helpUser );
    setSelectValue(helpFeatureObj, row.helpFeature );
  }
  if(row.link != 0) {
    escalteObj.style.display = "block";
    setSelectValue(timeSelect, row.max_date );
    setSelectValue(repliesSelect, row.max_replies);
    var parentPath = getParentPath(thisPath);
    popAction.value = "editFolder";
    itemNameObj.style.display = "none";
    folderNameObj.style.display = "block";
    folderNameObj.value = row.question;
    editCatgoryIDObj.value = row.link;
  } else {
    if (isPartner) {
      escalteObj.style.display = "block";
    } else {
      escalteObj.style.display = "none";
    }
    var parentPath = thisPath;
    popAction.value = "editItem";
    itemNameObj.style.display = "block";
    folderNameObj.style.display = "none";
    editCatgoryIDObj.value = categoryID;
    itemNameObj.value = row.question;
  }
  parentSpanObj.innerHTML = parentPath;

  if (numSelected == 0) {
    var thisParentpath = getParentPath(mainTree.selectedRow);
    var treeObj = mainTree.treeData[thisParentpath];
    var parentCategoryID = treeObj.categoryID;
  } else {
    var parentCategoryID = categoryID;
  }
  editParentCatgoryObj.value = parentCategoryID;
  showPopup("CopyTreePopup" + thisPopup, "TC");
  movePopup("CopyTreePopup" + thisPopup, thisPopup*20 - 10, 710, 500 )
  setTimeout(function() { adjustJSPopup("CopyTreePopup" + thisPopup);}, 50);
  hideProgressBar();
}

function showRootPropeties(data) {
  var rootTimeSelect = document.getElementById("RootTimeSelect");
  var rootRepliesSelect = document.getElementById("RootRepliesSelect");
  setSelectValue(rootTimeSelect, data.max_date );
  setSelectValue(rootRepliesSelect, data.max_replies);
  showPopup("RootPropertyPopup");
  hideProgressBar();

}

function rootPropertyFunc() {
  var rootTimeSelect = document.getElementById("RootTimeSelect");
  var rootRepliesSelect = document.getElementById("RootRepliesSelect");
  var url = "ajax_answers.pyt?updateRoot=1&max_date=" + rootTimeSelect.value  + "&max_replies=" + rootRepliesSelect.value;
  xmlRootProperty = AJAXRequest(processRootProperty);
  makeAJAXCall(xmlRootProperty, url , true);
}

function processRootProperty(data) {
  hidePopup("RootPropertyPopup");
  if (data && data["row"] ) {
    answersData[0] = data["row"];
  }
}

function adjustJSPopup(popName) {
  var popupObj = document.getElementById(popName);
  var newHeight = popupObj.offsetHeight;
  var newWidth = popupObj.offsetWidth;
  resizePopup(popName, newWidth, (newHeight + 1));
}

function newItem() {
  loadCopyTreePopup( "newItem" ) ;
 }

 function newFolder() {
   loadCopyTreePopup( "newFolder" ) ;
 }

function copyFunc() {
 loadcopyMovePopup("Copy");
}

function moveFunc() {
  loadcopyMovePopup("Move");
}

function loadcopyMovePopup( act ) {
  setPopupTitle("CopyMovePopup", act);
  var copyMoveAction = document.getElementById("CopyMoveAction");
  copyMoveAction.innerHTML = act;
  var treeCopyObj = document.getElementById("CopyMoveTree");
  copyMoveTree = new SS_Tree( treeCopyObj, "copyMove", false);
  copyMoveTree.setOnOpen(openClicked);
  copyMoveTree.drawTree( mainTree.treeData[rootID] );
  setTimeout(function() { copyMoveTree.openTreeFolder( mainTree.selectedRow, false, false, true);}, 200);
  showPopup("CopyMovePopup", "TC");
}

function isPopupOpen(popupId) {
  var popupObj = document.getElementById(popupId);
  if (popupObj && popupObj.style.display == "block") {
    return true;
  } else {
    return false;
  }
}

function movePopup(popupId, dis, wt, ht) {
  var pageBody = document.getElementById("ScrollableContent");
  var popupObj = document.getElementById(popupId);
  var lt = pageBody.offsetWidth/2 - wt/2 + dis;
  resizePopup(popupId, wt, ht, dis, lt);
}

function loadCopyTreePopup( act ) {
  var thisPopup = false;
  for (var i=1; i<= numberOfPopups; i++ ) {
    if ( !isPopupOpen("CopyTreePopup" + i)) {
      var thisPopup = i;
      break;
    }
  }
  if (!thisPopup) {
    alert(allWindowAlert);
    return;
  }

  var folderNameObj = document.getElementById("FolderName"+ thisPopup);
  var itemNameObj = document.getElementById("ItemName"+ thisPopup);
  var parentDivObj = document.getElementById("ParentDiv" + thisPopup);
  var escalteObj    = document.getElementById("Escalte" + thisPopup);
  var treeFolderIntroObj = document.getElementById("TreeFolderIntro" + thisPopup);
  var editInfoObj = document.getElementById("EditInfo" + thisPopup);
  var editorDivObj = document.getElementById("EditorDiv" + thisPopup);
  var folderNameDiv = document.getElementById("FolderNameDiv" + thisPopup);
  var popAction = document.getElementById("PopAction" + thisPopup);
  var oldDescriptionLen = document.getElementById("OldDescriptionLen" + thisPopup);
  var isPopDirty = document.getElementById("IsPopDirty" + thisPopup);

  parentDivObj.style.display = "none";

  popAction.value = act;
  folderNameObj.value = "";
  itemNameObj.value = "";
  if ( act == "newFolder" ) {
    escalteObj.style.display = "block";
    setPopupTitle("CopyTreePopup" + thisPopup, "New Folder");
    var timeSelect = document.getElementById("TimeSelect" + thisPopup);
    var repliesSelect = document.getElementById("RepliesSelect" + thisPopup);
    setSelectValue(timeSelect, 5);
    setSelectValue(repliesSelect, 5);
    editorDivObj.style.display = "block";
    folderNameDiv.style.display = "block";
    folderNameObj.style.display = "block";
    itemNameObj.style.display = "none";
  } else if (act == "newItem") {
    if (isPartner) {
      escalteObj.style.display = "block";
    } else {
      escalteObj.style.display = "none";
    }
    setPopupTitle("CopyTreePopup" + thisPopup, "New Item");
    editorDivObj.style.display = "block";
    folderNameDiv.style.display = "block";
    folderNameObj.style.display = "none";
    itemNameObj.style.display = "block";
  }
  treeFolderIntroObj.style.display = "block";
  editInfoObj.style.display = "none";

  var thisEditor = eval("tinyMCE.editors.Description" + thisPopup);
  //tinyMCE.activeEditor.setContent("");
  thisEditor.setContent("");
  oldDescriptionLen.value = 0;
  isPopDirty.value = "";
  var treeCopyObj = document.getElementById("TreeCopy" + thisPopup);
  treeCopyObj.style.display = "block";
  var thisCopyTree = new SS_Tree( treeCopyObj, "copy" + thisPopup, false);
  thisCopyTree.setOnOpen(openClicked);
  thisCopyTree.drawTree( mainTree.treeData[rootID] );
  showPopup("CopyTreePopup" + thisPopup, "TC");
  movePopup("CopyTreePopup" + thisPopup, thisPopup*20 - 10, 710, 500 )
  if (act == "newFolder" ) { 
    folderNameObj.focus();
  } else if (act == "newItem") {
    itemNameObj.focus();
  }
  setTimeout(function() { thisCopyTree.openTreeFolder( mainTree.selectedRow, false, false, true);}, 200);
  setTimeout(function() { adjustJSPopup("CopyTreePopup" + thisPopup);}, 220);
  copyOfTrees[thisPopup] = thisCopyTree;
}


function isValid( nam ) {
  nam = unescape(nam);
  nam = nam.replace(/ /g, "");
  var re = new RegExp("[^A-Z0-9a-z_.:-]");
  if ( re.test(nam)) {
     return false;
  } else {
     return true;
  }
}



function copyTreeFunc(popupId) {

  var thisPopup = popupId.substr(popupId.length-1, 1);

  var timeSelect = document.getElementById("TimeSelect" + thisPopup);
  var repliesSelect = document.getElementById("RepliesSelect" + thisPopup);
  var descriptionObj = document.getElementById("Description" + thisPopup);
  var folderNameObj = document.getElementById("FolderName" + thisPopup);
  var itemNameObj = document.getElementById("ItemName" + thisPopup);
  var oldFolderNameObj = document.getElementById("OldFolderName" + thisPopup);
  var editCatgoryIDObj = document.getElementById("EditCatgoryID" + thisPopup);
  var editParentCatgoryObj = document.getElementById("EditParentCatgoryID" + thisPopup);
  var helpUserObj   = document.getElementById("HelpUser" + thisPopup);
  var helpFeatureObj   = document.getElementById("HelpFeature" + thisPopup);
  var popAction = document.getElementById("PopAction" + thisPopup);
  var formObj = document.mainForm;

  var thisAction = popAction.value;
  if (thisAction == "newFolder" || thisAction == "editFolder") {
    var activeNameObj = folderNameObj;
  } else {
    var activeNameObj = itemNameObj;
  }

  //This is an editor function which is adding message to form
  tinyMCE.triggerSave(true, true);
  if (ie) {
    // ie is using post method and already escape in template.
    var desc = descriptionObj.value;
    var name = activeNameObj.value;
  } else {
    var desc = encodeURIComponent(descriptionObj.value);
    var name = encodeURIComponent(activeNameObj.value);
  }

  if (!name) {
    alert("Please enter a name");
    activeNameObj.focus();
    return;
  } else if ( (thisAction == "newFolder" || thisAction == "editFolder") && !isValid(name)) {
    alert("Folder name must only contain letters, digits, underscores, spaces, dashes, colons and dots.");
    return;
  }
  var formObjAction = eval("formObj." + thisAction);
  var args = getArgs();
  reSetMainForm();
  if (thisAction == "newFolder" || thisAction == "newItem") {
    var thisCopyTree = copyOfTrees[thisPopup];
    var message = "Creating " + name ;
    var row = mainTree.treeData[thisCopyTree.selectedRow];
    args += "&" + thisAction + "=" + name + "&parentID=" + thisCopyTree.selectedRow;
    args += "&parentCategoryID=" + row.categoryID + "&desc=" + escape(desc);
    formObjAction.value = name
    formObj.parentID.value = thisCopyTree.selectedRow;
    formObj.parentCategoryID.value = row.categoryID;
    formObj.desc.value = desc;
  } else if (thisAction == "editFolder" || thisAction == "editItem") {
    var message = "Editing " + name ;
    var ID = document.getElementById("EditIdValue" + thisPopup).value;
    args += "&" + thisAction + "=" + ID + "&name=" + name;
    formObjAction.value = ID;
    formObj.name.value = name;
    args += "&desc=" + desc;
    args +=  "&oldName=" +  oldFolderNameObj.value;
    args += "&thisCategoryID=" + editCatgoryIDObj.value + "&parentCategoryID=" + editParentCatgoryObj.value;
    formObj.desc.value = desc;
    formObj.oldName.value = oldFolderNameObj.value;;
    formObj.thisCategoryID.value = editCatgoryIDObj.value;
    formObj.parentCategoryID.value = editParentCatgoryObj.value;
    selectedQId = ID;
    delete answersData[ID];
    delete answersDataNotTranslated[ID];
  }

  if (isPartner) {
    if (helpUserObj) {
      args += "&helpUser=" + helpUserObj.value;
      formObj.helpUser.value = helpUserObj.value;
    }
    if (helpFeatureObj) {
      args += "&helpFeature=" + helpFeatureObj.value;
      formObj.helpFeature.value = helpFeatureObj.value;
    }
  } else if (thisAction == "newFolder" || thisAction == "editFolder") {
    if (timeSelect) {
      args += "&time=" + timeSelect.value;
      formObj.time.value = timeSelect.value;
    }
    if (repliesSelect) {
      args += "&replies=" + repliesSelect.value;
      formObj.replies.value = repliesSelect.value;
    }
  }
  var url = "ajax_headers.pyt" + args;
  var xmlHeaders2 = AJAXRequest( processHeaders);


  if (ie) {
    makeAJAXFormCall(xmlHeaders2, formObj, "ajax_headers.pyt");
  } else if ( formObj.desc.value.length < 3000 ) {
    makeAJAXCall(xmlHeaders2, url , true);
  } else {
    //Some versions of Mozilla are not supporting submit using method post by Ajax 
    //so if there is a big message we should use regular submit.
    formObj.submit();
  }

  hidePopup("CopyTreePopup" + thisPopup);
  showProgressBar(message);
}

function copyMoveFunc(id) {
  var copyMoveAction = document.getElementById("CopyMoveAction");
  var thisAction = copyMoveAction.innerHTML;

  deleteFolders = [];
  if (thisAction == "Move") {
    var message = "Moving selected items";
  } else {
    var message = thisAction + "ing selected items";
  }
  var row = mainTree.treeData[copyMoveTree.selectedRow];
  var args = getArgs();
  args += "&" + thisAction + "Dest=" + row.categoryID;
  args += "&destPath=" + copyMoveTree.selectedRow;

  if (numSelected == 0) {
    if (mainTree.selectedRow == "/") {
      return;
    }
    var treeObj = mainTree.treeData[mainTree.selectedRow];
    selectedIds = ",c" + treeObj.realID;
    var myObj = new Object();
    myObj.id = treeObj.realID;
    myObj.fullName = mainTree.selectedRow;
    deleteFolders.push(myObj);
  } else {
    var IDs = getSelection();
    if(!IDs.push) {
      IDs = new Array(IDs);
    }
    var selectedIds = "";
    for (var i=0; i<IDs.length; i++) {
      var listRow = getListRow( IDs[i] );
      if (listRow.link != 0) {
        selectedIds += ",c" + IDs[i];
        var myObj = new Object();
        myObj.id = IDs[i];
        myObj.fullName = listRow.fullName;
        //myObj.parent = fullPathID;
        deleteFolders.push(myObj);
      } else {
        selectedIds += ",q" + IDs[i];
      }
    }
  }
  if (!selectedIds) {
    hidePopup("CopyMovePopup");
    return;
  }
  args += "&Ids=" + selectedIds.substr(1);

  var url = "ajax_headers.pyt" + args;

  var xmlHeaders2 = AJAXRequest( processHeaders);
  makeAJAXCall(xmlHeaders2, url , true);
  hidePopup("CopyMovePopup");
  showProgressBar(message);
}

function importFunc() {
  url = "/templates/importexport.pyt?type=import&amp;app=Knowledge Base" + importExportExtraParam;
  openWindow('medium', url);
}

function exportFunc() {
  url = "/templates/importexport.pyt?type=export&amp;app=Knowledge Base" + importExportExtraParam;
  openWindow('medium', url);
}

function printFunc() {
  if (numSelected == 1) {
    var qID = getSelectedColumn( "ID" );
  } else if ( numSelected == 0 ) {
    var treeObj = mainTree.treeData[mainTree.selectedRow];
    var qID = treeObj.realID;
  }
  if( qID) {
    var url = "answer.pyt?mode=answer&amp;print=1&amp;ID=" + qID;
    openWindow("x-large/medium", url);
  }
}

function otherKB() {
  document.location.href = "other.pyt"
}

function manageTickets() {
  var url = "category_tickets.pyt?view=supervisor&categoryID=" + getSelectedCatId();
  openWindow( "xxx-large/medium" , url );
}

function manageStaff() {
  var url = "staff_list.pyt?categoryID=" + getSelectedCatId();
  openWindow( "xx-large/medium" , url );
}

function assignedTickets() {
  var url = "category_tickets.pyt?view=staff&categoryID=" + getSelectedCatId();
  openWindow( "xxx-large/medium" , url );
}

function getSelectedCatId() {
  var ID = getSelection();
  var thisCatID = categoryID;
  if (!ID.push) {
    var listRow = getListRow(ID);
    if (listRow.link != 0) {
      thisCatID = listRow.link;
    }
  }
  return thisCatID;
}

function mailLocation(){
  var propertiesIDs = getListSelection();
  var message = "";
  if ( propertiesIDs.push ) {
    for ( i=0; i < propertiesIDs.length; i++ ) {
      message += featureUrl + "?propertiesID=" + propertiesIDs[i] + "<br>\n";
    }
  } else {
    message += featureUrl + "?propertiesID=" + propertiesIDs;
  }
  if ( isWebmailEnable ) {
    var url  = "/webmail/compose.pyt?message=" + message;
    openWindow("xxx-large/x-large", url);
  } else {
    document.location.href = "mailto:?body=" + message;
  }
}

function mailItem(){
  var propertiesIDs = getSelection();
  if ( propertiesIDs.push ) {
    for ( i=0; i < propertiesIDs.length; i++ ) {
      mailSingleItem ( propertiesIDs[i] ) ;
    }
  } else {
    mailSingleItem ( propertiesIDs ) ;
  }
}


function mailSingleItem( itmeID ) {
  var listRow = getListRow( itmeID );
  var message = featureUrl + "?propertiesID=" + itmeID + "<br>\n";
  var question = listRow.question;
  var subject = "Knowledgebase Item: " + question;
  var parentFolder = listRow.fullName;

  if ( listRow.link == 0 ) {
    var parent = parentFolder;
  } else {
    var parent = getParentPath(parentFolder);
  }

  if ( parent == "/"  || parent == "") {
    parent = "Top Folder" ;
  } else {
    parent = parent.substr(1);
    parent = parent.replace(/\//g, " > ");
  }
  if (listRow.answer) {
    var answer = listRow.answer;
  } else {
    var answer = "";
  }
  message += "__________________________________________________<br>\n";
  message += ( "Parent: " + parent + "<br>\n" );
  message += ( "Last Updated: " + listRow.date.substr( 0, 10 ) + "<br>\n" );
  message += ( "Score: " + listRow.rank  + "<br>\n" );
  message += ( "Item Title: " + question + "<br>\n" );
  message += ( "Description: " + answer + "<br>\n" );
  message += "__________________________________________________";

  if ( isWebmailEnable ) {
    var formObj = document.mailItemsForm;
    formObj["message"].value = message;
    formObj["subject"].value = subject;
    var newWin = openWindow("xxx-large/x-large", "");
    formObj.target = newWin.name;
    formObj.submit();
  } else {
    document.location.href = "mailto:?subject=" + subject + "&body=" + message;
  }
}

function accessControl() {
 if( numSelected == 0 ){
    var path = fullPathID;
  } else{
    var path = getSelectedColumn( "fullName" );
  }
  var url = featureAccess + "?feature=knowledgebase&amp;path=" + path + "&amp;showPath=" + path;
  openWindow( "medium/small", url )
}

function openOptions(){
  url = "options.pyt";
  openWindow( "x-large/small", url );
}

function ticketResponse() {
  openWindow( "x-large/large", "automated_ticket_response.pyt" );
}

function otherKB() {
  document.location.href = "other.pyt";
}

function searchFunc() {
  var url = "search.pyt";
  openWindow( "xx-large/large", url );
}

function askUsFunc() {
  var url = "new_ticket.pyt?categoryID=" + categoryID;
  openWindow( "xx-large/medium", url );
}

function newTicket(){
  if( askus == "on" ){
    askUsFunc();
  } else {
    addScore(currentAnswerId, currentAnswerCatId, -5);
  }
}

function checkTicketStatus() {
  openWindow( "xx-large/medium", "my_tickets.pyt" );
}

function goToMain() {
  document.location.href = "browse.pyt";
}

function isFolderDeleted(id, errors) {
  if (errors) {
    for (var i=0; i< errors.length; i++) {
      if (errors[i] == id) {
        return false;
      }
    }
  }
  return true;
}

function optionsPageChanges(askUsStaus, preferedViewStatus) {
  if (askUsStaus == "hide" ) {
    try {
      hideMenuAction( "ASK_US" );
      hideMenuAction( "CHECK_STATUS" );
    } catch(e) {}
    askus = "";
  } else if (askUsStaus == "show") {
    try {
      showMenuAction( "ASK_US" );
      showMenuAction( "CHECK_STATUS" );      
    } catch(e) {}
    askus = "on";
  }
  if (preferedViewStatus) {
    if(preferedViewStatus != orderBy) {
      orderBy = preferedViewStatus;
      reloadHeaders();
    }
  }
}

function searchEntries( options ) {
  reloadHeaders();
}

function showAdvancedSearchResult(id, parentID, path) {
  mainTree.openTreeFolder(path, true);
  categoryID = parentID;
  selectedQId = id;
  reloadHeaders(true);
}



function resizeMessageFrame(browserResize) {
  var msgPane = document.getElementById("MessagePane");
  var hdrList = document.getElementById("HeaderList");
  var listDiv = document.getElementById("ListDiv");
  var headDiv = document.getElementById("ListHeaderDiv");
  var fldrList = document.getElementById("FolderTree");
  var sc = document.getElementById("ScrollableContent");
  var ft = document.getElementById("FixedTop");
  var wc = document.getElementById("KBContainer");
  var ansBut = document.getElementById("AnswerButtons");
  var ansTit = document.getElementById("AnswerPopupTitle");
  var ansCon = document.getElementById("AnswerContent");

  var oldHeader = document.getElementById("OldHeader");
  var currentHeader = document.getElementById("CurrentHeader");

  if (oldHeader && currentHeader && browserResize) {
    var headerTable = document.createElement("table");
    if (ie) {
      oldHeader.style.display = "block";
    } else {
      oldHeader.style.display = "table-row-group";
    }

    currentHeader.parentNode.removeChild(currentHeader);
    var listDiv = document.getElementById("ListDiv");
    var nd = listDiv.firstChild.childNodes
    var tr1 = nd[nd.length - 1].firstChild;

    if (tr1) {
      for (var i = tr1.childNodes.length - 1; i >= 0; i--) {
        oh = oldHeader.firstChild.childNodes[i];
        var thisImg = tr1.childNodes[i].childNodes[tr1.childNodes[i].childNodes.length-1];
        if (thisImg) {
          thisImg.parentNode.removeChild(thisImg);
        }
         tr1.childNodes[i].style.width = null;
      }
    }
  }

  fldrList.style.height = sc.offsetHeight;

  var ht = sc.offsetHeight - hdrList.offsetHeight; // - ft.offsetHeight;
  if ( sc.offsetHeight > (hdrList.offsetHeight - 20)  && ht > 0) {
    msgPane.style.height = ht;
  } else if (sc.offsetHeight > 20){
    //ss_writeToConsole("sc-h=" + sc.offsetHeight + ", (hl-h-20)=" + (hdrList.offsetHeight - 20) + ", ht= " + ht );
    hdrList.style.height = sc.offsetHeight - 20;
    msgPane.style.height = 20;
  }

  msgPane.style.height = sc.offsetHeight - hdrList.offsetHeight;
  msgPane.style.width = sc.offsetWidth - fldrList.offsetWidth;
  if(ie) {
    ansCon.style.height = msgPane.offsetHeight - ansBut.offsetHeight - ansTit.offsetHeight - 18;
  } else {
    ansCon.style.height = msgPane.offsetHeight - ansBut.offsetHeight - ansTit.offsetHeight - 28;
  }

  if (listDiv && headDiv) {
    if ( hdrList.offsetHeight > headDiv.offsetHeight ) {
      listDiv.style.height = hdrList.offsetHeight - headDiv.offsetHeight;
      listDiv.style.width = sc.offsetWidth - fldrList.offsetWidth;
      listDiv.style.overflowX = "hidden";
      sc.style.overflow = "hidden";
    }
  }
}

function resizeFrames() {
  resizeMessageFrame(1)
}

function getParentPath( path ) {
  var parentPath = path.substr(0, path.lastIndexOf("/"));
  if (parentPath == "") {
    parentPath = "/";
  }
  return parentPath;
}

function heplFunc() {
  var url ="/knowledgebase/help/browse.pyt";
  openWindow("xxx-large/large" , url);
}

function backAndForth( step ) {
  var len = nextPreviousLinks.length;
  if ( step == -1 ) {
    if ( (len - backCounts) > 1 ) {
      backCounts += 1;
      var pathID =  nextPreviousLinks[ len - backCounts - 1 ];
      reloadHeadersByPath( pathID  );
    }
  } else {
    if ( backCounts > 0 ) {
      backCounts -= 1;
      var pathID =  nextPreviousLinks[ len - backCounts - 1  ];
      reloadHeadersByPath( pathID  );

    }
  }
}

function setNextPreviousLink( path ) {
  if ( backCounts == null ) {
    nextPreviousLinks.push(path);
  }
}

function resetNextPreviousLink () {
   if ( backCounts != null) {
     if (backCounts > 0 ) {
       var len = nextPreviousLinks.length;
       nextPreviousLinks = nextPreviousLinks.splice(0, len - backCounts);
     }
     backCounts = null;
   }
}

function openHelpID( helpID ) {
  var url = "answer.pyt?isPopup=1&amp;mode=answer&amp;helpID=" + helpID;
  openWindow("x-large/medium", url);
}

function cancelAction(popupId) {
  try {
    var thisPopup = popupId.substr(popupId.length-1, 1);
    var isPopDirty = document.getElementById("IsPopDirty" + thisPopup).value;
    if (!isPopDirty) {
      var oldDescriptionLen = document.getElementById("OldDescriptionLen" + thisPopup).value;
      var descriptionObj = document.getElementById("Description" + thisPopup);
      tinyMCE.triggerSave(true, true);
      newDescriptionLen = descriptionObj.value.length;
      // Mozilla is putting a br like the following if nothing is entered.
      if (oldDescriptionLen == 0 && descriptionObj.value == '<p><br mce_bogus="1"></p>') {
        newDescriptionLen = 0;
      }
      if ( oldDescriptionLen != newDescriptionLen ) {
        isPopDirty = 1;
      }
    }
    
    if ( isPopDirty) {
      var conf = confirm("Are you sure you want to cancel?");
    } else {
      var conf = 1;
    }
    if (conf) {
      hidePopup(popupId);
    }
  } catch(e) {
    hidePopup(popupId);
  }
}

function setPopDirty(thisPopup) {
  document.getElementById("IsPopDirty" + thisPopup).value = 1;
}

function setProgressBar() {
  // this function is called after 0.2 seconds
  // show progress bars if headers not loaded yet.
  if ( !headersLoaded ) {
    showProgressBar("Loading");
  }
}
