Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations gkittelson on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

'dynamic-tab-pane-control' -- tabs disappear when mouse over 1

Status
Not open for further replies.

louyesh

Programmer
Mar 30, 2006
4
In using the 'dynamic-tab-pane-control' feature of the css stylesheet, the tabs many times disappear when I mouse over them. I have to mouse over again to make them appear.

This occurs frequently when I am accessing a remote website, but if I access localhost, it doesn't disappear as frequently.
Is there anyway I can modify or add any codes to prevent the tabs from disappearing ???

Thanks in advance for helpful feedbacks!


tab.css stylesheet below:

=======================================================
.dynamic-tab-pane-control.tab-pane {
position: relative;
width: 100%;
}

.dynamic-tab-pane-control .tab-row .tab {
font-family: Helvetica, Arial,sans-serif;
font-size: 8pt;
font-weight: normal;
text-align: center;
cursor: Default;
display: inline;
margin: 1px -5px 1px 5px;
float: left;
padding: 3px 0px 0px 0px;
width: 75px;
height: 23px;
background-image: url("/jsp/applications/images/navigation/top_tab_on.gif");
background-repeat: no-repeat;
cursor: hand;
cursor: pointer;
z-index: 1;
position: relative;
top: 2px;
}


.dynamic-tab-pane-control .tab-row .tab.selected {
z-index: 3;
padding: 3px 0px 0px 0px;
margin: 1px -6px -2px 0px;
top: 2px;
width: 75px;
height: 23px;
background-image: url("/jsp/applications/images/navigation/top_tab_off.gif");
background-repeat: no-repeat;
}


.dynamic-tab-pane-control .tab-row .tab a {
font-family: Helvetica, Arial, sans-serif;
font-size: 8pt;
color: white;
text-decoration: none;
cursor: hand;
cursor: pointer;
}


.dynamic-tab-pane-control .tab-row .tab.selected a {
color: black;
}

.dynamic-tab-pane-control .tab-page {
clear: both;
border: 2px solid #dddddd;
background: White;
z-index: 2;
position: relative;
top: 0px;
color: Black;
font-family: Helvetica, Arial,sans-serif;
font-size: 8pt;
padding: 10px;
height: 365px;
overflow: auto;
}

.dynamic-tab-pane-control .tab-row {
z-index: 1;
white-space: nowrap;
height: 0px;
width: 100%;
}
=======================================================



 
I don't see any [tt]:hover[/tt] rules in there that would make it do anything when you mouse over the tabs. Are you sure there's no Javascript involved? It would help to see your HTML as well as the CSS.

There certainly seems to be some weirdness going on, though it won't cause the problem you describe. For example, what's this about?
Code:
.dynamic-tab-pane-control .tab-row .tab {
...
     cursor:          Default;
...
     cursor:          hand;
     cursor:          pointer;
...
}

If all else fails, chuck it in and try one of these techniques instead:
-- Chris Hunt
Webmaster & Tragedian
Extra Connections Ltd
 
The whole jsp is very difficult to work with. It is as below, if someone can help:

<%@ page errorPage="/applications/error.jsp" import="
java.io.*,
java.text.*,
java.util.*,
com.blue292.application.*,
com.blue292.user.*,
com.blue292.ui.*,
com.blue292.util.*,
com.blue292.calendar.*,
com.blue292.common.*,
com.blue292.form.*
"%>

<%!

public int getDuration(Session _sess, String _startDate, String _startTime, String _endDate, String _endTime) throws Exception
{
SimpleDateFormat f1 = new SimpleDateFormat("MM/dd/yyyy HH:mm");
Date sd = f1.parse(_startDate + " " + _startTime);
Date ed = f1.parse(_endDate + " " + _endTime);
return (int) ((ed.getTime()-sd.getTime())/(60*1000));
}

public String getToday(Session sess) throws Exception{
DateFormat fmt = new SimpleDateFormat("M/dd/yyyy");
String tz = sess.getUser().getPreference("calendar_timeZoneId","EST");
Calendar now = Calendar.getInstance(TimeZone.getTimeZone(tz));
return fmt.format(now.getTime());

}

public void mapUsers(Session sess, ITask _task, String[] _userList, String[] _addRemoveList) throws Exception
{
for (int i=0; i<_userList.length; i++)
{
if (((String) _userList).length()>0)
{
if (_addRemoveList.equals("1"))
{
int userId = Integer.parseInt(_userList);
_task.addUser(userId);
if (_task.getTaskCompletion() == 1)
{
int task_id = _task.getId();
int percent_complete = 0;
_task.addUsersPercentComplete(userId, percent_complete);
}
}
else {
int userid = Integer.parseInt(_userList);
if (userid > 0)
_task.removeUser(userid);

if (_task.getTaskCompletion() == 1)
{
int task_id = _task.getId();
_task.removeUserPercentComplete(userid);
}
}
}
}
}

public void mapRoles(Session sess, ITask _task, String[] _roleList, String[] _addRemoveList) throws Exception
{
for (int i=0; i<_roleList.length; i++)
{
if (((String) _roleList).length()>0)
{
if (_addRemoveList.equals("1"))
{
int roleId = Integer.parseInt(_roleList);
_task.addUserRole(roleId);
}
else {
_task.removeUserRole(Integer.parseInt(_roleList));
}
}
}
}


public void mapForms(ITask _task, String[] _formList, String[] _addRemoveList) throws Exception
{
for (int i=0; i<_formList.length; i++)
{
if (((String) _formList).length()>0)
{
if (_addRemoveList.equals("1"))
_task.mapPublishedForm(Integer.parseInt(_formList));
else
_task.unMapPublishedForm(Integer.parseInt(_formList));
}
}
}

public void saveEmailAddresses(ITask _task, String[] _emailAddressList, int id) throws Exception
{
//If task was edited then remove all existing external emails. This way we don't have
//to determine who was added and who was deleted and emails get sent to all the current
//email addresses to let them know something changed with the task.
if(id >= 0)
{
_task.deleteAllExternalEmails();
}

for (int i=0; i<_emailAddressList.length; i++)
{
_task.addExternalEmail(_emailAddressList);
}
}


public String createTimeString(Session _sess, String _date, String _time) throws Exception
{
SimpleDateFormat f1 = new SimpleDateFormat("MM/dd/yyyy HH:mm");
Date d = f1.parse(_date + " " + _time);
String tz = _sess.getUser().getPreference("calendar_timeZoneId","EST");
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone(tz));
cal.setTime(d);
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'");
return fmt.format(cal.getTime());
}


public void writeFiles(Writer out, ITask t, IUser u) throws Exception
{
if (t != null) {
List l = t.getFiles();
if(l.size() > 0)
{
Iterator it = l.iterator();
while(it.hasNext())
{
IFile file = (IFile)it.next();
//out.write("<tr><td>"+file.getName()+"</td></tr>");

out.write("<tr>");
out.write("<td>" + file.getName() + "</td>");
out.write("<td>" + file.getDescription() + "</td>");
out.write("<td>" + (file.getBytes()/1000) + "KB</td>");
out.write("<td valign=\"top\"><a style=\"cursor: hand;\" onclick=\"javascript:downloadFile(" + file.getId() + ");\"><img src=\"/jsp/applications/images/icons/view.gif\" width=\"16\" height=\"16\" border=\"0\" alt=\"View File\"></a>");
if (t.canUserEdit(u) )
out.write("<a style=\"cursor: hand;\" onclick=\"javascript:deleteFile(" + file.getId() + ");\"><img src=\"/jsp/applications/images/icons/delete.gif\" width=\"16\" height=\"16\" border=\"0\" alt=\"Delete File\"></a></td>");
out.write("</tr>");
}
}
else
{
out.write("<tr><td colspan=\"1\">There are no files associated with this task.</td></tr>");
}
}
}

public void writeAssignees(Writer out, ITask t, IWorkgroup workgroup, boolean hideAssigned) throws Exception
{
List users = workgroup.getUsers(2 /*MEMBERS*/);

if (hideAssigned) {
if (t != null) { /* Remove any users who are already assigned */
users.removeAll(t.getUsers());
}
}
else {
if (t != null) { /* Keep the users who are assigned */
users = t.getUsers();
}
else {
users = new ArrayList();
}
}

if(users.size() > 0)
{
Iterator it = users.iterator();
while(it.hasNext())
{
IUser u = (IUser)it.next();
out.write("<option value=\"" + u.getId() + "\">" + u.getLastName() + ", " + u.getFirstName());
if (u.isActive()) out.write(" [*]");
out.write("</option>");
}
}

}

public void writeRoles(Writer out, ITask t, ManagementApplication app, IWorkgroup workgroup, boolean hideAssigned) throws Exception
{
//List roles = app.getWorkgroupUserRoles();
int workgroupId = workgroup.getId();
List roles = app.getWorkgroupMemberRoles(workgroupId);

if (hideAssigned) {
if (t != null) { /* Remove any roles that are already assigned */
roles.removeAll(t.getUserRoles());
}
}
else {
if (t != null) { /* Only show roles that are assigned */
roles = t.getUserRoles();
}
else {
roles = new ArrayList();
}
}

if(roles.size() > 0)
{
Iterator it = roles.iterator();
while(it.hasNext())
{
IUserRole role = (IUserRole)it.next();
out.write("<option value=\"" + role.getId() + "\">" + role.getName() + "</option>");
}
}
}

public void writeEmails(Writer out, ITask t) throws Exception
{
if (t == null) return;
List emails = t.getExternalEmails();
Iterator emailIterator = emails.iterator();
while (emailIterator.hasNext())
{
String address = (String)emailIterator.next();
if (address.equals("-1")) continue; // legacy of old wizard; remove later
out.write("<option value=\"" + address + "\">" + address + "</option>");
}
}

public void writeCompletion(Session sess, Writer out, ITask t) throws Exception
{
String tz = sess.getUser().getPreference("calendar_timeZoneId","EST");
Calendar completion = t.getCompletionDate();
if(completion != null)
{
DateFormat fmt = new SimpleDateFormat("MM/dd/yyyy HH:mm");
fmt.setTimeZone(TimeZone.getTimeZone(tz));
out.write(fmt.format(completion.getTime()));
}
else
{
out.write("N/A");
}
}


public void writeDate(Session sess, Writer out, ITask t, String type) throws Exception
{
StringBuffer output = new StringBuffer();
DateFormat fmt = new SimpleDateFormat("M/dd/yyyy");
String tz = sess.getUser().getPreference("calendar_timeZoneId","EST");


if (t != null) {
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone(tz));
cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DATE), 0, 0, 0);

fmt.setTimeZone(cal.getTimeZone());
Calendar start = DateParser.parse(t.getStartTime(), TimeZone.getTimeZone(t.getTimeZone()));

if (type.equals("end")) {
start.add(Calendar.MINUTE, t.getDuration());
}

if(start != null)
{
output.append("<input type=\"text\" name=\"" + type + "_date\" size=\"7\"");
output.append(" value = \"" + fmt.format(start.getTime()) + "\"> ");
output.append("<a id=\"dueDate__POSITION__" + type + "\" style=\"cursor: hand;\" onclick=\"javascript:cal.showCalendar(\'dueDate__POSITION__" + type + "\', \'document.frm." + type + "_date\');\">");
output.append("<img src=\"/jsp/applications/images/buttons/calendar.gif\" border=\"0\">");
output.append("</a>");
}
}
else {
Calendar now = Calendar.getInstance(TimeZone.getTimeZone(tz));
fmt.setTimeZone(TimeZone.getTimeZone(tz)); //some JDK set the default timezone is not corrent, reset
output.append("<input type=\"text\" name=\"" + type + "_date\" size=\"7\"");
output.append(" value = \""+ fmt.format(now.getTime()) +"\"> ");
output.append("<a id=\"dueDate__POSITION__" + type + "\" style=\"cursor: hand;\" onclick=\"javascript:cal.showCalendar(\'dueDate__POSITION__" + type + "\', \'document.frm." + type + "_date\');\">");
output.append("<img src=\"/jsp/applications/images/buttons/calendar.gif\" border=\"0\">");
output.append("</a>");
}


out.write(output.toString());

}

public String writeDate2(Session sess, ITask t, String type) throws Exception
{
StringBuffer output = new StringBuffer();
DateFormat fmt = new SimpleDateFormat("M/dd/yyyy");
String tz = sess.getUser().getPreference("calendar_timeZoneId","EST");

if (t != null) {
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone(tz));
cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DATE), 0, 0, 0);

fmt.setTimeZone(cal.getTimeZone());
Calendar start = DateParser.parse(t.getStartTime(), TimeZone.getTimeZone(t.getTimeZone()));

if (type.equals("end")) {
start.add(Calendar.MINUTE, t.getDuration());
}

if(start != null)
{
output.append("<input type=\"text\" name=\"" + type + "_date\" size=\"7\"");
output.append(" value = \"" + fmt.format(start.getTime()) + "\"> ");
output.append("<a id=\"dueDate__POSITION__" + type + "\" style=\"cursor: hand;\" onclick=\"javascript:cal.showCalendar(\'dueDate__POSITION__" + type + "\', \'document.frm." + type + "_date\');\">");
output.append("<img src=\"/jsp/applications/images/buttons/calendar.gif\" border=\"0\">");
output.append("</a>");
}
}
else {
Calendar now = Calendar.getInstance(TimeZone.getTimeZone(tz));
fmt.setTimeZone(TimeZone.getTimeZone(tz)); //some JDK set the default timezone is not corrent, reset
output.append("<input type=\"text\" name=\"" + type + "_date\" size=\"7\"");
output.append(" value = \""+ fmt.format(now.getTime()) +"\"> ");
output.append("<a id=\"dueDate__POSITION__" + type + "\" style=\"cursor: hand;\" onclick=\"javascript:cal.showCalendar(\'dueDate__POSITION__" + type + "\', \'document.frm." + type + "_date\');\">");
output.append("<img src=\"/jsp/applications/images/buttons/calendar.gif\" border=\"0\">");
output.append("</a>");
}


return output.toString();

}

public String writeTime2(Session sess, ITask t, String type) throws Exception
{
StringBuffer output = new StringBuffer();
String tz = sess.getUser().getPreference("calendar_timeZoneId","EST");

DateFormat hourFmt = new SimpleDateFormat("HH");
hourFmt.setTimeZone(TimeZone.getTimeZone(tz));
DateFormat minutesFmt = new SimpleDateFormat("mm");

if (t != null) {
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone(tz));
cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DATE), 0, 0, 0);

//Convert time of task to GMT time so that it can be converted to user preference;
Calendar start = DateParser.parse(t.getStartTime(), TimeZone.getTimeZone(t.getTimeZone()));



if (type.equals("end")) {
start.add(Calendar.MINUTE, t.getDuration());
}

if(start != null)
{
//Convert GMT hour and minutes of task to user's preferred timezone

int startHour = Integer.parseInt(hourFmt.format(start.getTime()));
int startMinutes = Integer.parseInt(minutesFmt.format(start.getTime()));

output.append("<select name=\\\"task_" + type + "_time_hr\\\">\"");
for (int i=0; i<=23; i++) {
if(i<10){
output.append("+\"<option " + ((startHour == i) ? "SELECTED" : "") + " value=\\\"" +i + "\\\">" + "0"+ i + "</option>\"\n");
} else {
output.append("+\"<option " + ((startHour == i) ? "SELECTED" : "") + " value=\\\"" + i + "\\\">"+ i + "</option>\"\n");
}
}
output.append("+\"</select>\"");
output.append("+\" :\"");

output.append("+\"<select name=\\\"task_" + type + "_time_min\\\">\"");
for (int i=0; i<60; i++) {
if(i<10){
output.append("+\"<option " + ((startMinutes == i) ? "SELECTED" : "") + " value=\\\"" + i + "\\\">" + "0"+ i + "</option>\"\n");
} else {
output.append("+\"<option " + ((startMinutes == i) ? "SELECTED" : "") + " value=\\\"" + i + "\\\">"+ i + "</option>\"\n");
}
}
output.append("+\"</select>");
}
}
else {
Calendar now = Calendar.getInstance(TimeZone.getTimeZone(tz));
hourFmt.setTimeZone(TimeZone.getTimeZone(tz)); //some JDK set the default timezone is not corrent, reset

int defHour = Integer.parseInt(hourFmt.format(now.getTime()));
int defMinutes = Integer.parseInt(minutesFmt.format(now.getTime()));

output.append("<select name=\\\"task_" + type + "_time_hr\\\">\"");
for (int i=0; i<=23; i++) {
output.append("+\"<option " + ((defHour == i) ? "SELECTED" : "") + " value=\\\"" + i + "\\\">"+ (i>9?(i+""):("0"+i)) + "</option>\"\n");
}
output.append("+\"</select>\"");
output.append("+\" :\"");

output.append("+\"<select name=\\\"task_" + type + "_time_min\\\">\"");
for (int i=0; i<60; i++) {
output.append("+\"<option " + ((defMinutes == i) ? "SELECTED" : "") + " value=\\\"" + i + "\\\">"+ (i>9?(i+""):("0"+i)) + "</option>\"\n");
}
output.append("+\"</select>");
}

return output.toString();
}

public void writeTime(Session sess, Writer out, ITask t, String type) throws Exception
{
StringBuffer output = new StringBuffer();
String usertz = sess.getUser().getPreference("calendar_timeZoneId","EST");

DateFormat hourFmt = new SimpleDateFormat("HH");
hourFmt.setTimeZone(TimeZone.getTimeZone(usertz));
DateFormat minutesFmt = new SimpleDateFormat("mm");

if (t != null) {
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone(usertz));
cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DATE), 0, 0, 0);

//Convert time of task to GMT time so that it can be converted to user preference;
Calendar start = DateParser.parse(t.getStartTime(), TimeZone.getTimeZone(t.getTimeZone()));



if (type.equals("end")) {
start.add(Calendar.MINUTE, t.getDuration());
}

if(start != null)
{
//Convert GMT hour and minutes of task to user's preferred timezone

int startHour = Integer.parseInt(hourFmt.format(start.getTime()));
int startMinutes = Integer.parseInt(minutesFmt.format(start.getTime()));

output.append("<select name=\"task_" + type + "_time_hr\">");
for (int i=0; i<=23; i++) {
if(i<10){
output.append("<option " + ((startHour == i) ? "SELECTED" : "") + " value=\"" + i + "\">"+ "0"+i + "</option>\n");
} else {
output.append("<option " + ((startHour == i) ? "SELECTED" : "") + " value=\"" + i + "\">"+ i + "</option>\n");

}
}
output.append("</select>");
output.append(" :");

output.append("<select name=\"task_" + type + "_time_min\">");
for (int i=0; i<60; i++) {
if(i<10) {
output.append("<option " + ((startMinutes == i) ? "SELECTED" : "") + " value=\"" +i + "\">"+ "0"+ i + "</option>\n");
} else {
output.append("<option " + ((startMinutes == i) ? "SELECTED" : "") + " value=\"" + i + "\">"+ i + "</option>\n");
}
}
output.append("</select>");
}
}
else {
Calendar now = Calendar.getInstance(TimeZone.getTimeZone(usertz));
hourFmt.setTimeZone(TimeZone.getTimeZone(usertz)); //some JDK set the default timezone is not corrent, reset

int defHour = Integer.parseInt(hourFmt.format(now.getTime()));
int defMinutes = Integer.parseInt(minutesFmt.format(now.getTime()));

output.append("<select name=\"task_" + type + "_time_hr\">");
for (int i=0; i<=23; i++) {
output.append("<option " + ((defHour == i) ? "SELECTED" : "") + " value=\"" + i + "\">"+ (i>9?(i+""):("0"+i)) + "</option>\n");
}
output.append("</select>");
output.append(" :");

output.append("<select name=\"task_" + type + "_time_min\">");
for (int i=0; i<60; i++) {
output.append("<option " + ((defMinutes == i) ? "SELECTED" : "") + " value=\"" + i + "\">"+ (i>9?(i+""):("0"+i)) + "</option>\n");
}
output.append("</select>");
}

out.write(output.toString());
}

public void writePercentComplete(Session sess, Writer out, ITask t) throws Exception
{
int percent = 0;
if (t != null) {
if (t.getTaskCompletion() == 1) {
percent = t.getUsersPercentComplete(t.getId(), sess.getUser().getId());
}
else {
percent = t.getPercentComplete();
}
}

out.write("<select name=\"taskpercentcomplete\">");
for (int i=0; i<=100; i+=10) {
out.write("<option " + ((i==percent) ? "SELECTED" : "") + " value=\"" + i + "\">" + i + "% </option>\n");
}
out.write("</select>");

if(t != null) {
if (t.getTaskCompletion() == 1) {
out.write("&nbsp;&nbsp;<a onclick=\"javascript:displayTaskUsers(" + t.getId() + ");\"><img src=\"/jsp/applications/images/icons/people.gif\" border=\"0\" alt=\"Assignee List\"></a>");
}
if (t.getCompletionDate() != null) {
out.write("&nbsp;&nbsp;<b>Completed: &nbsp;</b>");
writeCompletion(sess, out, t);
}

}
}


public void showForms(Writer out, ITask t) throws Exception
{
List formList = t.getPublishedForms();

// Move the list into an iterator and display the rows
if (formList!=null && formList.size()>0)
{
java.text.DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Iterator formIterator = formList.iterator();
while (formIterator.hasNext())
{

IPublishedForm publishedForm = (IPublishedForm) formIterator.next();
IForm form = publishedForm.getForm();

Iterator historyIterator = t.getFormHistory(form).iterator();
int workgroupId = -1;
if(t.getWorkgroup() != null)
{
workgroupId = t.getWorkgroup().getId();
}

out.write("<tr>");
out.write("<td><a style=\"cursor: hand;\" onclick=\"javascript:popViewForm(" + form.getId() + "," + workgroupId + ");\">" + form.getName() + "</a></td>");
out.write("<td>");

while(historyIterator.hasNext())
{
IFormInstance fi = (IFormInstance) historyIterator.next();

workgroupId = -1;
if(t.getWorkgroup() != null)
{
workgroupId = t.getWorkgroup().getId();
}

out.write("<a style=\"cursor: hand;\" onclick=\"javascript:popViewFormHistory(" + form.getId() + "," + workgroupId + "," + fi.getId() + ");\">" + df.format(fi.getLastModifiedDate()) + " - " + fi.getLastModifiedUser().getLastName() + ", " + fi.getLastModifiedUser().getFirstName() + "</a><Br>");
}

out.write("</td>");
out.write("</tr>");
}
}
else
{
out.write("<tr><td colspan=\"2\">There are no published forms associated with this task.</td></tr>");
}

}

public void writeForms(Writer out, ITask t, IWorkgroup workgroup, boolean hideAssigned) throws Exception
{
SuperArrayList formList = workgroup.getPublishedForms();

if (hideAssigned) {
if (t != null) { /* Remove any forms that are already assigned */
formList.removeAll(t.getPublishedForms());
}
}
else {
if (t != null) { /* Keep the forms that are assigned */
formList = t.getPublishedForms();
}
else {
formList = new SuperArrayList();
}
}

if(formList.size() > 0)
{
Iterator it = formList.iterator();
while(it.hasNext())
{
IPublishedForm f = (IPublishedForm)it.next();
out.write("<option value=\"" + f.getForm().getId() + "\">" + f.getTitle());
out.write("</option>");
}
}

}


public void writeCustomFields(Session sess, JspWriter out, ITask task, Application app) throws Exception
{
List CustomFields = null;
if (task == null)
{
CustomFields = app.getCustomFields(ITask.OBJECT_TYPE_TASK);
Iterator it = CustomFields.iterator();
while(it.hasNext())
{
ICustomField customField = (ICustomField) it.next();
printCustomField(sess, out, customField, null);
}
}
else
{
CustomFields = task.getCustomFields();
Iterator it = CustomFields.iterator();
while(it.hasNext())
{
IFieldData customField = (IFieldData) it.next();
printCustomField(sess, out, customField.getCustomField(), customField.getData());
}
}
}

public void printCustomField(Session sess, JspWriter out, ICustomField field, String data) throws Exception
{
out.write("<tr>\n");
out.write("\t <th width=\"20%\"");
if (field.isRequired())
out.write(" class=\"required\"");
out.write(">" +field.getName() + "</th> \n");
out.write("\t <td style=\"border: solid #999999 1px;\">");

out.write("\n<script language=\"javascript\">");
out.write("customFieldData[customFieldData.length] = new CCustomField("+ field.getId() + "," + field.getType() + ",'" + StringUtils.replaceJSChars(field.getName()) + "','" + StringUtils.replaceJSChars(field.getDescription()) + "','" + "" + "','" + field.isRequired() + "');");
out.write("</script>\n");

switch( field.getType()) {

case ICustomField.TYPE_EMAIL:
case ICustomField.TYPE_TEXTBOX:
case ICustomField.TYPE_NUMERIC:
case ICustomField.TYPE_URL:
{
out.write("<input type=\"text\" name=\"customFieldData_" + field.getId() + "\" value=\"");
out.write((data == null ? "" : data) + "\"> </td> \n\n");
break;
}
case ICustomField.TYPE_CHECKBOX:
{
out.write("<input type=\"checkbox\" name=\"customFieldData_" + field.getId() + "\" value=\"true\" ");
out.write(data != null ? (data.equals("true") ? "CHECKED" : "") : "");
out.write("> </td> \n\n");
break;
}
case ICustomField.TYPE_TEXTAREA:
{
out.write("<textarea rows=\"4\" cols=\"45\" name=\"customFieldData_" + field.getId() + "\">");
out.write(data == null ? "" : data);
out.write("</textarea>");
break;
}
case ICustomField.TYPE_DATE:
{

String tzOut = sess.getUser().getPreference("calendar_timeZoneId","EST");

DateFormat dateFmt = new SimpleDateFormat("MM/dd/yyyy");
dateFmt.setTimeZone(TimeZone.getTimeZone(tzOut));

Date d = new Date();
String dateStr = dateFmt.format(d);

out.write("<input size=\"7\" type=\"text\" name=\"customFieldData_" + field.getId() + "\" value=\"");
out.write((data == null ?dateStr:data) + "\">");
out.write("<a id=\"customFieldData_" + field.getId() + "__POSITION__\"");
out.write(" style=\"cursor: hand;\" onclick=\"javascript:cal.showCalendar(\'customFieldData_" + field.getId()+ "__POSITION__\', \'document.frm.customFieldData_" + field.getId() + "\');\"> \n\n");
out.write("<img src=\"/jsp/applications/images/buttons/calendar.gif\" border=\"0\"></a>");
out.write(" </td> \n\n");
break;
}

case ICustomField.TYPE_TIME:
{
String tzOut = sess.getUser().getPreference("calendar_timeZoneId","EST");

DateFormat dateFmt = new SimpleDateFormat("HH:mm");
dateFmt.setTimeZone(TimeZone.getTimeZone(tzOut));

Date d = new Date();
String timeStr = dateFmt.format(d);

out.write("<input size=\"7\" type=\"text\" name=\"customFieldData_" + field.getId() + "\" value=\"");
out.write((data == null ? timeStr : data) + "\">");
out.write(" <span> (enter time in 24 hour format, e.g. 23:45)</span></td> \n\n");
break;
}
case ICustomField.TYPE_SELECTBOX:
{
out.write("<select name=\"customFieldData_" + field.getId() + "\"> \n" );
out.write("<option value=\"-1\"></option>");

Iterator i = field.getSelections().iterator();
while (i.hasNext())
{
ICustomFieldSelection sel = (ICustomFieldSelection) i.next();
out.write("<option value=\"" + sel.getName() + "\" ");
out.write( (sel.getName().equals(data) ? "SELECTED" : "") + " >" + sel.getName() + "</option>\n ");
}
out.write("</select> </td> \n\n");
break;
}
}
out.write("</tr>\n");

}
%>

<%
// Get the user's session
Session sess = Session.getSession(request);
ManagementApplication app = new ManagementApplication(sess);
IUser u = (IUser)sess.getUser();
PortalUI pui = new PortalUI(out, sess);

// Get the id of the task
int id = -1;
ITask task = null;

if (request.getParameter("id")!= null)
id = Integer.parseInt(request.getParameter("id"));
if (id > -1)
task = app.getTask(id);

String action="";
int actionId = -1;

int parentId = 0;
if (request.getParameter("parentId")!=null)
parentId = Integer.parseInt(request.getParameter("parentId"));


// Get the workgroup
IWorkgroup workgroup = null;
if (request.getParameter("workgroupId")!=null && Integer.parseInt(request.getParameter("workgroupId"))!=app.getPersonalWorkgroup().getId())
workgroup = app.getWorkgroup(Integer.parseInt(request.getParameter("workgroupId")));
else
workgroup = app.getPersonalWorkgroup();

boolean isPersonalDesktop = (workgroup.getId() == app.getPersonalWorkgroup().getId());

boolean refreshOnClose = true;
if (request.getParameter("norefresh")!=null)
refreshOnClose = false;

CustomFieldUI flui = new CustomFieldUI(sess);
String taskName = "";
String taskDescription = "";
String taskComments = "";

int taskCompletion = 0;
int taskEditPrivate = 0;

List taskFormList = new ArrayList();
List taskCustomFieldList = new ArrayList();


// Define various variables to be used
String startDate = "";
String endDate = "";
String startTime = "";
String startTimeHr = "";
String startTimeMin = "";
String endTime = "";
String endTimeHr = "";
String endTimeMin = "";

String FREQ = "NONE";
String INTERVAL = "1";
String BYMONTHDAY = "1";
String BYDAY = "";
String BYMONTH = "1";
String UNTIL = "";
String TYPE = "";

String REMINDERTYPE = "RELATIVE";
String RELATIVE_INTERVAL = "0";
String PERIOD = "";
String REMINDERDATE = "";
String REMINDERTIME = "";
String REMINDERTIMEhr = "";
String REMINDERTIMEmin = "";


if (request.getParameter("action")!=null)
action = request.getParameter("action");

if (action.equals("deleteFile"))
{
actionId = Integer.parseInt(request.getParameter("actionId"));
task.deleteFile(actionId);
response.sendRedirect("taskEditor.jsp?id=" + id + "&workgroupId=" + workgroup.getId() + "&tds=" + new Date().getTime());
return;
}
else if(action.equals("deleteTask"))
{
actionId = Integer.parseInt(request.getParameter("actionId"));
app.deleteTask(actionId);
response.sendRedirect("taskEditor.jsp?id=" + id + "&workgroupId=" + workgroup.getId() + "&tds=" + new Date().getTime());
return;
}
else if (action.equals("changeTaskStatus"))
{
actionId = Integer.parseInt(request.getParameter("actionId"));
ITask atask = app.getTask(actionId);
boolean markComplete = true;
if (request.getParameter("notcomplete")!=null)
markComplete = false;

if (atask.getTaskCompletion() == 1)
{
ITask justcompleted = atask.setComplete(markComplete);
if (justcompleted.isItDone())
{
justcompleted.setComplete(markComplete);
justcompleted.notifyAllUsersOfCompletion();
}
}
else
{
atask.setComplete(markComplete);
atask.notifyAllUsersOfCompletion();
}

response.sendRedirect("taskEditor.jsp?id=" + id + "&workgroupId=" + workgroup.getId() + "&tds=" + new Date().getTime());
return;
}
else if (action.equals("rejectTask"))
{
actionId = Integer.parseInt(request.getParameter("actionId"));
ITask atask = app.getTask(actionId);
atask.reject(sess.getUser());
response.sendRedirect("taskEditor.jsp?id=" + id + "&workgroupId=" + workgroup.getId() + "&tds=" + new Date().getTime());
return;
}

if (request.getParameter("postback") == null) {
boolean formsComplete = true;
if (id>0)
{
task = app.getTask(id);

// Get the name, description, and comments
taskName = task.getName();
taskDescription = task.getDescription();
if (task.getComments() != null)
taskComments = task.getComments();

taskCompletion = task.getTaskCompletion();
taskEditPrivate = task.getTaskEditPrivate();

RELATIVE_INTERVAL = Integer.toString(task.getReminderOffset());

parentId = task.getParentId();

// Get the start date and time information
String tz = sess.getUser().getPreference("calendar_timeZoneId","EST");
Calendar startCal = DateParser.parse(task.getStartTime(), TimeZone.getTimeZone(task.getTimeZone()));
Calendar endCal = (Calendar) startCal.clone();
endCal.add(Calendar.MINUTE, task.getDuration());
DateFormat dateFmt = new SimpleDateFormat("MM/dd/yyyy");
DateFormat timeFmt = new SimpleDateFormat("HH:mm");
startDate = dateFmt.format(startCal.getTime());
startTime = timeFmt.format(startCal.getTime());
endDate = dateFmt.format(endCal.getTime());
endTime = timeFmt.format(endCal.getTime());

// Get the recurrence information
RecurData d = new RecurData(task.getRecurrence());
if (d.frequency!=null)
FREQ = d.frequency;
INTERVAL = ""+d.interval;
if (d.byMonthDay!=null)
BYMONTHDAY = ""+d.byMonthDay[0];
if (d.days!=null)
for (int i=0; i<d.days.length; i++)
BYDAY += (i>0?",":"") + d.days;
if (d.byMonth!=null)
BYMONTH = ""+d.byMonth[0];
if (d.until!=null)
UNTIL = dateFmt.format(d.until.getTime());

// Get the mapped users and forms
taskFormList = task.getPublishedForms();
taskCustomFieldList = task.getCustomFields();

// Check to see if the form is filled out
if (taskFormList!=null && taskFormList.size()>0)
{
Iterator formIterator = taskFormList.iterator();
while (formIterator.hasNext())
{
IPublishedForm publishedForm = (IPublishedForm) formIterator.next();
IForm form = publishedForm.getForm();
if (task.getFormHistory(form).size()==0)
{
formsComplete = false;
break;
}
}
}
}
else {
taskCustomFieldList = app.getCustomFields(ITask.OBJECT_TYPE_TASK);
}
}
else { /* PostBack is not null */
String taskname = request.getParameter("taskname");
String taskdescription = request.getParameter("taskdescription");
String taskcomments = request.getParameter("taskcomments");
int taskpercentcomplete = Integer.parseInt(request.getParameter("taskpercentcomplete"));

startDate = request.getParameter("start_date");

startTimeHr = request.getParameter("task_start_time_hr");
startTimeMin = request.getParameter("task_start_time_min");
startTime = startTimeHr+":"+startTimeMin;

endTimeHr = request.getParameter("task_end_time_hr");
endTimeMin = request.getParameter("task_end_time_min");
endTime = endTimeHr+":"+endTimeMin;
out.write("end time = "+endTime);
endDate = request.getParameter("end_date");

String taskEditPrivateStr = request.getParameter("taskeditprivate");
String taskCompletionStr = request.getParameter("taskcompletion");

String reminderType = request.getParameter("REMINDERTYPE");
int relative = 0;
if (request.getParameter("RELATIVE_INTERVAL") != null) {
relative = Integer.parseInt(request.getParameter("RELATIVE_INTERVAL"));
}

String reminderDate = request.getParameter("REMINDERDATE");
REMINDERTIMEhr = request.getParameter("task_REMINDERTIME_time_hr");
REMINDERTIMEmin = request.getParameter("task_REMINDERTIME_time_min");
String reminderTime = REMINDERTIMEhr+":"+REMINDERTIMEmin;

String frequency = request.getParameter("FREQ");
String interval = request.getParameter("INTERVAL");
if (interval == null) interval = "0";
String byMonthDay = request.getParameter("BYMONTHDAY");
if (byMonthDay == null) byMonthDay = "0";
String byDay = request.getParameter("__BYDAY");
if (byDay == null) byDay = "0";
String byMonth = request.getParameter("BYMONTH");
if (byMonth == null) byMonth = "0";
String until = request.getParameter("UNTIL");

String reminderSent = "f";

String recurRule = "";
if (!frequency.equals("NONE"))
{
recurRule = "FREQ=" + frequency + ";INTERVAL=" + interval + ";";
if (frequency.equals("WEEKLY"))
{
recurRule += "BYDAY=" + byDay + ";";
}
else if (frequency.equals("MONTHLY"))
{
recurRule += "BYMONTHDAY=" + byMonthDay + ";";
}
else if (frequency.equals("YEARLY"))
{
recurRule += "BYMONTHDAY=" + byMonthDay + ";BYMONTH=" + byMonth + ";";
}
if (!until.equals(""))
{
recurRule += "UNTIL=" + createTimeString(sess, until, "00:00") + ";";
}
}


if (startTime.equals("") || startDate.equals(""))
{
startTime = endTime;
startDate = endDate;
}
int duration = getDuration(sess, startDate, startTime, endDate, endTime);


int reminderOffset = 0;

if (reminderType.equals("RELATIVE")) {
reminderOffset = relative;
}
else {
reminderOffset = getDuration(sess, reminderDate, reminderTime, endDate, endTime);
}

if(taskCompletionStr != null) {
taskCompletion = Integer.parseInt(taskCompletionStr);
}


if (taskEditPrivateStr != null) {
taskEditPrivate= Integer.parseInt(taskEditPrivateStr);
}

if (id<0)
{
int parent_id = Integer.parseInt(request.getParameter("parentId"));
String tz = sess.getUser().getPreference("calendar_timeZoneId","EST");

TaskData taskData = new TaskData
(
taskname,
taskdescription,
taskcomments,
createTimeString(sess, startDate, startTime),
duration,
tz,
recurRule,
taskpercentcomplete,
taskCompletion,
reminderOffset,
reminderSent,
taskEditPrivate
);

task = workgroup.addTask(taskData);
}
else
{
task = app.getTask(id);
task.setName(taskname);
task.setDescription(taskdescription);
task.setComments(taskcomments);
task.setStartTime(createTimeString(sess, startDate, startTime));
String tz = sess.getUser().getPreference("calendar_timeZoneId","EST");
task.setTimeZone(tz);
task.setDuration(duration);
task.setReminderOffset(reminderOffset);
task.setPercentComplete(taskpercentcomplete);
task.setTaskCompletion(taskCompletion);
task.setTaskEditPrivate(taskEditPrivate);
task.setRecurrence(recurRule);
task.update();
}

if (taskpercentcomplete == 100)
{
if (task.getTaskCompletion() == 1)
{
ITask justCompleted = task.setComplete();
if (justCompleted.isItDone())
{
justCompleted.setComplete();
justCompleted.notifyAllUsersOfCompletion();
}
}
else
{
task.setComplete();
task.notifyAllUsersOfCompletion();
}
}
else {
if (id<0) {
// if it's new, send the author a notification
task.sendNotification(sess.getUser());
}
else { // for edits, send everyone a notification
task.notifyAllUsers();
}
}

flui.saveCustomFields(task, request);

// Users, roles, emails, and forms are only mapped to Workgroup tasks,
// not personal tasks
if (!isPersonalDesktop)
{
String userId = request.getParameter("user_id");
String userList[] = StringUtils.splitAll(userId, "__");
String addRemoveId = request.getParameter("add_remove_id");
String addRemoveList[] = StringUtils.splitAll(addRemoveId, "__");

String roleId = request.getParameter("role_id");
String roleList[] = StringUtils.splitAll(roleId, "__");
String roleAddRemoveId = request.getParameter("role_add_remove_id");
String roleAddRemoveList[] = StringUtils.splitAll(roleAddRemoveId, "__");

String emailAddresses = request.getParameter("email_addresses");
String emailAddressList[] = StringUtils.splitAll(emailAddresses, ";");

String formId = request.getParameter("form_id");
String formList[] = StringUtils.splitAll(formId, "__");
String formAddRemoveId = request.getParameter("form_add_remove_id");
String formAddRemoveList[] = StringUtils.splitAll(formAddRemoveId, "__");

mapUsers(sess, task, userList, addRemoveList);
mapRoles(sess, task, roleList, roleAddRemoveList);
mapForms(task, formList, formAddRemoveList);
saveEmailAddresses(task, emailAddressList, id);
}



}
%>


<html>
<head>


<link rel="stylesheet" href="/jsp/applications/include/stylesheets/tab.blue292.css" type="text/css">
<link rel="stylesheet" href="/jsp/applications/include/stylesheets/app.css" type="text/css">

<script language="javascript" src="/jsp/applications/include/scripts/printPreview.js"></script>
<script language="javascript" src="/jsp/applications/include/scripts/downloadFile.js"></script>
<script language="javascript" src="/jsp/applications/include/scripts/calendar.js"></script>
<script language="javascript" src="/jsp/applications/xmlWizard/scripts/formCheck.js"></script>
<script language="javascript" src="/jsp/applications/include/scripts/selectbox.js"></script>
<script language="javascript" src="/jsp/applications/include/scripts/browser_detect.js"></script>
<script language="javascript" src="/jsp/applications/include/scripts/dhtml_base.js"></script>
<script language="javascript" src="/jsp/applications/wizard/scripts/wizard.js"></script>
<script language="javascript" src="/jsp/applications/include/scripts/tabpane.js"></script>


<script language="javascript">
<% if (request.getParameter("postback")!=null) { %>

<% if (refreshOnClose) {%>
window.opener.document.location.reload();
<% } %>

window.close();
<% } %>

var cal = new CalendarPopup();

var customFieldData = new Array();

function CCustomField(id,type, name, description, regExp, required)
{
this.id = id;
this.type = type;
this.name = name;
this.description = description;
this.regExp = regExp;
this.required = required;
this.selections = new Array();
}

function CCustomFieldSelection (id, name)
{
this.id = id;
this.name = name;
}

// Refresh the opener's opener if attributes of the task are changed
function refreshOpener()
{
top.window.opener.document.location.reload();
}

var winForm = null;
function popViewForm(_formId, _workgroupId)
{
// Refresh the opener because they are filling out a form
window.onunload=refreshOpener;
winForm = printPreview("/jsp/applications/managementsystem/forms/editor/PublishedForm.jsp","formId=" + _formId + "&id=" + _workgroupId + "&objectTypeId=7" + "&taskId=<%=id%>");
}

function displayTaskUsers(_id) {
popWindow("/jsp/applications/managementsystem/calendar/taskUsers.jsp?id=" + _id, 'task_users', 500, 500, false);
}

function popViewFormHistory(formId, workgroupId, rowId)
{
winForm = printPreview("/jsp/applications/managementsystem/forms/editor/PublishedForm.jsp","formId=" + formId + "&id="+ workgroupId + "&objectTypeId=7" + "&rowId="+ rowId + "&taskId=<%=id%>");
}

function popFileWizard()
{
popWizard("/jsp/applications/managementsystem/wizards/inlineFile", <%=id%>, "fileObjectId=<%=id%>&fileTypeId=<%=ITask.OBJECT_TYPE_TASK%>");
}


function deleteFile(_fileId)
{
if (confirm("Are you sure you want to remove this file from this task?"))
{
document.location.href="taskEditor.jsp?workgroupId=<%=workgroup.getId()%>&id=<%=id%>&action=deleteFile&actionId=" + _fileId;
}
}

function downloadFile(_fileId)
{
popDownloadFile(<%=ITask.OBJECT_TYPE_TASK%>, <%=id%>, _fileId);
}

function popWindow(_url, _name, _width, _height, _scrolling)
{

var screenW = screen.availWidth;
var screenH = screen.availHeight;

var features =
'width=' + _width +
',height=' + _height +
',top=' + ((screenH-_height)*.5) +
',left=' + ((screenW-_width)*.5) +
',location=' + 'no' +
',menubar=' + 'no' +
',scrollbars=' + (_scrolling==true?'yes':'no') +
',status=' + 'no' +
',toolbar=' + 'no' +
',resizable=' + 'yes';

window.open(_url, _name, features);
}


// Validate for the form fields and submit the form if there aren't any problems
function submitForm()
{
if (isWhitespace(document.frm.taskname.value)) {
alert("Please specify a name for this task.");
return false;
}

if (!isDateReg(document.frm.end_date.value) || isWhitespace(document.frm.task_end_time_hr.value)||isWhitespace(document.frm.task_end_time_min.value)) {
alert("Please specify a valid date and time for the due date.");
return false;
}

// only check start date if start time was specified
if (!(isWhitespace(document.frm.task_start_time_hr.value)||isWhitespace(document.frm.task_start_time_min.value))) {
if (!isDateReg(document.frm.start_date.value)) {
alert("Please specify a valid date for the start date.");
return false;
}

// If both start and end date were specified, ensure that start comes before end
var startTime = new Date(document.frm.start_date.value + ' ' + document.frm.task_start_time_hr.value + ':' + document.frm.task_start_time_min.value);
var endTime = new Date(document.frm.end_date.value + ' ' + document.frm.task_end_time_hr.value + ':' + document.frm.task_end_time_min.value);
if (startTime > endTime) {
alert("The Start Date/Time should be before the End Date/Time");
return false;
}
}

// check for any required custom fields
for (var i=0; i<customFieldData.length; i++)
{
var fieldData = eval('document.frm.customFieldData_' + customFieldData.id + '.value');

if(customFieldData.required == "true")
{
if(customFieldData.type != 4 /*checkbox*/ && isWhitespace(fieldData)) {
alert(customFieldData.name + " is a required Custom Field");
return false;
}
if(customFieldData.type == 2 /*checkbox*/ && fieldData == -1) {
alert(customFieldData.name + " is a required Custom Field");
return false;
}
}

// validate custom fields
if (customFieldData.type == 1 && !isEmail(fieldData, true))
{
alert(customFieldData.name + " is not a valid email address.");
return false;
}

if (customFieldData.type == 6 && !isDateReg(fieldData, true))
{
alert(customFieldData.name + " must be a valid date in mm/dd/yyyy format.");
return false;
}


if (customFieldData.type == 7 && !isFloat(fieldData, true))
{
alert(customFieldData.name + " must be a valid number.");
return false;
}


if (customFieldData.type == 8 && !isTimeReg(fieldData, true))
{
alert(customFieldData.name + " must be a valid time in 24 hour format (e.g. 23:45).");
return false;
}


if (customFieldData.type == 9) {
var urlRegex = new RegExp("^https?://(\\-|\\w)+(\\.(\\-|\\w)+)+:)[0-9]+)?($|/.*$)");
var isvalid = false;

if (customFieldData.required == "true") {
isvalid = urlRegex.test(fieldData);
}
else {
isvalid = fieldData == "" || urlRegex.test(fieldData);
}


if (!isvalid)
{
alert(customFieldData.name + " must be a valid URL.");
return false;
}
}

}


// if reminder is exact, make sure a date was put in
if (document.frm.REMINDERTYPE.value == "EXACT")
{
if (isWhiteSpace(document.frm.REMINDERDATE.value))
{
alert("Please enter a date for this reminder");
return false;
}
}

<% if (!isPersonalDesktop) { %>
// unroll the selectlists
var userIdString = "";
var userAddRemoveString ="";
var notSelectedUsers = document.frm.avail_users.options
var selectedUsers = document.frm.selected_users.options;

for (var i=0; i < notSelectedUsers.length; i++)
{
userIdString += notSelectedUsers.value + "__";
userAddRemoveString += "0__";
}

for (var i=0; i < selectedUsers.length; i++)
{
userIdString += selectedUsers.value + "__";
userAddRemoveString += "1__";
}

document.frm.user_id.value = userIdString;
document.frm.add_remove_id.value = userAddRemoveString;

var roleIdString = "";
var roleAddRemoveString ="";
var notSelectedRoles = document.frm.avail_roles.options
var selectedRoles = document.frm.selected_roles.options;

for (var i=0; i < notSelectedRoles.length; i++)
{
roleIdString += notSelectedRoles.value + "__";
roleAddRemoveString += "0__";
}

for (var i=0; i < selectedRoles.length; i++)
{
roleIdString += selectedRoles.value + "__";
roleAddRemoveString += "1__";
}


document.frm.role_id.value = roleIdString;
document.frm.role_add_remove_id.value = roleAddRemoveString;

var formIdString = "";
var formAddRemoveString ="";
var notSelectedForms = document.frm.avail_forms.options
var selectedForms = document.frm.selected_forms.options;

for (var i=0; i < notSelectedForms.length; i++)
{
formIdString += notSelectedForms.value + "__";
formAddRemoveString += "0__";
}

for (var i=0; i < selectedForms.length; i++)
{
formIdString += selectedForms.value + "__";
formAddRemoveString += "1__";
}

document.frm.form_id.value = formIdString;
document.frm.form_add_remove_id.value = formAddRemoveString;

var emailString = "";
var emails = document.frm.selected_emails;

for (var i=0; i<emails.length; i++)
{
emailString += emails.value + ";";
}

document.frm.email_addresses.value = emailString;
<% } // personal Desktop portal %>

document.frm.submit()
}

function addEmail()
{
var selectedEmail = document.frm.email_address;

//Trim spaces and lowercase all
var space = / /g;
var emailAddress = selectedEmail.value;
emailAddress = emailAddress.toLowerCase();
emailAddress = emailAddress.replace(space,"");

if(emailAddress == "") {
selectedEmail.value = "";
return;
}

//Valid email address?
var at = /.+@.+\..+/g;
if(emailAddress.search(at) == -1)
{
alert("'" + emailAddress + "' does not seem to be a valid email address");
return;
}

var emailList = document.frm.selected_emails;
emailList[emailList.length] = new Option(emailAddress, emailAddress);
selectedEmail.value = "";

sortSelect(emailList);
}


function removeEmail()
{
var emails = document.frm.selected_emails;

for (var i=(emails.options.length-1); i>=0; i--) {
var o = emails.options;
if (o.selected) {
emails.options = null;
}
}

sortSelect(emails);
}

function init()
{
<% if (!isPersonalDesktop) { %>
sortSelect(document.frm.avail_users);
sortSelect(document.frm.selected_users);
sortSelect(document.frm.avail_roles);
sortSelect(document.frm.selected_roles);
sortSelect(document.frm.selected_emails);
sortSelect(document.frm.selected_forms);
<% } %>

initRecurrence();
initReminders();
}

function initRecurrence()
{
for (var i=0; i<document.frm.FREQ.length; i++)
{
if (document.frm.FREQ.value=="<%=FREQ%>")
{
document.frm.FREQ.checked = true;
}
}

changeRecurrence("<%=FREQ%>");

// Select the until values and radio buttons
<%if (UNTIL != "") { %>
document.frm.__END_OPTION__[1].checked = true;
document.frm.UNTIL.value="<%=UNTIL%>";
<% } else { %>
document.frm.__END_OPTION__[0].checked = true;
<% } %>

}

function changeCheckedDays(day)
{
// If the day is selected in the list, remove it
if (isSelectedDay(day))
{
var str = "";
var dayStr = document.frm.__BYDAY.value;
var dayList = dayStr.split(",");
for (var i=0; i<dayList.length; i++)
{
if (dayList!=day)
{
if (str.length>0)
str += ",";
str += dayList;
}
}
document.frm.__BYDAY.value = str;
}

// Else, add the day to the list
else
{
var dayStr = document.frm.__BYDAY.value;
if (dayStr.length>0)
document.frm.__BYDAY.value += ",";

document.frm.__BYDAY.value += day;

}
}

function isSelectedDay(day)
{
var dayList = document.frm.__BYDAY.value.split(",");
for (var j=0; j<dayList.length; j++)
{
if (dayList[j]==day) return true;
}
return false;
}

function monthDays()
{
var s= "";
for(i = 1; i <= 31; i++)
{
s += "<option " + (<%=BYMONTHDAY%>==i?"SELECTED":"") + " value=\""+i+"\">"+i+"</option>";
}
s += "<option " + (<%=BYMONTHDAY%>==-1?"SELECTED":"") + " value=\"-1\">Last</option>";
return s;
}

function months()
{
var s="";
var monthList = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
for (var i=0; i<monthList.length; i++)
{
s += "<option " + (<%=BYMONTH%>==(i+1)?"SELECTED":"") + " value=\"" + (i+1) + "\">" + monthList + "</option>";
}
return s;
}

function changeRecurrence(_recId)
{
var divString = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">";
switch (_recId)
{
case ("DAILY"):
divString += "<tr><td class=\"copy\">Every <input type=\"text\" name=\"INTERVAL\" size=\"2\" value=\"" + <%=INTERVAL%> + "\"> day(s)</td></tr>";
break;
case ("WEEKLY"):
divString += "<tr><td colspan=\"2\" class=\"copy\">Recurs every <input type=\"text\" name=\"INTERVAL\" size=\"2\" value=\"" + <%=INTERVAL%> + "\"> week(s) on</td></tr>";
divString += "<tr><td><input " + (isSelectedDay("SU")?"CHECKED":"") + " type=\"checkbox\" name=\"BYDAY\" value=\"SU\" onClick=\"changeCheckedDays(this.value);\"></td><td>&nbsp;&nbsp;Sunday</td></tr>";
divString += "<tr><td><input " + (isSelectedDay("MO")?"CHECKED":"") + " type=\"checkbox\" name=\"BYDAY\" value=\"MO\" onClick=\"changeCheckedDays(this.value);\"></td><td>&nbsp;&nbsp;Monday</td></tr>";
divString += "<tr><td><input " + (isSelectedDay("TU")?"CHECKED":"") + " type=\"checkbox\" name=\"BYDAY\" value=\"TU\" onClick=\"changeCheckedDays(this.value);\"></td><td>&nbsp;&nbsp;Tuesday</td></tr>";
divString += "<tr><td><input " + (isSelectedDay("WE")?"CHECKED":"") + " type=\"checkbox\" name=\"BYDAY\" value=\"WE\" onClick=\"changeCheckedDays(this.value);\"></td><td>&nbsp;&nbsp;Wednesday</td></tr>";
divString += "<tr><td><input " + (isSelectedDay("TH")?"CHECKED":"") + " type=\"checkbox\" name=\"BYDAY\" value=\"TH\" onClick=\"changeCheckedDays(this.value);\"></td><td>&nbsp;&nbsp;Thursday</td></tr>";
divString += "<tr><td><input " + (isSelectedDay("FR")?"CHECKED":"") + " type=\"checkbox\" name=\"BYDAY\" value=\"FR\" onClick=\"changeCheckedDays(this.value);\"></td><td>&nbsp;&nbsp;Friday</td></tr>";
divString += "<tr><td><input " + (isSelectedDay("SA")?"CHECKED":"") + " type=\"checkbox\" name=\"BYDAY\" value=\"SA\" onClick=\"changeCheckedDays(this.value);\"></td><td>&nbsp;&nbsp;Saturday</td></tr>";
break;
case ("MONTHLY"):
divString += "<tr><td class=\"copy\">Day <select name=\"BYMONTHDAY\">"+monthDays()+"</select> of every <input type=\"text\" name=\"INTERVAL\" size=\"2\" value=\"" + <%=INTERVAL%> + "\"> month(s)</td></tr>";
break;
case ("YEARLY"):
divString += "<tr><td class=\"copy\">Every <input type=\"text\" name=\"INTERVAL\" size=\"2\" value=\"" + <%=INTERVAL%> + "\"> year(s) on the ";
divString += "<select name=\"BYMONTHDAY\">"+monthDays()+"</select>";
divString += " day of <select name=\"BYMONTH\">" + months() + "</select></td></tr>";
break;
}
divString += "</table>";
writeLayer("this", "divRec", divString);
}

function setUntil() {
if (document.frm.__END_OPTION__[0].checked == true) {
document.frm.UNTIL.value = '';
}
}

function initReminders()
{
// Select the correct frequency value
for (var i=0; i<document.frm.REMINDERTYPE.length; i++)
{
if (document.frm.REMINDERTYPE.value=="<%=REMINDERTYPE%>")
{
document.frm.REMINDERTYPE.checked = true;
}
}
changeReminder("<%=REMINDERTYPE%>");
}

function isSelectedPeriod(_period) {
return (_period=="<%=RELATIVE_INTERVAL%>");
}

function isSelectedTime(_period) {
return (_period=="<%=REMINDERTIME%>");
}


function changeReminder(_remId)
{
var divString = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">";

switch (_remId)
{
case ("RELATIVE"):
divString += "<tr><td class=\"copy\">";
divString += "<select name=\"RELATIVE_INTERVAL\" >";
divString += "<option value=\"0\"" + (isSelectedPeriod("0") ? " selected" : "") + ">0 min.</option>";
divString += "<option value=\"5\"" + (isSelectedPeriod("5") ? " selected" : "") + ">5 min.</option>";
divString += "<option value=\"10\"" + (isSelectedPeriod("10") ? " selected" : "") + ">10 min.</option>";
divString += "<option value=\"15\"" + (isSelectedPeriod("15") ? " selected" : "") + ">15 min.</option>";
divString += "<option value=\"30\"" + (isSelectedPeriod("30") ? " selected" : "") + ">30 min.</option>";
divString += "<option value=\"60\"" + (isSelectedPeriod("60") ? " selected" : "") + ">1 hr.</option>";
divString += "<option value=\"120\"" + (isSelectedPeriod("120") ? " selected" : "") + ">2 hr.</option>";
divString += "<option value=\"300\"" + (isSelectedPeriod("300") ? " selected" : "") + ">5 hr.</option>";
divString += "<option value=\"1440\"" + (isSelectedPeriod("1440") ? " selected" : "") + ">1 day</option>";
divString += "<option value=\"7200\"" + (isSelectedPeriod("7200") ? " selected" : "") + ">5 days</option>";
divString += "<option value=\"14400\"" + (isSelectedPeriod("14400") ? " selected" : "") + ">10 days</option>";
divString += "<option value=\"43200\"" + (isSelectedPeriod("43200") ? " selected" : "") + ">30 days</option>";
divString += "<option value=\"86400\"" + (isSelectedPeriod("86400") ? " selected" : "") + ">60 days</option>";
divString += "<option value=\"129600\"" + (isSelectedPeriod("129600") ? " selected" : "") + ">90 days</option>";
divString += "<option value=\"172800\"" + (isSelectedPeriod("172800") ? " selected" : "") + ">120 days</option>";
divString += "<option value=\"259200\"" + (isSelectedPeriod("259200") ? " selected" : "") + ">180 days</option>";
divString += "</select>";
divString += " before the task is due";
divString += "</td></tr>";
break;
case ("EXACT"):
divString += "<tr><td class=\"copy\">";
divString += "<input type=\"text\" name=\"REMINDERDATE\" size=\"7\" value=\"<%=getToday(sess)%>\">";
divString += "<a id=\"REMINDERDATE__POSITION__\" style=\"cursor: hand;\" onclick=\"javascript:cal.showCalendar('REMINDERDATE__POSITION__', 'document.frm.REMINDERDATE');\">";
divString += "<img src=\"/jsp/applications/images/buttons/calendar.gif\" border=\"0\"></a></td>";
divString += "<td><%=writeTime2(sess, task, "REMINDERTIME")%>";
divString += "</td></tr>";
break;
}

divString += "</table>";
writeLayer("this", "divRem", divString);

}


</script>


<title><%= (id > -1 ? "Edit " + task.getName(): "New Task") %></title>

</head>

<body onload="init();">

<table width="100%"><tr><td class="header">
<%= (id > -1 ? "Edit " + task.getName(): "New Task") %>
</td></tr></table>

<form name="frm" action="taskEditor.jsp" onsubmit="return false;" method="POST">

<input type="hidden" name="id" value="<%=id%>">
<input type="hidden" name="workgroupId" value="<%=workgroup.getId()%>">
<input type="hidden" name="parentId" value="<%=parentId%>">
<input type="hidden" name="postback" value="true">
<% if(!refreshOnClose) { %>
<input type="hidden" name="norefresh" value="true">
<% } %>


<div class="tab-pane" id="tabstrip">
<script type="text/javascript">
tabPane = new WebFXTabPane( document.getElementById( "tabstrip" ), false );
</script>

<div id="main-tab" class="tab-page">
<h2 class="tab">Task</h2>
<script type="text/javascript">
tabPane.addTabPage(document.getElementById("main-tab"));
</script>

<table style="width:400px;" class="portal">
<tr>
<th width="20%" class="required">Task Name:</th>
<td style="border: solid #999999 1px; ">
<input name="taskname" size="50" type="text" value="<%=taskName%>"></td>
</tr>
<% if (id > -1) { %>
<tr>
<th width="20%">Creator:</th>
<td style="border: solid #999999 1px; ">
<%=task.getCreator().getFirstName() + " " + task.getCreator().getLastName() +" - "+
((task.getCreator().getUserRole()==null)? " ":task.getCreator().getUserRole().getName())%></td>
<% } %>
</tr>
<tr>
<th width="20%">Description:</th>
<td style="border: solid #999999 1px; ">
<textarea name="taskdescription" cols="55" rows="4"><%=taskDescription%></textarea>
</td>
</tr>
<tr>
<th width="20%">Comments:</th>
<td style="border: solid #999999 1px; ">
<textarea name="taskcomments" cols="55" rows="4"><%=taskComments%></textarea>
</td>
</tr>
<tr>
<th width="20%">Start Date/Time:</th>
<td style="border: solid #999999 1px; ">
<% writeDate(sess, out, task, "start"); %>
&nbsp; &nbsp;
<% writeTime(sess, out, task, "start"); %>
</td>
</tr>
<tr>
<th width="20%" class="required">Due Date/Time:</th>
<td style="border: solid #999999 1px; ">
<% writeDate(sess, out, task, "end"); %>
&nbsp; &nbsp;
<% writeTime(sess, out, task, "end"); %>
</td>
</tr>
<tr>
<th width="20%">Reminder Time:</th>
<td style="border: solid #999999 1px; ">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<input type="radio" name="REMINDERTYPE" value="RELATIVE" onClick="changeReminder(this.value);">
Relative
<br>
<input type="radio" name="REMINDERTYPE" value="EXACT" onClick="changeReminder(this.value);">
Exact Date
</td>
<td><div id="divRem"></div></td>
</tr>
</table>
</td>
</tr>
<tr>
<th width="20%">Percent Complete:</th>
<td style="border: solid #999999 1px; ">
<% writePercentComplete(sess, out, task); %>
</td>
</tr>

<% if (!isPersonalDesktop) { %>
<tr>
<th width="20%">Assignees:</th>
<td style="border: solid #999999 1px; ">
<table>
<tr>
<td valign="top">
Available Users:
<input type="hidden" name="user_id" value="">
<input type="hidden" name="add_remove_id" value="">

<select name="avail_users" size="4" multiple style="width:165px;">
<% writeAssignees(out, task, workgroup, true); %>
</select>
<div style="font-weight: bold;">* [currently online]</div>
</td>
<td valign="middle">
<input type="button" value="&gt;&gt;" onclick="moveSelectedOptions(document.frm.avail_users, document.frm.selected_users, true);">
<br>
<input type="button" value="&lt;&lt;" onclick="moveSelectedOptions(document.frm.selected_users, document.frm.avail_users, true);">
</td>
<td valign="top">
Selected Users:
<select name="selected_users" size="4" multiple style="width:165px;">
<% writeAssignees(out, task, workgroup, false); %>
</select>
</td>
</tr>
</table>
</td>
<tr>
<th width="20%">Roles:</th>
<td style="border: solid #999999 1px; ">
<table>
<tr>
<td valign="top">
Available Roles:
<input type="hidden" name="role_id" value="">
<input type="hidden" name="role_add_remove_id" value="">

<select name="avail_roles" size="4" multiple style="width:165px;">
<% writeRoles(out, task, app, workgroup, true); %>
</select>
</td>
<td valign="middle">
<input type="button" value="&gt;&gt;" onclick="moveSelectedOptions(document.frm.avail_roles, document.frm.selected_roles, true);">
<br>
<input type="button" value="&lt;&lt;" onclick="moveSelectedOptions(document.frm.selected_roles, document.frm.avail_roles, true);">
</td>
<td valign="top">
Selected Roles:
<select name="selected_roles" size="4" multiple style="width:165px;">
<% writeRoles(out, task, app, workgroup, false); %>
</select>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<th width="20%">Email Addresses:</th>
<td style="border: solid #999999 1px; ">
<table>

<tr>
<td>new email address:</td>
<td>
<input type="hidden" name="email_addresses" value="">

<input type="text" name="email_address" size="20">
<input type="button" value="Add" onclick="addEmail();">
</td>

<tr>
<td>selected email addresses:</td>
<td rowspan="2">
<select name="selected_emails" size="3" multiple style="width:200px;">
<% writeEmails(out, task); %>
</select>
</td>
</tr>

<tr>
<td style="text-align:right">
<input type="button" value="Remove" onclick="removeEmail();">
</td>
</tr>
</table>
</td>
</tr>

<% } // for tasks in a Workgroup, not your personal portal %>

</table>

</div>

<% if (taskCustomFieldList.size() > 0) { %>
<div id="customField-tab" class="tab-page">
<h2 class="tab">Custom</h2>
<script type="text/javascript">
tabPane.addTabPage(document.getElementById("customField-tab"));
</script>

<p class="subheader">Custom Fields </p>
<table style="width:400px;" class="portal">
<% writeCustomFields(sess, out, task, app); %>
</table>

</div>
<% } // check for taskCustomFieldList.size() > 0 %>


<div id="recur-tab" class="tab-page">
<h2 class="tab">Recurrence</h2>
<script type="text/javascript">
tabPane.addTabPage(document.getElementById("recur-tab"));
</script>

<input type="hidden" name="__BYDAY" value="<%=BYDAY%>">

<p class="subheader">What kind of recurrence?</p>

<table class="blank">
<tr>

<td valign="top">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="radio" name="FREQ" value="NONE" onClick="changeRec
 
<html>
<head>


<link rel="stylesheet" href="/jsp/applications/include/stylesheets/tab.blue292.css" type="text/css">
<link rel="stylesheet" href="/jsp/applications/include/stylesheets/app.css" type="text/css">

<script language="javascript" src="/jsp/applications/include/scripts/printPreview.js"></script>
<script language="javascript" src="/jsp/applications/include/scripts/downloadFile.js"></script>
<script language="javascript" src="/jsp/applications/include/scripts/calendar.js"></script>
<script language="javascript" src="/jsp/applications/xmlWizard/scripts/formCheck.js"></script>
<script language="javascript" src="/jsp/applications/include/scripts/selectbox.js"></script>
<script language="javascript" src="/jsp/applications/include/scripts/browser_detect.js"></script>
<script language="javascript" src="/jsp/applications/include/scripts/dhtml_base.js"></script>
<script language="javascript" src="/jsp/applications/wizard/scripts/wizard.js"></script>
<script language="javascript" src="/jsp/applications/include/scripts/tabpane.js"></script>


<script language="javascript">
<% if (request.getParameter("postback")!=null) { %>

<% if (refreshOnClose) {%>
window.opener.document.location.reload();
<% } %>

window.close();
<% } %>

var cal = new CalendarPopup();

var customFieldData = new Array();

function CCustomField(id,type, name, description, regExp, required)
{
this.id = id;
this.type = type;
this.name = name;
this.description = description;
this.regExp = regExp;
this.required = required;
this.selections = new Array();
}

function CCustomFieldSelection (id, name)
{
this.id = id;
this.name = name;
}

// Refresh the opener's opener if attributes of the task are changed
function refreshOpener()
{
top.window.opener.document.location.reload();
}

var winForm = null;
function popViewForm(_formId, _workgroupId)
{
// Refresh the opener because they are filling out a form
window.onunload=refreshOpener;
winForm = printPreview("/jsp/applications/managementsystem/forms/editor/PublishedForm.jsp","formId=" + _formId + "&id=" + _workgroupId + "&objectTypeId=7" + "&taskId=<%=id%>");
}

function displayTaskUsers(_id) {
popWindow("/jsp/applications/managementsystem/calendar/taskUsers.jsp?id=" + _id, 'task_users', 500, 500, false);
}

function popViewFormHistory(formId, workgroupId, rowId)
{
winForm = printPreview("/jsp/applications/managementsystem/forms/editor/PublishedForm.jsp","formId=" + formId + "&id="+ workgroupId + "&objectTypeId=7" + "&rowId="+ rowId + "&taskId=<%=id%>");
}

function popFileWizard()
{
popWizard("/jsp/applications/managementsystem/wizards/inlineFile", <%=id%>, "fileObjectId=<%=id%>&fileTypeId=<%=ITask.OBJECT_TYPE_TASK%>");
}


function deleteFile(_fileId)
{
if (confirm("Are you sure you want to remove this file from this task?"))
{
document.location.href="taskEditor.jsp?workgroupId=<%=workgroup.getId()%>&id=<%=id%>&action=deleteFile&actionId=" + _fileId;
}
}

function downloadFile(_fileId)
{
popDownloadFile(<%=ITask.OBJECT_TYPE_TASK%>, <%=id%>, _fileId);
}

function popWindow(_url, _name, _width, _height, _scrolling)
{

var screenW = screen.availWidth;
var screenH = screen.availHeight;

var features =
'width=' + _width +
',height=' + _height +
',top=' + ((screenH-_height)*.5) +
',left=' + ((screenW-_width)*.5) +
',location=' + 'no' +
',menubar=' + 'no' +
',scrollbars=' + (_scrolling==true?'yes':'no') +
',status=' + 'no' +
',toolbar=' + 'no' +
',resizable=' + 'yes';

window.open(_url, _name, features);
}


// Validate for the form fields and submit the form if there aren't any problems
function submitForm()
{
if (isWhitespace(document.frm.taskname.value)) {
alert("Please specify a name for this task.");
return false;
}

if (!isDateReg(document.frm.end_date.value) || isWhitespace(document.frm.task_end_time_hr.value)||isWhitespace(document.frm.task_end_time_min.value)) {
alert("Please specify a valid date and time for the due date.");
return false;
}

// only check start date if start time was specified
if (!(isWhitespace(document.frm.task_start_time_hr.value)||isWhitespace(document.frm.task_start_time_min.value))) {
if (!isDateReg(document.frm.start_date.value)) {
alert("Please specify a valid date for the start date.");
return false;
}

// If both start and end date were specified, ensure that start comes before end
var startTime = new Date(document.frm.start_date.value + ' ' + document.frm.task_start_time_hr.value + ':' + document.frm.task_start_time_min.value);
var endTime = new Date(document.frm.end_date.value + ' ' + document.frm.task_end_time_hr.value + ':' + document.frm.task_end_time_min.value);
if (startTime > endTime) {
alert("The Start Date/Time should be before the End Date/Time");
return false;
}
}

// check for any required custom fields
for (var i=0; i<customFieldData.length; i++)
{
var fieldData = eval('document.frm.customFieldData_' + customFieldData.id + '.value');

if(customFieldData.required == "true")
{
if(customFieldData.type != 4 /*checkbox*/ && isWhitespace(fieldData)) {
alert(customFieldData.name + " is a required Custom Field");
return false;
}
if(customFieldData.type == 2 /*checkbox*/ && fieldData == -1) {
alert(customFieldData.name + " is a required Custom Field");
return false;
}
}

// validate custom fields
if (customFieldData.type == 1 && !isEmail(fieldData, true))
{
alert(customFieldData.name + " is not a valid email address.");
return false;
}

if (customFieldData.type == 6 && !isDateReg(fieldData, true))
{
alert(customFieldData.name + " must be a valid date in mm/dd/yyyy format.");
return false;
}


if (customFieldData.type == 7 && !isFloat(fieldData, true))
{
alert(customFieldData.name + " must be a valid number.");
return false;
}


if (customFieldData.type == 8 && !isTimeReg(fieldData, true))
{
alert(customFieldData.name + " must be a valid time in 24 hour format (e.g. 23:45).");
return false;
}


if (customFieldData.type == 9) {
var urlRegex = new RegExp("^https?://(\\-|\\w)+(\\.(\\-|\\w)+)+:)[0-9]+)?($|/.*$)");
var isvalid = false;

if (customFieldData.required == "true") {
isvalid = urlRegex.test(fieldData);
}
else {
isvalid = fieldData == "" || urlRegex.test(fieldData);
}


if (!isvalid)
{
alert(customFieldData.name + " must be a valid URL.");
return false;
}
}

}


// if reminder is exact, make sure a date was put in
if (document.frm.REMINDERTYPE.value == "EXACT")
{
if (isWhiteSpace(document.frm.REMINDERDATE.value))
{
alert("Please enter a date for this reminder");
return false;
}
}

<% if (!isPersonalDesktop) { %>
// unroll the selectlists
var userIdString = "";
var userAddRemoveString ="";
var notSelectedUsers = document.frm.avail_users.options
var selectedUsers = document.frm.selected_users.options;

for (var i=0; i < notSelectedUsers.length; i++)
{
userIdString += notSelectedUsers.value + "__";
userAddRemoveString += "0__";
}

for (var i=0; i < selectedUsers.length; i++)
{
userIdString += selectedUsers.value + "__";
userAddRemoveString += "1__";
}

document.frm.user_id.value = userIdString;
document.frm.add_remove_id.value = userAddRemoveString;

var roleIdString = "";
var roleAddRemoveString ="";
var notSelectedRoles = document.frm.avail_roles.options
var selectedRoles = document.frm.selected_roles.options;

for (var i=0; i < notSelectedRoles.length; i++)
{
roleIdString += notSelectedRoles.value + "__";
roleAddRemoveString += "0__";
}

for (var i=0; i < selectedRoles.length; i++)
{
roleIdString += selectedRoles.value + "__";
roleAddRemoveString += "1__";
}


document.frm.role_id.value = roleIdString;
document.frm.role_add_remove_id.value = roleAddRemoveString;

var formIdString = "";
var formAddRemoveString ="";
var notSelectedForms = document.frm.avail_forms.options
var selectedForms = document.frm.selected_forms.options;

for (var i=0; i < notSelectedForms.length; i++)
{
formIdString += notSelectedForms.value + "__";
formAddRemoveString += "0__";
}

for (var i=0; i < selectedForms.length; i++)
{
formIdString += selectedForms.value + "__";
formAddRemoveString += "1__";
}

document.frm.form_id.value = formIdString;
document.frm.form_add_remove_id.value = formAddRemoveString;

var emailString = "";
var emails = document.frm.selected_emails;

for (var i=0; i<emails.length; i++)
{
emailString += emails.value + ";";
}

document.frm.email_addresses.value = emailString;
<% } // personal Desktop portal %>

document.frm.submit()
}

function addEmail()
{
var selectedEmail = document.frm.email_address;

//Trim spaces and lowercase all
var space = / /g;
var emailAddress = selectedEmail.value;
emailAddress = emailAddress.toLowerCase();
emailAddress = emailAddress.replace(space,"");

if(emailAddress == "") {
selectedEmail.value = "";
return;
}

//Valid email address?
var at = /.+@.+\..+/g;
if(emailAddress.search(at) == -1)
{
alert("'" + emailAddress + "' does not seem to be a valid email address");
return;
}

var emailList = document.frm.selected_emails;
emailList[emailList.length] = new Option(emailAddress, emailAddress);
selectedEmail.value = "";

sortSelect(emailList);
}


function removeEmail()
{
var emails = document.frm.selected_emails;

for (var i=(emails.options.length-1); i>=0; i--) {
var o = emails.options;
if (o.selected) {
emails.options = null;
}
}

sortSelect(emails);
}

function init()
{
<% if (!isPersonalDesktop) { %>
sortSelect(document.frm.avail_users);
sortSelect(document.frm.selected_users);
sortSelect(document.frm.avail_roles);
sortSelect(document.frm.selected_roles);
sortSelect(document.frm.selected_emails);
sortSelect(document.frm.selected_forms);
<% } %>

initRecurrence();
initReminders();
}

function initRecurrence()
{
for (var i=0; i<document.frm.FREQ.length; i++)
{
if (document.frm.FREQ.value=="<%=FREQ%>")
{
document.frm.FREQ.checked = true;
}
}

changeRecurrence("<%=FREQ%>");

// Select the until values and radio buttons
<%if (UNTIL != "") { %>
document.frm.__END_OPTION__[1].checked = true;
document.frm.UNTIL.value="<%=UNTIL%>";
<% } else { %>
document.frm.__END_OPTION__[0].checked = true;
<% } %>

}

function changeCheckedDays(day)
{
// If the day is selected in the list, remove it
if (isSelectedDay(day))
{
var str = "";
var dayStr = document.frm.__BYDAY.value;
var dayList = dayStr.split(",");
for (var i=0; i<dayList.length; i++)
{
if (dayList!=day)
{
if (str.length>0)
str += ",";
str += dayList;
}
}
document.frm.__BYDAY.value = str;
}

// Else, add the day to the list
else
{
var dayStr = document.frm.__BYDAY.value;
if (dayStr.length>0)
document.frm.__BYDAY.value += ",";

document.frm.__BYDAY.value += day;

}
}

function isSelectedDay(day)
{
var dayList = document.frm.__BYDAY.value.split(",");
for (var j=0; j<dayList.length; j++)
{
if (dayList[j]==day) return true;
}
return false;
}

function monthDays()
{
var s= "";
for(i = 1; i <= 31; i++)
{
s += "<option " + (<%=BYMONTHDAY%>==i?"SELECTED":"") + " value=\""+i+"\">"+i+"</option>";
}
s += "<option " + (<%=BYMONTHDAY%>==-1?"SELECTED":"") + " value=\"-1\">Last</option>";
return s;
}

function months()
{
var s="";
var monthList = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
for (var i=0; i<monthList.length; i++)
{
s += "<option " + (<%=BYMONTH%>==(i+1)?"SELECTED":"") + " value=\"" + (i+1) + "\">" + monthList + "</option>";
}
return s;
}

function changeRecurrence(_recId)
{
var divString = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">";
switch (_recId)
{
case ("DAILY"):
divString += "<tr><td class=\"copy\">Every <input type=\"text\" name=\"INTERVAL\" size=\"2\" value=\"" + <%=INTERVAL%> + "\"> day(s)</td></tr>";
break;
case ("WEEKLY"):
divString += "<tr><td colspan=\"2\" class=\"copy\">Recurs every <input type=\"text\" name=\"INTERVAL\" size=\"2\" value=\"" + <%=INTERVAL%> + "\"> week(s) on</td></tr>";
divString += "<tr><td><input " + (isSelectedDay("SU")?"CHECKED":"") + " type=\"checkbox\" name=\"BYDAY\" value=\"SU\" onClick=\"changeCheckedDays(this.value);\"></td><td>&nbsp;&nbsp;Sunday</td></tr>";
divString += "<tr><td><input " + (isSelectedDay("MO")?"CHECKED":"") + " type=\"checkbox\" name=\"BYDAY\" value=\"MO\" onClick=\"changeCheckedDays(this.value);\"></td><td>&nbsp;&nbsp;Monday</td></tr>";
divString += "<tr><td><input " + (isSelectedDay("TU")?"CHECKED":"") + " type=\"checkbox\" name=\"BYDAY\" value=\"TU\" onClick=\"changeCheckedDays(this.value);\"></td><td>&nbsp;&nbsp;Tuesday</td></tr>";
divString += "<tr><td><input " + (isSelectedDay("WE")?"CHECKED":"") + " type=\"checkbox\" name=\"BYDAY\" value=\"WE\" onClick=\"changeCheckedDays(this.value);\"></td><td>&nbsp;&nbsp;Wednesday</td></tr>";
divString += "<tr><td><input " + (isSelectedDay("TH")?"CHECKED":"") + " type=\"checkbox\" name=\"BYDAY\" value=\"TH\" onClick=\"changeCheckedDays(this.value);\"></td><td>&nbsp;&nbsp;Thursday</td></tr>";
divString += "<tr><td><input " + (isSelectedDay("FR")?"CHECKED":"") + " type=\"checkbox\" name=\"BYDAY\" value=\"FR\" onClick=\"changeCheckedDays(this.value);\"></td><td>&nbsp;&nbsp;Friday</td></tr>";
divString += "<tr><td><input " + (isSelectedDay("SA")?"CHECKED":"") + " type=\"checkbox\" name=\"BYDAY\" value=\"SA\" onClick=\"changeCheckedDays(this.value);\"></td><td>&nbsp;&nbsp;Saturday</td></tr>";
break;
case ("MONTHLY"):
divString += "<tr><td class=\"copy\">Day <select name=\"BYMONTHDAY\">"+monthDays()+"</select> of every <input type=\"text\" name=\"INTERVAL\" size=\"2\" value=\"" + <%=INTERVAL%> + "\"> month(s)</td></tr>";
break;
case ("YEARLY"):
divString += "<tr><td class=\"copy\">Every <input type=\"text\" name=\"INTERVAL\" size=\"2\" value=\"" + <%=INTERVAL%> + "\"> year(s) on the ";
divString += "<select name=\"BYMONTHDAY\">"+monthDays()+"</select>";
divString += " day of <select name=\"BYMONTH\">" + months() + "</select></td></tr>";
break;
}
divString += "</table>";
writeLayer("this", "divRec", divString);
}

function setUntil() {
if (document.frm.__END_OPTION__[0].checked == true) {
document.frm.UNTIL.value = '';
}
}

function initReminders()
{
// Select the correct frequency value
for (var i=0; i<document.frm.REMINDERTYPE.length; i++)
{
if (document.frm.REMINDERTYPE.value=="<%=REMINDERTYPE%>")
{
document.frm.REMINDERTYPE.checked = true;
}
}
changeReminder("<%=REMINDERTYPE%>");
}

function isSelectedPeriod(_period) {
return (_period=="<%=RELATIVE_INTERVAL%>");
}

function isSelectedTime(_period) {
return (_period=="<%=REMINDERTIME%>");
}


function changeReminder(_remId)
{
var divString = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">";

switch (_remId)
{
case ("RELATIVE"):
divString += "<tr><td class=\"copy\">";
divString += "<select name=\"RELATIVE_INTERVAL\" >";
divString += "<option value=\"0\"" + (isSelectedPeriod("0") ? " selected" : "") + ">0 min.</option>";
divString += "<option value=\"5\"" + (isSelectedPeriod("5") ? " selected" : "") + ">5 min.</option>";
divString += "<option value=\"10\"" + (isSelectedPeriod("10") ? " selected" : "") + ">10 min.</option>";
divString += "<option value=\"15\"" + (isSelectedPeriod("15") ? " selected" : "") + ">15 min.</option>";
divString += "<option value=\"30\"" + (isSelectedPeriod("30") ? " selected" : "") + ">30 min.</option>";
divString += "<option value=\"60\"" + (isSelectedPeriod("60") ? " selected" : "") + ">1 hr.</option>";
divString += "<option value=\"120\"" + (isSelectedPeriod("120") ? " selected" : "") + ">2 hr.</option>";
divString += "<option value=\"300\"" + (isSelectedPeriod("300") ? " selected" : "") + ">5 hr.</option>";
divString += "<option value=\"1440\"" + (isSelectedPeriod("1440") ? " selected" : "") + ">1 day</option>";
divString += "<option value=\"7200\"" + (isSelectedPeriod("7200") ? " selected" : "") + ">5 days</option>";
divString += "<option value=\"14400\"" + (isSelectedPeriod("14400") ? " selected" : "") + ">10 days</option>";
divString += "<option value=\"43200\"" + (isSelectedPeriod("43200") ? " selected" : "") + ">30 days</option>";
divString += "<option value=\"86400\"" + (isSelectedPeriod("86400") ? " selected" : "") + ">60 days</option>";
divString += "<option value=\"129600\"" + (isSelectedPeriod("129600") ? " selected" : "") + ">90 days</option>";
divString += "<option value=\"172800\"" + (isSelectedPeriod("172800") ? " selected" : "") + ">120 days</option>";
divString += "<option value=\"259200\"" + (isSelectedPeriod("259200") ? " selected" : "") + ">180 days</option>";
divString += "</select>";
divString += " before the task is due";
divString += "</td></tr>";
break;
case ("EXACT"):
divString += "<tr><td class=\"copy\">";
divString += "<input type=\"text\" name=\"REMINDERDATE\" size=\"7\" value=\"<%=getToday(sess)%>\">";
divString += "<a id=\"REMINDERDATE__POSITION__\" style=\"cursor: hand;\" onclick=\"javascript:cal.showCalendar('REMINDERDATE__POSITION__', 'document.frm.REMINDERDATE');\">";
divString += "<img src=\"/jsp/applications/images/buttons/calendar.gif\" border=\"0\"></a></td>";
divString += "<td><%=writeTime2(sess, task, "REMINDERTIME")%>";
divString += "</td></tr>";
break;
}

divString += "</table>";
writeLayer("this", "divRem", divString);

}


</script>


<title><%= (id > -1 ? "Edit " + task.getName(): "New Task") %></title>

</head>

<body onload="init();">

<table width="100%"><tr><td class="header">
<%= (id > -1 ? "Edit " + task.getName(): "New Task") %>
</td></tr></table>

<form name="frm" action="taskEditor.jsp" onsubmit="return false;" method="POST">

<input type="hidden" name="id" value="<%=id%>">
<input type="hidden" name="workgroupId" value="<%=workgroup.getId()%>">
<input type="hidden" name="parentId" value="<%=parentId%>">
<input type="hidden" name="postback" value="true">
<% if(!refreshOnClose) { %>
<input type="hidden" name="norefresh" value="true">
<% } %>


<div class="tab-pane" id="tabstrip">
<script type="text/javascript">
tabPane = new WebFXTabPane( document.getElementById( "tabstrip" ), false );
</script>

<div id="main-tab" class="tab-page">
<h2 class="tab">Task</h2>
<script type="text/javascript">
tabPane.addTabPage(document.getElementById("main-tab"));
</script>

<table style="width:400px;" class="portal">
<tr>
<th width="20%" class="required">Task Name:</th>
<td style="border: solid #999999 1px; ">
<input name="taskname" size="50" type="text" value="<%=taskName%>"></td>
</tr>
<% if (id > -1) { %>
<tr>
<th width="20%">Creator:</th>
<td style="border: solid #999999 1px; ">
<%=task.getCreator().getFirstName() + " " + task.getCreator().getLastName() +" - "+
((task.getCreator().getUserRole()==null)? " ":task.getCreator().getUserRole().getName())%></td>
<% } %>
</tr>
<tr>
<th width="20%">Description:</th>
<td style="border: solid #999999 1px; ">
<textarea name="taskdescription" cols="55" rows="4"><%=taskDescription%></textarea>
</td>
</tr>
<tr>
<th width="20%">Comments:</th>
<td style="border: solid #999999 1px; ">
<textarea name="taskcomments" cols="55" rows="4"><%=taskComments%></textarea>
</td>
</tr>
<tr>
<th width="20%">Start Date/Time:</th>
<td style="border: solid #999999 1px; ">
<% writeDate(sess, out, task, "start"); %>
&nbsp; &nbsp;
<% writeTime(sess, out, task, "start"); %>
</td>
</tr>
<tr>
<th width="20%" class="required">Due Date/Time:</th>
<td style="border: solid #999999 1px; ">
<% writeDate(sess, out, task, "end"); %>
&nbsp; &nbsp;
<% writeTime(sess, out, task, "end"); %>
</td>
</tr>
<tr>
<th width="20%">Reminder Time:</th>
<td style="border: solid #999999 1px; ">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<input type="radio" name="REMINDERTYPE" value="RELATIVE" onClick="changeReminder(this.value);">
Relative
<br>
<input type="radio" name="REMINDERTYPE" value="EXACT" onClick="changeReminder(this.value);">
Exact Date
</td>
<td><div id="divRem"></div></td>
</tr>
</table>
</td>
</tr>
<tr>
<th width="20%">Percent Complete:</th>
<td style="border: solid #999999 1px; ">
<% writePercentComplete(sess, out, task); %>
</td>
</tr>

<% if (!isPersonalDesktop) { %>
<tr>
<th width="20%">Assignees:</th>
<td style="border: solid #999999 1px; ">
<table>
<tr>
<td valign="top">
Available Users:
<input type="hidden" name="user_id" value="">
<input type="hidden" name="add_remove_id" value="">

<select name="avail_users" size="4" multiple style="width:165px;">
<% writeAssignees(out, task, workgroup, true); %>
</select>
<div style="font-weight: bold;">* [currently online]</div>
</td>
<td valign="middle">
<input type="button" value="&gt;&gt;" onclick="moveSelectedOptions(document.frm.avail_users, document.frm.selected_users, true);">
<br>
<input type="button" value="&lt;&lt;" onclick="moveSelectedOptions(document.frm.selected_users, document.frm.avail_users, true);">
</td>
<td valign="top">
Selected Users:
<select name="selected_users" size="4" multiple style="width:165px;">
<% writeAssignees(out, task, workgroup, false); %>
</select>
</td>
</tr>
</table>
</td>
<tr>
<th width="20%">Roles:</th>
<td style="border: solid #999999 1px; ">
<table>
<tr>
<td valign="top">
Available Roles:
<input type="hidden" name="role_id" value="">
<input type="hidden" name="role_add_remove_id" value="">

<select name="avail_roles" size="4" multiple style="width:165px;">
<% writeRoles(out, task, app, workgroup, true); %>
</select>
</td>
<td valign="middle">
<input type="button" value="&gt;&gt;" onclick="moveSelectedOptions(document.frm.avail_roles, document.frm.selected_roles, true);">
<br>
<input type="button" value="&lt;&lt;" onclick="moveSelectedOptions(document.frm.selected_roles, document.frm.avail_roles, true);">
</td>
<td valign="top">
Selected Roles:
<select name="selected_roles" size="4" multiple style="width:165px;">
<% writeRoles(out, task, app, workgroup, false); %>
</select>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<th width="20%">Email Addresses:</th>
<td style="border: solid #999999 1px; ">
<table>

<tr>
<td>new email address:</td>
<td>
<input type="hidden" name="email_addresses" value="">

<input type="text" name="email_address" size="20">
<input type="button" value="Add" onclick="addEmail();">
</td>

<tr>
<td>selected email addresses:</td>
<td rowspan="2">
<select name="selected_emails" size="3" multiple style="width:200px;">
<% writeEmails(out, task); %>
</select>
</td>
</tr>

<tr>
<td style="text-align:right">
<input type="button" value="Remove" onclick="removeEmail();">
</td>
</tr>
</table>
</td>
</tr>

<% } // for tasks in a Workgroup, not your personal portal %>

</table>

</div>

<% if (taskCustomFieldList.size() > 0) { %>
<div id="customField-tab" class="tab-page">
<h2 class="tab">Custom</h2>
<script type="text/javascript">
tabPane.addTabPage(document.getElementById("customField-tab"));
</script>

<p class="subheader">Custom Fields </p>
<table style="width:400px;" class="portal">
<% writeCustomFields(sess, out, task, app); %>
</table>

</div>
<% } // check for taskCustomFieldList.size() > 0 %>


<div id="recur-tab" class="tab-page">
<h2 class="tab">Recurrence</h2>
<script type="text/javascript">
tabPane.addTabPage(document.getElementById("recur-tab"));
</script>

<input type="hidden" name="__BYDAY" value="<%=BYDAY%>">

<p class="subheader">What kind of recurrence?</p>

<table class="blank">
<tr>

<td valign="top">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="radio" name="FREQ" value="NONE" onClick="changeRecurrence(this.value); "></td>
<td class="copy">&nbsp;&nbsp;No Recurrence</td>
</tr>
<tr>
<td><input type="radio" name="FREQ" value="DAILY" onClick="changeRecurrence(this.value); "></td>
<td class="copy">&nbsp;&nbsp;Daily</td>
</tr>
<tr>
<td><input type="radio" name="FREQ" value="WEEKLY" onClick="changeRecurrence(this.value); "></td>
<td class="copy">&nbsp;&nbsp;Weekly</td>
</tr>
<tr>
<td><input type="radio" name="FREQ" value="MONTHLY" onClick="changeRecurrence(this.value); "></td>
<td class="copy">&nbsp;&nbsp;Monthly</td>
</tr>
<tr>
<td><input type="radio" name="FREQ" value="YEARLY" onClick="changeRecurrence(this.value); "></td>
<td class="copy">&nbsp;&nbsp;Yearly</td>
</tr>
</table>
</td>

<td style="width: 30px;">&nbsp;</td>

<td valign="top">
<div id="divRec">
</div>
</td>
</tr>
</table>

<p class="instructions">Continue until:</p>
<div id="divRange" style="width: 300px;">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="radio" name="__END_OPTION__" value="NO_END_DATE"></td>
<td class="copy">&nbsp;&nbsp;No end date</td>
</tr>
<tr>
<td><input type="radio" name="__END_OPTION__" value="END_UNTIL"></td>
<td class="copy">&nbsp;&nbsp;<input type="text" name="UNTIL" size="7"><a id="endDate__POSITION__" style="cursor: hand;" onclick="javascript:cal.showCalendar('endDate__POSITION__', 'document.frm.UNTIL');"><img src="/jsp/applications/images/buttons/calendar.gif" border="0"></a></td>
<tr>
</table>
</div>


</div>

<% if (!isPersonalDesktop) { %>
<div id="options-tab" class="tab-page">
<h2 class="tab">Options</h2>
<script type="text/javascript">
tabPane.addTabPage(document.getElementById("options-tab"));
</script>

<p class="subheader">Options</p>
<table class="clear">
<tr>
<td>
<div style="font-weight:bold">When should the task be marked as complete?</div>
<input type="radio" name="taskcompletion" value="0" <%= taskCompletion==0? "CHECKED":""%> > When any assigned user has marked it as complete
<br>

<input type="radio" name="taskcompletion" value="1" <%= taskCompletion==1? "CHECKED":""%>> When each individual assigned user has marked it as complete

</td>
</tr>
<tr>
<td>
<div style="font-weight:bold">Who should be able to modify or delete this task?</div>
<input type="radio" name="taskeditprivate" value="0" <%= taskEditPrivate==0? "CHECKED":""%> > All users assigned to the task
<br>

<input type="radio" name="taskeditprivate" value="1" <%= taskEditPrivate==1? "CHECKED":""%>> Only the task creator
</td>
</td>
</tr>
</table>
</div>


<div id="forms-tab" class="tab-page">
<h2 class="tab">Forms</h2>
<script type="text/javascript">
tabPane.addTabPage(document.getElementById("forms-tab"));
</script>

<div class="subheader">Mapped forms</div>
<table style="width: 350px;">
<tr>
<td valign="top">
Available Forms:
<input type="hidden" name="form_id" value="">
<input type="hidden" name="form_add_remove_id" value="">

<select name="avail_forms" size="8" multiple style="width:150px;">
<% writeForms(out, task, workgroup, true); %>
</select>
</td>
<td valign="middle">
<input type="button" value="&gt;&gt;" onclick="moveSelectedOptions(document.frm.avail_forms, document.frm.selected_forms, true);">
<br>
<input type="button" value="&lt;&lt;" onclick="moveSelectedOptions(document.frm.selected_forms, document.frm.avail_forms, true);">
</td>
<td valign="top">
Selected Forms:
<select name="selected_forms" size="8" multiple style="width:150px;">
<% writeForms(out, task, workgroup, false); %>
</select>
</td>
</tr>
</table>

<% if (id > -1) { %>

<p class="subheader">Form History</p>
<table style="width: 400px;" class="portal">
<tr>
<th>Name</th>
<th>History</th>
</tr>
<% showForms(out, task); %>
</table>
<% } %>

</div>

<% } // don't Options or forms show on desktop %>


<% if (id > -1) { %>

<div id="files-tab" class="tab-page">
<h2 class="tab">Files</h2>
<script type="text/javascript">
tabPane.addTabPage(document.getElementById("files-tab"));
</script>

<table width=400px>
<tr>
<td><p class="subHeader">Files:</p></td>
<td style="text-align: right;" width="1%"><%= (task.canUserEdit(u) ? PageFormatter.generateButton("Add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;", "javascript:popFileWizard();") : "")%></td>
</tr>
</table>

<table style="width:400px" class="portal">
<tr>
<th>Name</th>
<th>Description</th>
<th>Size</th>
<th style="text-align: right;" width="1%">Action</th>
</tr>
<% writeFiles(out, task, u); %>
</table>

</div>

<% } %>

<br>

<table>
<tr>
<td>
<%=PageFormatter.generateButton(id > -1 ? "Update" : "Save", "javascript:submitForm();")%>
</td>
<td>
<%=PageFormatter.generateButton("Cancel", "javascript:window.close();")%>
</td>
</tr>
</table>

</form>

</body>
</html>
 
As I suspected, it looks like much of your tab functionality is handled in Javascript:
Code:
<div class="tab-pane" id="tabstrip">
<script type="text/javascript">
[red]tabPane = new WebFXTabPane( document.getElementById( "tabstrip" ), false );[/red]
</script>

<div id="main-tab" class="tab-page">
<h2 class="tab">Task</h2>
<script type="text/javascript">
[red]tabPane.addTabPage(document.getElementById("main-tab"));[/red]
</script>
If you want to persist with this approach (I'd be looking for a less script-heavy way of doing whatever it is myself), there's way too much going on in this page to find a solution.

Try to write a minimal test page, ideally a flat HTML page rather than a JSP one, that has just enough stuff in it to exhibit the behaviour you're trying to fix. You can either start one from scratch or do a "view source" on your misbehaving page and chop the irrelevant stuff out. This will serve two purposes: it helps you narrow down the cause of the problem, and it gives the people here less stuff to worry about too.

-- Chris Hunt
Webmaster & Tragedian
Extra Connections Ltd
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top