/* ui.js */

ns6 = (document.getElementById)? true:false
ns4 = (document.layers)? true:false
ie4 = (document.all)? true:false

tabChar = "\t";
selectionContainsFolder = false;
displaynameArray = null;


function isShift(e) {
          if (ns4) {
             if(e.modifiers & Event.SHIFT_MASK)
                return true;
          } else {
             if(e.shiftKey)
                return true;
          }
          return false;
}

function isCtrl(e) {
          if (ns4) {
             if(e.modifiers & Event.CONTROL_MASK)
                return true;
          } else {
             if(e.ctrlKey)
                return true;
          }
          return false;
}



function getObject(name)
{
	if (ie4)
		return document.all[name];
	else if (ns6)
		return document.getElementById(name);
	else
		return document.layers[name];
}

function showObject(id) {
	if (ns4) document.layers[id].visibility = "show"
	else if (ie4) document.all[id].style.visibility = "visible"
}

function hideObject(id) {
	if (ns4) document.layers[id].visibility = "hide"
	else if (ie4) document.all[id].style.visibility = "hidden"
}

function objectVisible(id) {
	if (ns4) return document.layers[id].visibility != "hide"
	else if (ie4) return document.all[id].style.visibility != "hidden"
}

function moveTo(id,x,y) {
	obj = getObject(id);
	if (ie4)
	{
		obj.style.pixelLeft = x;
		obj.style.pixelTop = y;
	}
	else
	{
		obj.xpos = x;
		obj.left = obj.xpos;
		obj.ypos = y;
		obj.top = obj.ypos;
	}
}

function getAbsoluteLeft(oNode){
   var oCurrentNode=oNode;
   var iLeft=0;
   while(oCurrentNode.tagName!="BODY"){
      iLeft+=oCurrentNode.offsetLeft;
      oCurrentNode=oCurrentNode.offsetParent;
   }
   alert("Left: " + oNode.offsetLeft + "\nAbsolute Left: " + iLeft);
}

function objectX(id) {

	if (ie4)
		return document.all[id].offsetLeft;
	else	return document.layers[id].left;
}


function windowName(href)
{
        var name = href;

        name =
name.replace(/[\/\ \|\-\'\.\"\@\%\$\&\+\=\~\*\^\!\(\)\[\]\{\}\;\?]/g,"_");

        if(name.length > 40)
        {
           name = name.substring(name.length - 40,name.length);
        }
        return name;
}


function objectY(id) {

	if (ie4)
		return document.all[id].offsetTop;
	else	return document.layers[id].top;
}


function onLoad()
{
	window.status = "";
}

function view(query)
{
	var doc;
	doc = (top.frames['FolderView']) ? top.frames['FolderView'] : document;

	doc.location = top.uiUrl+"/ObjectServlet?" + query;
}

function reOrderList(fileName, orderBy, descending, page){
	descParam="";
	pageParam="";

	if (descending != null){

		if (descending == 'true' || descending=='false'){
			descParam="&inDescendingOrder="+descending;
		}
		else{
		//the page parameter must be in the third place
		page = descending
		}

	}

	if (page != null){
		pageParam="&page="+page;
	}
	view("href=" + escapePlus(fileName) + "&tab="+ escape("LIST") + "&orderBy=" + escape(orderBy) + descParam + pageParam);

}

function checkpointFolder(folderName)
{
	view("href=" + escapePlus(folderName) + "&action=checkpoint");
}

function checkpointObject(folderName)
{
	view("href=" + escapePlus(folderName) + "&action=checkpoint");
}

function openObject(fileName,tab)
{
	if (confirmExit())
	{
		if (tab && tab != "")
			view("href=" + escapePlus(fileName) + "&tab=" + escape(tab));
		else
			view("href=" + escapePlus(fileName));
	}
}

function escapePlus(href){
	href=escape(href);
	href= href.replace(/\+/g,"%2B");
	return href;
}



function openAction(fileName,action)
{
	if (confirmExit())
	{
		selectedList = getSelected();
		view("href=" + escapePlus(fileName) + "&action=" + escape(action) + "&selected=" + escape(selectedList));
	}
}

function openNavigationFolder(href)
{
	if (top.frames['Navigation'])
		top.frames['Navigation'].openTree(href);
}

function highlightNavigationFolder(href)
{
	if (top.frames['Navigation'])
	{
		if(top.treeLoading == false){//tree is not currently loading so continue
			var openList;

			if (top.frames['Navigation'].openList)
				openList = top.frames['Navigation'].openList;
			else
				openList = "/";

			//alert(top.publishUrl);
			top.treeLoading = true;
			top.frames['Navigation'].location = top.publishUrl+"/?template=/ui/templates/navigation&open=" + escape(openList) + "&selected=" + escape(href) + "#focus";
		}
	}
}

function reloadNavigationFolder(href)
{
	if (top.frames['Navigation'])
	{
		if(top.treeLoading){//tree is not currently loading so continue
			top.treeLoading = true;
			top.frames['Navigation'].location.reload(true);
		}
	}

}

function setVersion(event,href)
{
	var doc;
        var currentVersion = 0;

	if(window.hasidx != null && !isShift(event)) {
  	    doc = (top.frames['FolderView']) ? top.frames['FolderView'] : document;
	    doc.location = top.publishUrl+"/ui/utils/listversions?href="+escapePlus(href);
	    return false;
	}

	if(window.atVersion)
	    currentVersion = window.atVersion;

	var version = prompt("Enter view version number (-1 = remove versioning)",currentVersion);

	if(version == null)
	   return false;

        var i = parseInt (version);

        if (isNaN (i))
            return false;

        i = i.toString (); 

        if (i != version)
            return false;

	doc = (top.frames['FolderView']) ? top.frames['FolderView'] : document;
	doc.location = top.publishUrl+"/ui/utils/setSessionVersion?version="+version+"&href="+escapePlus(href);
	return false;
}

function setPhase(href)
{
	var doc;
        var currentPhase = -1;
	if(window.atPhase)
	    currentPhase = window.atPhase;

	var phase = prompt("Enter phase number for preview mode (-1 = max phase)",currentPhase);

	if(phase == null)
	   return false;

        var i = parseInt (phase);

        if (isNaN (i))
            return false;

        i = i.toString (); 

        if (i != phase)
            return false;

	doc = (top.frames['FolderView']) ? top.frames['FolderView'] : document;
	doc.location = top.publishUrl+"/ui/utils/setPhase?phase="+phase+"&href="+escapePlus(href);
	return false;
}


function openPreview(event,href)
{
	if(isShift(event)) {
		setPhase(href);
        } else {
	        previewWindow = window.open(escape(href),windowName('preview'+href)); //,'toolbar=yes,location=yes,menubar=yes,status=yes,resizable=yes,width=600,height=600');
	        if (!((document.all)? true:false))
		        previewWindow.focus();
        }
}

function openView(href)
{
	previewWindow = window.open(escape(href),windowName('preview'+href)); //,'toolbar=yes,location=yes,menubar=yes,status=yes,resizable=yes,width=600,height=600');
	if (!ie4)
		viewWindow.focus();
}


/*
function openExport(href)
{
	href = top.uiUrl+'/ObjectServlet?href=' + href + '&action=export';
	exportWindow = window.open(escape(href),'exportWindow');
	if (!ie4)
		exportWindow.focus();
}
*/

function openImport(href)
{
	if (confirmExit())
	{
		view("href=" + escapePlus(href) + "&action=import");
	}
}

function openPublish(href)
{
	if (confirmExit())
	{
		view("href=" + escapePlus(href) + "&action=publish");
	}
}

function selectItem(basename,href)
{
	if (ie4 || ns6)
	{
		getObject("selectRow_"+basename).className = 'highlight';
		getObject("itemLink_"+basename).className = 'highlight';
	}
	else
	{
		document.images["selectImage_"+basename].icon = document.images["selectImage_"+basename].src;
		document.images["selectImage_"+basename].selected = true;
		if (document.images["selectImage_"+basename].selectedSrc)
			document.images["selectImage_"+basename].src = escape(document.images["selectImage_"+basename].selectedSrc);
		else
			document.images["selectImage_"+basename].src = top.publishUrl+"/ui/images/object-selected.gif";
	}
}

function unselectItem(basename,href)
{
	if (ie4 || ns6)
	{
		getObject("selectRow_"+basename).className = 'normal';
		getObject("itemLink_"+basename).className = 'normal';
	}
	else
	{
		document.images["selectImage_"+basename].selected = false;
		document.images["selectImage_"+basename].src = document.images["selectImage_"+basename].icon;
	}
}

function itemIsSelected(basename)
{
	if (ie4 || ns6)
		return getObject("selectRow_"+basename).className == 'highlight';
	else
		return document.images["selectImage_"+basename].selected == true;
}

function toggleItem(basename,href)
{
	if (itemIsSelected(basename))
		unselectItem(basename,href);
	else
		selectItem(basename,href);
}

function selectAll()
{
	for (n=0; n<displaynameArray.length; n++)
		selectItem(displaynameArray[n],hrefArray[n]);
}

function unselectAll()
{
	for (n=0; n<displaynameArray.length; n++)
		unselectItem(displaynameArray[n],hrefArray[n]);
}


function getSelected()
{
	var selectedList = "";
	selectionContainsFolder = false;

	if (!displaynameArray)
		return "";

	for (n=0; n<displaynameArray.length; n++)
	{
		if (itemIsSelected(displaynameArray[n]))
		{
			/*if (displaynameArray[n].search("trashcan") != -1){
				//alert("isTrashcan");
			}*/

			if(hrefIsFolder(hrefArray[n])){
				selectionContainsFolder = true;
			}
			if (selectedList != "")
				selectedList = selectedList + tabChar;
			selectedList = selectedList + hrefArray[n];
		}
	}
       	setSelected(selectedList);

	return selectedList;

}

function countSelected()
{
	var items = 0;

	if (displaynameArray != null)
	{
		for (n=0; n<displaynameArray.length; n++)
		{
			if (itemIsSelected(displaynameArray[n]))
				items++;
		}
		return items;
	}
	else
		return -1;
}

lastMarked = -1;
multiselected = "false";

function markSelected(event,index,basename,href)
{
	if(isCtrl(event))
		ctrl = "true";
	else
		ctrl = "false";

	if(isShift(event))
		shifted = "true";
	else
		shifted = "false";



	if(shifted == "true" && lastMarked >= 0)
        {
	        if(lastMarked < index)
                {
			start = lastMarked;
			end = index;
		}
		else
		{
			start = index;
			end = lastMarked;
		}

		multiselected = "true";
		for (n=start; n<=end; n++)
			selectItem(displaynameArray[n],hrefArray[n]);
	}
	else
	{
		if(lastMarked >= 0 && ctrl == "false")
		{

			if(multiselected == "true")
			{

			        toggleItem(basename,href);
				unselectAll();
			}
			else
				unselectItem(displaynameArray[lastMarked],hrefArray[lastMarked]);
		}

	        toggleItem(basename,href);
		lastMarked = index;

		if(ctrl == "false")
			multiselected = "false";
		else
			multiselected="true";
	}
	return false;
}

function deleteSelected(event,folderName)
{
	if(isShift(event) || window.noTrashCan)
		shifted = "true";
	else
		shifted = "false";

	selectedList = getSelected();
	itemsSelected = countSelected();

	if (itemsSelected >= 1)
	{
		if (itemsSelected > 1)
			objs = "these " + itemsSelected + " objects";
		else
			objs = "this object";

                if(shifted == "true")
                {
		 	if (!window.confirm("Are you sure you want to permanently delete "+objs+"?"))
				return;
		}
		else
		{
		 	if (!window.confirm("Are you sure you want to send "+objs+" to the trashcan?"))
				return;
		}
                setAction('delete');
		setHref(escapePlus(folderName));
		setShifted(shifted);
		submitSelectedForm();
		//view("href=" + escape(folderName) + "&action=delete&shifted="+shifted+"&target=" + escape(selectedList));
	}
	else
		alert("You must select at least one object or folder to delete.");

}

function setSelected(selectedList)
{
	document.selectedForm.elements["target"].value = selectedList;
}

function setAction(action)
{
	document.selectedForm.elements["action"].value = action;
}

function setHref(href)
{
	document.selectedForm.elements["href"].value = href;
}

function setShifted(shifted)
{
	document.selectedForm.elements["shifted"].value = shifted;
}


function submitSelectedForm(query){

	//document.selectedForm.action=top.uiUrl+"/ObjectServlet?" + query;
	doc = (top.frames['FolderView']) ? top.frames['FolderView'] : document;
	//alert(doc.document.forms["selectedForm"]);
	document.forms["selectedForm"].submit();

}



function lockSelected(href){
	if(confirmExit()){
		lockAction("lock",href);
	}
}
function unlockSelected(href){
	if(confirmExit()){
		lockAction("unlock",href);
	}
}
/*old lock action
function lockAction(action,href){
	selectedList = getSelected();
	if (selectedList){
		alert(selectedList);
		if(! continueWithLockAction(action,href)){
			return;
		}
	}


	if (action=="lock"){
		if (hrefIsFolder(href)){
			depthAll=window.confirm("Do you wish to lock all this objects children? \n (cancel = just this object)");
	        	depth = (depthAll)? -1:0;
	        }
	        else{
	        	depth = 0;
	        }
		view("href=" + escape(href) + "&action="+action+"&depth=" + escape(depth)+"&target="+escape(href));
	}
	else{
		 view("href=" + escape(href) + "&action="+action+"&target="+escape(href));
	 }
}
*/

function lockAction(action,href){
	selectedList = getSelected();
	itemsSelected = countSelected();
	depth = 0;
	isSingleObject = false;
	lockSingleFolder = false;
	doLock = false;
	if (itemsSelected <= 0){
		if (hrefIsFolder(href)){
			lockSingleFolder = window.confirm("You have not selected any items to "+action+",\n do you wish to "+action+" the current folder: "+href+ " ? " );
			if(!lockSingleFolder){
				return;
			}
			selectionContainsFolder = true;
			doLock = true;
		}
		else{
			isSingleObject = true;
		}
		itemsSelected = 1;
		selectedList = href;
	}

	if (action=="lock" && isSingleObject == false && selectionContainsFolder==true){
		userDepth=prompt("Enter depth for lock \n -1 : object and all its children or 0 : object only (default) ",0);
		if (userDepth==null){
			return;
		}
		else confirm == true;
		if (userDepth == -1)
			depth = -1;
	}

	if (itemsSelected > 1)
		objs = "these " + itemsSelected + " objects";
	else
		objs = "this object";
         /*
         dont really need this extra confimation
	if(lockSingleFolder == false){
		doLock = window.confirm("Are you sure you want to "+action+" " +objs+"?");
	}

	if(doLock){
	*/
		view("href=" + escapePlus(href) + "&action="+action+"&depth=" + escape(depth)+"&target="+escape(selectedList));
	//}


}

function hrefIsFolder(href){
	if (href.charAt(href.length-1) == "/"){
		return(true);
	}
	else return false;
}
/*
function continueWithLockAction(action,href){
	str = "WARNING: You can only " + action +" 1 object at at time, selected items will be ignored.";
	str = str+"\n The folder: "+escape(href) + " will be locked, continue?";
	ok = window.confirm(str);
	return ok;
}
*/

function exportSelected(href)
{
	itemsSelected = countSelected();
	selectedList = "";

	if (itemsSelected > 0)
	{
		selectedList = getSelected();
	}
	else if (itemsSelected == 0)
	{
		if (!window.confirm("You have not selected a list of objects to export.\n"+
		                    "The current object or folder will be exported, and\n"+
		                    "this will overwrite the content and properties of the\n"+
		                    "current object when you import it. Do you want to\n"+
				    "continue?"))
			return;

		selectedList = "";
	}
	else
	{
		if (!window.confirm("The current object will be exported, and this will\n"+
		                    "overwrite the content and properties of the current\n"+
		                    "object when you import it. Do you want to continue?"))
			return;

		selectedList = "";
	}


	href = top.uiUrl+'/ObjectServlet?href=' + escapePlus(href) + '&target=' + escapePlus(selectedList)+ '&action=export';

	document.location=href;
	//exportWindow = window.open(href,'exportWindow');
	/*if (!ie4){
		exportWindow.focus();
	}*/
}

function cutSelected(folderName)
{
	selectedList = getSelected();
	setAction('cut');
	setHref(escapePlus(folderName));
	if (countSelected() >= 1)
		submitSelectedForm();
		//view("href=" + escape(folderName) + "&action=cut&target=" + escape(selectedList));
	else
		alert("You must select at least one object or folder to cut.");
}

function copySelected(folderName)
{
	selectedList = getSelected();
        setAction('copy');
	setHref(escapePlus(folderName));
	if (countSelected() >= 1)
		submitSelectedForm();
		//view("href=" + escape(folderName) + "&action=copy&target=" + escape(selectedList));
	else
		alert("You must select at least one object or folder to copy.");
}

function pasteSelected(folderName)
{
	view("href=" + escapePlus(folderName) + "&action=paste");
}

function pasteShortcutSelected(folderName)
{
	view("href=" + escapePlus(folderName) + "&action=pasteshortcut");
}

function renameSelected(folderName)
{
	if (countSelected() == 1)
	{
		oldName = getSelected();
		isFolder = false;

		if (oldName.charAt(oldName.length-1) == "/")
		{
			isFolder = true;
			oldName = oldName.substring(0,oldName.length-1);
		}

		lastSlash = oldName.lastIndexOf("/");
		if (lastSlash >= 0)
			oldName = oldName.substring(lastSlash+1,oldName.length);

		newName = prompt("Choose a new name for this item.",oldName);

		if (newName && newName!=oldName && validateRenameObject(newName))
			view("href=" + escapePlus(folderName) + "&action=rename&target=" + escapePlus(oldName) + "&newname=" + escapePlus(newName));
	}
	else
		alert("You must select exactly one object or folder to rename.");

}

function overrideProperty(fileName,tab,property)
{
	if (confirmExit())
	{
		view("action=overrideProperty&href="+escape(fileName)+ "&tab="+escape(tab)+ "&property="+escape(property));
	}
}

function overridePropertyRemove(fileName,tab,property)
{
	if (confirmExit())
	{
		view("action=overridePropertyRemove&href="+escape(fileName)+ "&tab="+escape(tab)+ "&property="+escape(property));
	}
}

function removeProperty(fileName,tab,property)
{
	if (confirmExit())
	{
		view("action=removeproperty&href="+escape(fileName)+ "&tab="+escape(tab)+ "&property="+escape(property));
	}
}

function removeContent(fileName,tab,property)
{
	if (confirmExit())
	{
		view("action=removecontent&href="+escape(fileName));
	}
}


function openShortcutBrowser(href)
{
	var winUrl = top.publishUrl+"/?template=/ui/templates/shortcutframeset&href=" + href;
	var opts = 'toolbar=no,directories=no,location=yes,menubar=yes,' +
	           'scrollbars=yes,statusbar=yes,status=yes,resizable=yes,width=600,height=500';
	//alert("About to open '"+winUrl+"'");
	shortcutWindow=window.open(escape(winUrl),'shortcutWindow',opts);
	if (!ie4)
		shortcutWindow.focus();
}

/*Follwing method added by Mike Woodbridge for template debugger*/
function openDebug(href)
{
	debugWindow = window.open(top.publishUrl+'/ui/utils/debug/?dObject='+escape(href),windowName('debug'+href));
	if (!ie4)
		debugWindow.focus();
}

function resizeCols(ctrl,dx)
{
	getObject(ctrl).cols = getObject(ctrl).cols + dx
	document.cookie = "contentBox="+getObject(ctrl).cols+" "+getObject(ctrl).rows;
}

function resizeRows(ctrl,dy)
{
	getObject(ctrl).rows = getObject(ctrl).rows + dy
	document.cookie = "contentBox="+getObject(ctrl).cols+" "+getObject(ctrl).rows;
}

function writeResizeXButtons()
{
	if (ie4 || ns6)
	{
		document.write('<A HREF="javascript:resizeCols(\'content\',-6)"><IMG SRC="'+top.publishUrl+'/ui/images/xsmaller.gif" WIDTH="12" HEIGHT="9" BORDER=\"0\" HSPACE=\"3\"></A>');
		document.write('<A HREF="javascript:resizeCols(\'content\',6)"><IMG SRC="'+top.publishUrl+'/ui/images/xbigger.gif" WIDTH="12" HEIGHT="9" BORDER=\"0\" HSPACE=\"3\"></A>');
	}
}

function writeResizeYButtons()
{
	if (ie4 || ns6)
	{
		document.write('<A HREF="javascript:resizeRows(\'content\',-3)"><IMG SRC="'+top.publishUrl+'/ui/images/ysmaller.gif" WIDTH="9" HEIGHT="12" BORDER=\"0\" VSPACE=\"3\"></A><BR>');
		document.write('<A HREF="javascript:resizeRows(\'content\',3)"><IMG SRC="'+top.publishUrl+'/ui/images/ybigger.gif" WIDTH="9" HEIGHT="12" BORDER=\"0\" VSPACE=\"3\"></A>');
	}
}

// <DIV id="netscapeTooltip" style="position:absolute;visibility:hidden"></DIV>

function showtip(current,e,text)
{
   if (document.all)
   {
      thetitle=text.split('<br>')
      if (thetitle.length > 1)
      {
        thetitles=""
        for (i=0; i<thetitle.length; i++)
           thetitles += thetitle[i] + "\r\n"
        current.title = thetitles
      }
      else current.title = text
   }

   else if (document.layers)
   {
       document.netscapeTooltip.document.write(
           '<layer bgColor="#FFFFE7" style="border:1px ' +
           'solid black; font:12px Tahoma;color:#000000;">' + text + '</layer>')
       document.netscapeTooltip.document.close()
       document.netscapeTooltip.left=e.pageX+5
       document.netscapeTooltip.top=e.pageY+5
       document.netscapeTooltip.visibility="show"
   }
}

function hidetip()
{
    if (document.layers)
        document.netscapeTooltip.visibility="hidden"
}

function showPropertyTitle(propName,propTitle)
{
	if (ns4)
	{
		document.write('<A href="javascript:void(0)" class="tooltipAnchor" onmouseover="showtip(this,event,\''+propName+'\')" onmouseout="hidetip()">'+propTitle+'</A>');
	}
	else
	{
		document.write('<SPAN TITLE="'+propName+'">'+propTitle+'</SPAN>')
	}
}

function openListPage(fileName,tab,page)
{
	if (confirmExit())
	{
		if (tab && tab != "")
			view("href=" + escapePlus(fileName) + "&tab=" + escape(tab) + "&page=" + escape(page));
		else
			view("href=" + escapePlus(fileName) + "&page=" + escape(page));
	}
}


function hrefedit(uri,href) {

    if(hrefeditstate == 'off') {
      output='';
      hrefeditstate = 'on';
    }
    else {
      if(href == '') href = '/';

      var output = '<form name="myForm" action="'+uri+'">';
      // This demonstrates text and password fields
      output += '\n<input  style=" font: 14pt Tahoma, Helvetica, san-serif;"  type="text" name="href" value="'+href+'" size="30">';
      output += '\n<\/form>';
      hrefeditstate = "off";
    }

    if (document.getElementById) {
        if (window.HTMLElement) {
            spanNode = document.getElementById('myTab');
            while (spanNode.hasChildNodes()) spanNode.removeChild(spanNode.lastChild);
            var range = document.createRange();
            range.selectNodeContents(spanNode);
            spanNode.appendChild(range.createContextualFragment(output));
        }
        else {
            document.all('myTab').innerHTML = output;
        }
    }
    else if (document.all)
        document.all('myTab').innerHTML = output;
    else if (document.layers) {
        document.layers['myTab'].document.open();
        document.layers['myTab'].document.writeln(output);
        document.layers['myTab'].document.close();
    }

    if(hrefeditstate == 'off') {
         document.myForm.href.focus();
    }
}


function doSnapshot(event,uname,href,tab,isFolder) {

  var shifted = "false";

  if(isFolder && isFolder == 'collection') {
    if(isShift(event)) {
        shifted = "true";
        if(!window.confirm("You are about to do a deep snapshot that could potentially take along time. Do you wish to proceed?"))
            return false;
    }
  }

  if(confirmExit()) {
    var comment = prompt("Enter a comment for this snapshot.","(Taken by "+uname+") ");
    if(comment == null)
       return

    if(comment == "")
       comment = "NoComment";

    comment = comment.replace(/\&/g," and ");

    if(comment.length > 120)
    {
        comment = comment.substring(0,120);
    }

    document.location = top.publishUrl+'/ui/utils/takeSnapshot?href='+href+'&tab='+tab+'&shifted='+shifted+'&comment='+escape(comment);
  }
  return false;
}

function doSnapshotList(href,tab) {

  if(confirmExit()) {
    document.location = top.publishUrl+'/ui/utils/listsnapshots?href='+href+'&tab='+tab;
  }
}


