<%--
 Copyright (c) 2000, 2010 IBM Corporation and others.
 All rights reserved. This program and the accompanying materials 
 are made available under the terms of the Eclipse Public License v1.0
 which accompanies this distribution, and is available at
 http://www.eclipse.org/legal/epl-v10.html
 
 Contributors:
     IBM Corporation - initial API and implementation
     Sybase, Inc. - Workaround for enableOK slowdown, Bug 289161
     
--%>
<%@ include file="header.jsp"%>
<%@ page import="java.util.List"%>

<% 
	WorkingSetData data = new WorkingSetData(application, request, response);
	TocData tocData = new TocData(application,request, response);
	WebappPreferences prefs = data.getPrefs();
	boolean isCriteriaEnable = data.isCriteriaScopeEnabled();
	List<String> wsNameList = data.getWorkingSetNameList();
%>


<html lang="<%=ServletResources.getString("locale", request)%>">
<head>
<title><%=ServletResources.getString(data.isEditMode()?"EditWorkingSet":"NewWorkingSet", request)%></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="-1">

<style type="text/css">

/* need this one for Mozilla */
HTML, BODY {
	width:100%;
	height:100%;
	margin:0px;
	padding:0px;
	border:0px;
}
 
BODY {
	font: <%=prefs.getViewFont()%>;
	background:<%=prefs.getToolbarBackground()%>;
	color: WindowText;
}

TABLE {
	font:<%=prefs.getViewFont()%>;
	background:<%=prefs.getToolbarBackground()%>;
}

TD, TR {
	margin:0px;
	padding:0px;
	border:0px;
}

INPUT {
    font:<%=prefs.getViewFont()%>;
}

#workingSet {
	width:100%;
	font-size:1.0em;
}

#booksContainer {
    background:Window;
	color:WindowText;
	border:	2px inset ThreeDHighlight;
	margin:10px;
	margin-top:2px;
	margin-bottom: 0px;
	padding-<%=isRTL?"right":"left"%>:5px;
	overflow:auto;
	height:350px;
<%
if (data.isIE()) {
%>
    width:100%; 
<%
}
%>
}

#criteriaContainer {
    background:Window;
	color:WindowText;
	border:	2px inset ThreeDHighlight;
	margin-<%=isRTL?"left":"right"%>:10px;
	margin-top:2px;
	margin-bottom: 0px;
	padding-<%=isRTL?"right":"left"%>:5px;
	overflow:auto;
	height:350px;
<%
if (data.isIE()) {
%>
    width:100%; 
<%
}
%>
}

#buttonBar {
    height:3em; 
<%
if (data.isMozilla()) {
%>
    padding-bottom:5px;
<%
}
%>
}

.book, .criterion {
	margin:0px;
	border:0px;
	padding:0px;
	white-space: nowrap;
}

.topic, .criterionValue {
	margin-<%=isRTL?"right":"left"%>:30px;
	border:0px;
	padding:0px;
	white-space: nowrap;
}

BUTTON {
	font:<%=prefs.getViewFont()%>;
}

BUTTON {	
	font-size:1.0em; 
}

.expanded {
	display:block;
}

.collapsed {
	display:none;
}

.grayed {
	background-color: <%=prefs.getToolbarBackground()%>;
}

<%
if (data.isMozilla()) {
%>
input[type="checkbox"] {
	border:2px solid WindowText; 
	margin:0px; 
	padding:0px;	
	height:12px;
	width:12px;
}

.grayed {
	background: <%=prefs.getToolbarBackground()%>;
}
<%
}
%>
</style>
<script language="JavaScript" src="../<%=pluginVersion%>/advanced/resize.js"></script>
<script language="JavaScript">

// Preload images
var imagesDirectory = "../<%=pluginVersion%>/advanced/<%=prefs.getImagesDirectory()%>";
var minus = new Image();
minus.src = imagesDirectory + "/minus.gif";
var plus = new Image();
plus.src = imagesDirectory + "/plus.gif";

var oldName = '<%=data.isEditMode()?UrlUtil.JavaScriptEncode(data.getWorkingSetName()):""%>';
var altBookClosed = "<%=UrlUtil.JavaScriptEncode(ServletResources.getString("bookClosed", request))%>";
var altBookOpen = "<%=UrlUtil.JavaScriptEncode(ServletResources.getString("bookOpen", request))%>";
var altCriterionClosed = "<%=UrlUtil.JavaScriptEncode(ServletResources.getString("criterionClosed", request))%>";
var altCriterionOpen = "<%=UrlUtil.JavaScriptEncode(ServletResources.getString("criterionOpen", request))%>";
var noTopicsSelected = "<%=UrlUtil.JavaScriptEncode(ServletResources.getString("NoTopicsSelected", request))%>";
var noNameEntered = "<%=UrlUtil.JavaScriptEncode(ServletResources.getString("NoNameEntered", request))%>";
var wsNameList = [<%for(String name: wsNameList){%>"<%=UrlUtil.JavaScriptEncode(name)%>",<%}%>];
var nameAlreadyExist = "<%=UrlUtil.JavaScriptEncode(ServletResources.getString("nameAlreadyExist", request))%>";
        
var alwaysEnableOK = true;  // See Bug 289161

function onloadHandler() {
<%if(!data.isMozilla() || "1.3".compareTo(data.getMozillaVersion()) <=0){
// buttons are not resized immediately on mozilla before 1.3
%>
	sizeButtons();
<%}%>
    sizeContainer();
	document.getElementById("workingSet").focus();
	enableOK();
<%-- event handlers that call enableOK() are not invoked properly on Japanese --%>
	//setInterval("enableOK()", 250);

}

function sizeButtons() {
	var minWidth=60;

	if(document.getElementById("ok").offsetWidth < minWidth){
		document.getElementById("ok").style.width = minWidth+"px";
	}
	if(document.getElementById("cancel").offsetWidth < minWidth){
		document.getElementById("cancel").style.width = minWidth+"px";
	}
}

function sizeContainer() {
    resizeVertical("booksContainer", "wsTable", "buttonBar", 100, 30);
    <%if(isCriteriaEnable){%>
    resizeVertical("criteriaContainer", "wsTable", "buttonBar", 100, 30);
    <%}%>
}

function doSubmit()
{
	try
	{
		var workingSet = document.getElementById("workingSet").value;
		if (!workingSet || workingSet.length == 0 || workingSet.charAt(0) == " ")  {
         		alert(noNameEntered);
 			return false;
        }

        for(var i in wsNameList){
            if(workingSet == wsNameList[i]){
            	if(<%=data.isEditMode()%> && workingSet == "<%=UrlUtil.JavaScriptEncode(data.getWorkingSetName())%>"){
                    break;
                }
                alert(nameAlreadyExist);
                return false;
            }
        }
        
        if (!hasContentSelections()) {
            alert(noTopicsSelected);
            return false;
        }
	
		var hrefs = getSelectedContentResources();
		if (!hrefs || hrefs == "")
			return false;

		var criteria = getSelectedCriteriaResources();
		var query = "operation="+'<%=UrlUtil.JavaScriptEncode(data.getOperation())%>'+"&workingSet="+encodeURIComponent(workingSet)+ hrefs+criteria+"&oldName="+encodeURIComponent(oldName);
		window.opener.location.replace("workingSetManager.jsp?"+query);
		window.opener.focus();
		window.close();
	} catch(ex) {alert("Error..." + ex.message)}
}

function getSelectedContentResources() {
	var hrefs = "";
	var inputs = document.getElementsByTagName("INPUT");
	for (var i=0; i<inputs.length; i++)
	{
		if (inputs[i].type != "checkbox") continue;
		if (inputs[i].parentNode.id.indexOf("_criterion") > -1) continue;
		if (inputs[i].checked == false) continue;
		if (getGrayed(inputs[i])) continue;
		if (isToc(inputs[i].name)) {
			hrefs += "&hrefs="+encodeURIComponent(inputs[i].name);
		} else if (!isParentTocSelected(inputs[i].name)) {
			hrefs += "&hrefs="+encodeURIComponent(inputs[i].name);
		}
	}
	return hrefs;
}

//Assumption: last character of a toc reference cannot be underscore _
function isToc(name) {
	return name.charAt(name.length-1) != "_";
}

function isParentTocSelected(name) {
	return isParentCheckboxSelected(name);
}

function getSelectedCriteriaResources() {
	var criteria = "";
	var inputs = document.getElementsByTagName("INPUT");
	for (var i=0; i<inputs.length; i++)
	{
		if (inputs[i].type != "checkbox") continue;
		if (inputs[i].parentNode.id.indexOf("_criterion") < 0) continue;
		if (inputs[i].checked == false) continue;
		if (getGrayed(inputs[i])) continue;
		if (isCriterionCategory(inputs[i].name)) {
			criteria += "&criteria=" + encodeURIComponent(inputs[i].name);
		} else if(!isParentTocSelected(inputs[i].name)){
            criteria += "&criteria=" + encodeURIComponent(inputs[i].name);
		}
	}
	return criteria;
}

function isCriterionCategory(name) {
	return name.charAt(name.length-1) != "_";
}

function isParentCategorySelected(name){
	return isParentCheckboxSelected(name);
}

function isParentCheckboxSelected(name) {
	var parentCheckbox = getParentCheckbox(name);
	return (parentCheckbox.checked && !getGrayed(parentCheckbox));
}

function getParentCheckbox(name) {
	var parentId = name.substring(0, name.lastIndexOf("_", name.length-2));
	return document.getElementById(parentId);
}

function isCriterionNode(nodeId){
	if(nodeId && nodeId.indexOf("_criterion") > -1){
		return true; 
	}
	return false;
}

function collapseOrExpand(nodeId) {
	var node = document.getElementById("div"+nodeId);
	var img = document.getElementById("img"+nodeId);
	if (!node || !img) return;
	if (node.className == "expanded") {
		node.className = "collapsed";
		img.src = plus.src;
		if(isCriterionNode(nodeId)){
			img.alt = altCritrionClosed;
			img.title = altCriterionClosed;
		}else{
			img.alt = altBookClosed;
			img.title = altBookClosed;
		}
	} else {
		node.className = "expanded";
		img.src = minus.src;
		if(isCriterionNode(nodeId)){
			img.alt = altCriterionOpen;
			img.title = altCriterionOpen;
		}else{
			img.alt = altBookOpen;
			img.title = altBookOpen;
		}
	}
}

function collapse(nodeId) {
	var node = document.getElementById("div"+nodeId);
	var img = document.getElementById("img"+nodeId);
	if (!node || !img) return;
	node.className = "collapsed";
	img.src = plus.src;
	if(isCriterionNode(nodeId)){
		img.alt = altCritrionClosed;
		img.title = altCriterionClosed;
	}else{
		img.alt = altBookClosed;
		img.title = altBookClosed;
	}
}

function expand(nodeId) {
	var node = document.getElementById("div"+nodeId);
	var img = document.getElementById("img"+nodeId);
	if (!node || !img) return;
	node.className = "expanded";
	img.src = minus.src;
	if(isCriterionNode(nodeId)){
		img.alt = altCriterionOpen;
		img.title = altCriterionOpen;
	}else{
		img.alt = altBookOpen;
		img.title = altBookOpen;
	}
}

function getParent(child) {
	var id = child.name;
	var parentId = id.substring(0, id.lastIndexOf("_", id.length-2));
	return document.getElementById(parentId);
}

function updateParentState(checkbox,parentDiv) {
	enableOK();
	if (checkbox == null)
		return;

	var baseChildState = checkbox.checked;
	var parent = getParent(checkbox);
	if (parent == null)
		return;

	var allSameState = true;
	var children = document.getElementById(parentDiv).getElementsByTagName("INPUT");
	for (var i = children.length - 1; i >= 0; i--) {
		if (children[i].checked != baseChildState ) {
			allSameState = false;
			break;
		}
	}

	setGrayed(parent, !allSameState);
	parent.checked = !allSameState || baseChildState;
}

function setSubtreeChecked(checkbox, parentDiv) {
	enableOK();
	var state = checkbox.checked;
	var children = document.getElementById(parentDiv).getElementsByTagName("INPUT");
	for (var i = children.length - 1; i >= 0; i--) {
		var element = children[i];
		if (state) {
			element.checked = true;
		} else {
			element.checked = false;
		}
	}
	setGrayed(checkbox, false);
}

function setGrayed(node, enableGray) {
	if (enableGray)
		node.className = "grayed";
	else
		node.className = "checkbox";
}

function getGrayed(node) {
	return node.className == "grayed";
}

function isExpanded(nodeId) {
	var node = document.getElementById("div"+nodeId);
	if (node == null) return false;
	return node.className == "expanded";
}

function isCollapsed(nodeId) {
	var node = document.getElementById("div"+nodeId);
	if (node == null) return false;
	return node.className == "collapsed";
}

/**
 * Handler for key down (arrows)
 */
function keyDownHandler(folderId, key, target)
{
	if (key != 37 && key != 39) 
		return true;

 	if (key == 39) { // Right arrow, expand
		if (isCollapsed(folderId))
			expand(folderId);
		target.focus();
  	} else if (key == 37) { // Left arrow,collapse
		if (isExpanded(folderId))
			collapse(folderId);
		var parentCheckbox = getParentCheckbox(target.name);
		if (parentCheckbox != null)
			parentCheckbox.focus();	
		else
			target.focus();
  	} 
  			
  	return false;
}

function hasContentSelections() {
		var hrefs = getSelectedContentResources();
		if (!hrefs || hrefs == "")
			return false;
		else
			return true;
}

function enableOK() {
<%
	if(data.isEditMode() && data.getWorkingSet() != null){
		if(!data.getWorkingSet().isEditable()){
%>
			document.getElementById("ok").disabled = true;
<%
		}
	}
	else {
%>
    if (alwaysEnableOK) {
        document.getElementById("ok").disabled = false;
        return;
    }
	var value = document.getElementById("workingSet").value;
	if (!value || value.length == 0 || value.charAt(0) == " " || !hasContentSelections())
		document.getElementById("ok").disabled = true;
	else
		document.getElementById("ok").disabled = false;
<%
	}
%>
}

function escKeydownHandler(e){
	if(!e) e = window.event;
	var key;
	if (e.keyCode) key = e.keyCode;
	else if (e.which) key = e.which;
	if(key == 27){
		window.close();
	}
}

</script>

</head>

<body role="main" dir="<%=direction%>" onload="onloadHandler()"  onresize = "sizeContainer()" <%if(data.isMozilla()){%>onkeydown="escKeydownHandler(event);"<%}%>>
<form onsubmit="doSubmit();return false;">
	<table role="presentation" id="wsTable" width="100%" cellspacing=0 cellpading=0 border=0 align=center >
		<tr><td style="padding:5px 10px 0px 10px;"><label for="workingSet" accesskey="<%=ServletResources.getAccessKey("WorkingSetName", request)%>"><%=ServletResources.getLabel("WorkingSetName", request)%></label>
		</td></tr>
		<tr><td style="padding:0px 10px;"><input type="text" id="workingSet" name="workingSet" 
		    value='<%=data.isEditMode()?UrlUtil.htmlEncode(data.getWorkingSetName()):data.getDefaultName()%>' maxlength=256 alt='<%=ServletResources.getString("WorkingSetName", request)%>' title='<%=ServletResources.getString("WorkingSetName", request)%>' onkeyup="enableOK();return true;">
        </td></tr>
    </table>
    
    <table role="presentation" width="100%" cellspacing=0 cellpading=0 border=0 align=center style="table-layout:fixed;">
        <tr>
            <td>
               <div id="selectBook" style="padding-top:5px; margin-<%=isRTL?"right":"left"%>:10px;"><%=ServletResources.getString("WorkingSetContent", request)%>:</div>
		    </td>
		    <%if(isCriteriaEnable){ %>
		    <td width="50%">
               <div id="selectCriteria" style="padding-top:5px;"><%=ServletResources.getString("Criteria", request)%>:</div>
		    </td>
		    <% }%>
		</tr>
		<tr>
		    <td>
		       <div id="booksContainer">
		       <% for (int i=0; i<data.getTocCount(); i++){
	                 if(!data.isTocEnabled(i)){
		             // do not show
		                 continue;
	                  }
	                 String label = data.getTocLabel(i);
	                 short state = data.getTocState(i);
	                 String checked = state == WorkingSetData.STATE_CHECKED || state == WorkingSetData.STATE_GRAYED ? "checked" : "";
	                 String className = state == WorkingSetData.STATE_GRAYED ? "grayed" : "checkbox";
               %>
				    <div class="book" id='<%="id"+i%>' >
					   <img role="button" id='<%="img"+i%>' alt="<%=ServletResources.getString("bookClosed", request)%>" title="<%=ServletResources.getString("bookClosed", request)%>" src="../<%=pluginVersion%>/advanced/<%=prefs.getImagesDirectory()%>/plus.gif" onclick="collapseOrExpand('<%=i%>')">
					   <input 	class='<%=className%>' 
							    type="checkbox" 
							    id='<%=UrlUtil.htmlEncode(data.getTocHref(i))%>' 
							    name='<%=UrlUtil.htmlEncode(data.getTocHref(i))%>' 
							    alt="<%=UrlUtil.htmlEncode(label)%>" <%=checked%> 
						  	    onkeydown="keyDownHandler(<%=i%>, event.keyCode, this)"
							    onclick="setSubtreeChecked(this, '<%="div"+i%>')">
							    <label for="<%=UrlUtil.htmlEncode(data.getTocHref(i))%>"><%=UrlUtil.htmlEncode(label)%></label>
					   <div id='<%="div"+i%>' class="collapsed">
                         <%
	                         for (int topic=0; topic<data.getTopicCount(i); topic++)
	                         {
	                            if(!data.isTopicEnabled(i, topic)){
		                           // do not show
		                           continue;
	                            }
		                        String topicLabel = data.getTopicLabel(i, topic);
		                        String topicChecked = (state == WorkingSetData.STATE_CHECKED) || 
							                          (state == WorkingSetData.STATE_GRAYED && data.getTopicState(i,topic) == WorkingSetData.STATE_CHECKED) 
							                          ? "checked" : "";
                         %>
						    <div class="topic" id='<%="id"+i+"_"+topic%>'>
							    <input 	class="checkbox" 
									    type="checkbox" 
									    id='<%=UrlUtil.htmlEncode(data.getTocHref(i))+"_"+topic+"_"%>' 
									    name='<%=UrlUtil.htmlEncode(data.getTocHref(i))+"_"+topic+"_"%>' 
									    alt="<%=UrlUtil.htmlEncode(topicLabel)%>" <%=topicChecked%> 
									    onkeydown="keyDownHandler(<%=i%>, event.keyCode, this)"
									    onclick="updateParentState(this, '<%="div"+i%>')">
									    <label for="<%=UrlUtil.htmlEncode(data.getTocHref(i))+"_"+topic+"_"%>"><%=UrlUtil.htmlEncode(topicLabel)%></label>
						    </div>
                         <%
	                         }
                         %>
					   </div>
				    </div>
               <%
                   }		
               %>
                </div>
		    </td>
		    <%if(isCriteriaEnable){ %>
		    <td width="50%">
               <div id="criteriaContainer">
                   <% 
                     String[] category = data.getCriterionIds();
                     for (int i=0; i < category.length; i++){
                    	 String criterionId = category[i];
	                     if(null == criterionId || 0 == criterionId.trim().length()){
		                  // do not show
		                     continue;
	                     }
	                     
	                     short categoryState = data.getCriterionCategoryState(i);	            
	                     String categoryChecked = categoryState == WorkingSetData.STATE_CHECKED || categoryState == WorkingSetData.STATE_GRAYED ? "checked" : "";
		                 String inputClassName = categoryState == WorkingSetData.STATE_GRAYED ? "grayed" : "checkbox";
		                 String criterionDisplayName = data.getCriterionDisplayName(criterionId);
                   %>
				    <div class="criterion" id='<%="id_criterion"+i%>' >
					   <img role="button" id='<%="img_criterion"+i%>' alt="<%=ServletResources.getString("criterionClosed", request)%>" title="<%=ServletResources.getString("criterionClosed", request)%>" src="../<%=pluginVersion%>/advanced/<%=prefs.getImagesDirectory()%>/plus.gif" onclick="collapseOrExpand('_criterion'+'<%=i%>')">
					   <input 	class='<%=inputClassName%>' 
							    type="checkbox" 
							    id='<%=UrlUtil.htmlEncode(criterionId)%>' 
							    name='<%=UrlUtil.htmlEncode(criterionId)%>' 
							    alt="<%=UrlUtil.htmlEncode(criterionDisplayName)%>" <%=categoryChecked%> 
						  	    onkeydown="keyDownHandler('_criterion'+<%=i%>, event.keyCode, this)"
							    onclick="setSubtreeChecked(this, '<%="div_criterion"+i%>')">
							    <label for="<%=UrlUtil.htmlEncode(criterionId)%>"><%=UrlUtil.htmlEncode(criterionDisplayName)%></label>
					   <div id='<%="div_criterion"+i%>' class="collapsed">
                         <%
                             String[] criterionValueIds = data.getCriterionValueIds(criterionId);
	                         for (int j=0; j<criterionValueIds.length; j++)
	                         {
		                        String criterionValue = criterionValueIds[j];
		                        String valueChecked = (categoryState == WorkingSetData.STATE_CHECKED) || 
		                          (categoryState == WorkingSetData.STATE_GRAYED && data.getCriterionValueState(i,j) == WorkingSetData.STATE_CHECKED) 
		                          ? "checked" : "";
		                        String criterionValueDisplayName ="";
		                        if(criterionValue.equalsIgnoreCase("Uncategorized")){
		                        	criterionValueDisplayName = ServletResources.getString("Uncategorized", request);
		                        } else {
		                        	criterionValueDisplayName = data.getCriterionValueDisplayName(criterionId, criterionValue);
		                        }
                         %>
						    <div class="criterionValue" id='<%="id_criterion"+i+"_"+j%>'>
							    <input 	class="checkbox" 
									    type="checkbox" 
									    id='<%=UrlUtil.htmlEncode(criterionId)+"_"+j+"_"%>' 
									    name='<%=UrlUtil.htmlEncode(criterionId)+"_"+j+"_"%>' 
									    alt="<%=UrlUtil.htmlEncode(criterionValueDisplayName)%>" <%=valueChecked%> 
									    onkeydown="keyDownHandler('_criterion'+<%=i%>, event.keyCode, this)"
									    onclick="updateParentState(this, '<%="div_criterion"+i%>')">
									    <label for="<%=UrlUtil.htmlEncode(criterionId)+"_"+j+"_"%>"><%=UrlUtil.htmlEncode(criterionValueDisplayName)%></label>
						    </div>
                         <%
	                         }
                         %>
					   </div>
				    </div>
               <%
                   }		
               %>
               </div>
		    </td>
		    <% }%>
		</tr>

    </table>

<div id="buttonBar" >
	<table valign="bottom" align="<%=isRTL?"left":"right"%>">
		<tr id="buttonsTable" valign="bottom"><td valign="bottom" align="<%=isRTL?"left":"right"%>">
  			<table role="presentation" cellspacing=10 cellpading=0 border=0 style="background:transparent;">
				<tr>
					<td>
						<button type="submit" id="ok"><%=ServletResources.getString("OK", request)%></button>
					</td>
					<td>
					  	<button type="reset" onclick="window.close()" id="cancel"><%=ServletResources.getString("Cancel", request)%></button>
					</td>
				</tr>
  			</table>
		</td></tr>
	</table>
</div>
</form>
</body>
</html>

