var ie = document.all && document.getElementById;
var ns = !document.all && document.getElementById;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

var ws;              // reference to the currently active workspace
var workspaces = [];      // array of workspace ints
var topiframename;        // the currently active workspace name
var currentTab;          // currently active tab
var iframeCreated;        // true if text builder's iframe has been created
var mainMenuOpened = false;    // is the main menu open?
var currentMenuHeader;      // currently active main menu header - used to keep the item highlighted while its menu is open
var draggingFile = false;    // is a file being dragged?
var editingWorkspace;      // is the current file being edited?
var highlightedToolBtns = [];  // toolbar buttons that are highlighted - used to unhighlight the buttons
var topworkspacename;      // frame name of current altworkspace
var savingWorkspaces;      // is user currently saving workspaces? - also can be an array storing all of the workspaces being saved
var projectName;
var openProjectName;
var runtutorial;
var nameworkspacefirst=0;

// PANEL RESIZING
var panelResizeBar;        // 
var panelResizeObject;      // 
var panelResizeVertical = true;  // 
var panelResizeOrigin = 0;    // 
var panelResizeTimer;      // 
var sidebarResize = false;    // is resizing the sidebar?
var sidebarResizeOrigin = 0;  // 

// GLOBAL OBJECTS
var globalObjects = [];      // array of objects locked onto all workspaces - [name, obj, workspace]
var globalObjectInc = 0;    // increment used in naming the global object groups
var globalObjectExcludes = [];  // array of global objects excluded from certain workspaces - [name, workspace]

// FILE TAB SCROLLING
var tabNewScrollX;        // new scrollLeft position for the tabbar
//var tabScrollSmoothInterval;  // interval to scroll the tabbar smoothly
var tabScrollDelayTimeout;    // timeout to sustain scroll on hold mouse down

// TIMERS AND INTERVALS
var centerWindowTimer;      // timer used to center window
var workspaceSizeTimer;      // timer used in resizing the workspace

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// this path controls all of the image links for the entire builder
var imagepath = '/images';

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

var templateselected;
var temppictureint = 0;
var colorpictureint = 0;
var colorint = 5;
var setcolorint;
var listoftemps = [];
var listofcolors = [];
var basicsTutorial;

function runStartTutorial() {
  frames.fileSelector.projectName="TUTORIAL";
  if (!projectName) {
    projectName="TUTORIAL";
  }
  helpInt=setInterval("if (frames[topworkspacename].altloaded) { clearInterval(helpInt);openWorkspace('TUTORIAL/basics.html'); }",10);
}

function nextStepInTutorial(num) {
  //alert(frames[topworkspacename].document.getElementById("workspace").childNodes.length);
  if (num==0) {
    basicsTutorial=num;
    openWorkspace(projectName+"/basics.html");
  }else{
    basicsTutorial=num;
    openWorkspace(projectName+"/basics"+num+".html");
  }
}

function checkFileSave(how) {
  if (projectName=="TUTORIAL") {
    alert("You can not save any of the help files");
  }else if (user_name=="demo") {
    alert("You can not save while in demo mode");
  }else{
    open_window(ws.document.getElementById('saveworkarea'));

    if (how && how == 'saveas') {
      ws.document.getElementById("saveTitle").innerHTML="Save this page as ...<br><form style=margin:0px onsubmit='save_page();return false;'><table><tr><td>"+projectName+"/</td><td><input type=text id=saveas size=25></td></tr></table></form>";
      ws.document.getElementById("onePageSave").value="Save As";
      ws.document.getElementById("allPagesSave").style.display="none";
      ws.document.getElementById("saveas").value = ws.workspacename.match(/([^\/]+)$/)[1];
    } else if (workspaces.length==1) {
      ws.document.getElementById("saveTitle").innerHTML="Are you sure you would like to save this page?";
      ws.document.getElementById("onePageSave").value="Save";
      ws.document.getElementById("allPagesSave").style.display="none";
    }else{
      ws.document.getElementById("saveTitle").innerHTML="Would you like to save only the current page, or all open pages?";
      ws.document.getElementById("onePageSave").value="Save this page only";
      ws.document.getElementById("allPagesSave").style.display="block";
    }

    centerWindow();
    ws.panelSource();
  }
}

for (i = 1; i < 21; i++)
{
  listoftemps[temppictureint]="<td><img src='"+imagepath+"/thumbs/template"+i+".jpg' name='template"+i+"' style='border-right:#666 1px solid;border-left:#FFF 1px solid;border-top:#FFF 1px solid;border-bottom:#FFF 1px solid' onMouseOver='showimageborder(event);' onMouseOut='hideimageborder(event);' onClick='settemppreview(event)'>";
  temppictureint++;
}

function choosecatagory() {
  if (document.tempcatagory.tempcatoption.value=='business') {
    document.getElementById('catagory').style.textAlign='left';
    document.getElementById('catagory').innerHTML = '<table cellspacing=0 cellpadding=0>' + listoftemps.join('') + '</table>';
  }else{
    document.getElementById('color').style.top='166px';
    document.getElementById('color').style.height='1px';
    document.getElementById('choosetemp').style.display='none';
    colorint=5;
    document.getElementById('templatepreview').innerHTML='Preview';
    document.getElementById('catagory').style.textAlign='center';
    document.getElementById('catagory').innerHTML='Backgrounds';
    templateselected = false;
  }
}

function addMetaTags() {
  if (document.getElementById("metaDescription").value) {
    ws.document.getElementById("metaDescription").value = document.getElementById("metaDescription").value;
  }else{
    ws.document.getElementById("metaDescription").value = "";
  }
  if (document.getElementById("metaKeywords").value) {
    ws.document.getElementById("metaKeywords").value = document.getElementById("metaKeywords").value;
  }else{
    ws.document.getElementById("metaKeywords").value = "";
  }
}

function metaFields() {
  if (ws.document.getElementById("metaDescription").value) {
    document.getElementById("metaDescription").value = ws.document.getElementById("metaDescription").value;
  }else{
    document.getElementById("metaDescription").value = "";
  }
  if (ws.document.getElementById("metaKeywords").value) {
    document.getElementById("metaKeywords").value = ws.document.getElementById("metaKeywords").value;
  }else{
    document.getElementById("metaKeywords").value = "";
  }
}

function showimageborder(e)
{
  obj = (ie) ? event.srcElement : e.target;
  obj.style.border = '#F00 1px solid';
}

function hideimageborder(e)
{
  obj = (ie) ? event.srcElement.style : e.target.style;
  obj.borderLeft = '#FFF 1px solid';
  obj.borderTop = '#FFF 1px solid';
  obj.borderBottom = '#FFF 1px solid';
  obj.borderRight = '#666 1px solid';
}

function settemppreview(e) {
  if (ie) {
    var num=event.srcElement.name.replace(/template(\d+)/, "\$1");
  }else{
    var num=e.target.name.replace(/template(\d+)/, "\$1");
  }
  document.getElementById('templatepreview').innerHTML="<img src='"+imagepath+"/thumbs/preview"+num+".jpg' name='preview"+num+"'>";
  document.getElementById('choosetemp').style.display='block';
  templateselected = num;
}

function selectTemplate(num) {
  document.getElementById('starttemplate').style.display='none';
  document.getElementById('choosetemp').style.display='none';
  createworkspacetab();
  frames[topworkspacename].createworkspace(5);
}

////////////////////////////////////

function chooseButton(e,obj)
{
  var ele = (ie) ? event.srcElement : e.target;
  ele.style.border = (obj) ? 'rgb(150,150,150) 2px outset' : 'rgb(200,200,200) 2px solid';
}

function setChoose(what)
{
  document.chooseoption.hidden.value=what;
  centerWindow();
  chooseOption(document.chooseoption.hidden.value)
}

function chooseOption(startoption)
{
  if (startoption=='new') {
    if (user_name=="demo") {
      alert("You are unable to start with a blank page in demo mode. You must choose \"Start Website from Background\" or \"Open Existing File\" and choose the file provided");
      return false;
    }
    //document.chooseoption.action='workspace';
    newworkspace();
    templateselected=undefined;
    createworkspacetab();
    frames[topworkspacename].createworkspace(5);
    close_window(document.getElementById('startbuilder'));
  }else if (startoption=='open') {
    //top.ws=undefined;
    openworkspace=1;
    templateselected=undefined;
    close_window(document.getElementById('startbuilder'));
    open_window(document.getElementById('newWorkspace'));
    frames.openFileIframe.location.replace(top.script_name + "/filetree?viewhtmonly=true&projectname="+projectName);
  }else if (startoption=='template') {
    openworkspace=undefined;
    startnew=undefined;
    document.getElementById('startbuilder').style.display='none';
    document.getElementById('starttemplate').style.display='block';
    choosecatagory();
    if (templateselected) document.getElementById('choosetemp').style.display='block';
  }
  centerWindow();
}

function checkFilesInProject() {
  var r=1;
  for (i=0;i<frames.fileSelector.document.getElementById("folderList").rows.length;i++) {
    var ele=frames.fileSelector.document.getElementById("folderList").rows[i].cells[1].childNodes[0].innerHTML;
    if (ele && ele.match(/^<img.*?>\s\w+$/i)) {
      ele=ele.replace(/^<img.*?>\s(\w+)$/i,"$1");
      if (ele==projectName) {
        if (frames.fileSelector.document.getElementById("dir"+r)) {
          open_window(top.document.getElementById("startByOpen"));
        }else{
          close_window(top.document.getElementById("startByOpen"));
        }
      }
      r++;
    }
  }
  if (workspaces.length == 0)
    open_window(document.getElementById('startbuilder'));
  close_window(document.getElementById('starttemplate'));
  close_window(document.getElementById('choosetemp'));
  centerWindow();
}
var filetreeint;
function goToStart() {
  filetreeint=setInterval("if (frames.fileSelector.filetreeloaded) { clearInterval(filetreeint);checkFilesInProject(); } ",100);
}

////////////////////////////////////

function addtotree(what)
{
  //var file = document.getElementById;
  //var tree = document.getElementById('fileSelector');

  if (what == 'image')
  {
    if (document.getElementById('addimagetotree').style.display == 'block') {
      //tree.style.top = '0px';
      document.getElementById('addimagetotree').style.display = 'none';
      for (i = 0; i < 10; i++) document.getElementById('uploadimage' + i).value = '';
    }else{
      document.getElementById('addimagetotree').style.display = 'block';
      document.getElementById('deleteobject').style.display = 'none';
      //tree.style.top = file('addimagetotree').offsetHeight + 5;
    }
  }
  else if (what == 'delete')
  {
    if (document.getElementById('deleteobject').style.display == 'block') {
      //tree.style.top = '0px';
      document.getElementById('deleteobject').style.display = 'none';
    } else {
      document.getElementById('deleteobject').style.display = 'block';
      document.getElementById('addimagetotree').style.display = 'none';
      //tree.style.top = file('deleteobject').offsetHeight + 5;
      for (i = 0; i < 10; i++) document.getElementById('uploadimage' + i).value = '';
    }
  }
  centerWindow();
}
function closePageFader() {
  document.getElementById('pageFader').innerHTML = "";
  close_window(document.getElementById('pageFader'));
}

function closefiletree()
{
  opened = (document.getElementById('fileTreeDiv').style.display != 'none');
  document.getElementById('fileTreeDiv').style.display = (opened) ? 'none' : 'block';
  document.getElementById('sidebar_sep').style.cursor = (opened) ? 'default' : 'e-resize';
  document.getElementById('imgLoader').style.visibility = 'hidden';
  onResize();
}

function closehelpbar()
{
  opened = (document.getElementById('helpbariframe').style.display == 'block');
  document.getElementById('helpbariframe').style.display = (opened) ? 'none' : 'block';
  document.getElementById('helpbar_sep').style.cursor = (opened) ? 'default' : 'e-resize';
  onResize();
}

function closebottom(obj)
{
  opened = (obj.firstChild.src.indexOf('down') >= 0);
  obj.firstChild.src = (opened) ? imagepath + '/panelup.gif' : imagepath + '/paneldown.gif';
  opened = !opened;

  if (closeObj = document.getElementById(obj.getAttribute('close')))
  {
    if (closeObj.id == 'informationPanelDiv' && !ie)
    {
      if (!opened)
      {
        closeObj.setAttribute('oldHeight', closeObj.offsetHeight);
        closeObj.style.display = 'none';
        closeObj.parentNode.style.height = '0px';
      }
      else
      {
        closeObj.style.display = 'block';
        closeObj.parentNode.style.height = (closeObj.getAttribute('oldHeight') - 10) + 'px';
      }
      return;
    }

    if (!ie)
    {
      closeObj.innerHTML = (opened) ? '---' : '';
      if (!opened)
      {
        closeObj.setAttribute('oldHeight', closeObj.offsetHeight);
        closeObj.style.height = '0';
      }
      else closeObj.style.height = closeObj.getAttribute('oldHeight') + 'px';
    }
    else closeObj.style.display = (opened) ? 'block' : 'none';
  }
}

function highlightitem(evt, num, numtwo)
{
  obj = (ie) ? evt.srcElement : evt.target;

  if (num) {
    if (currentMenuHeader == obj && obj.className == 'navitem')
      return;
    obj.style.background = (numtwo) ? '#FFF' : '#EEE';
    obj.style.color = 'black';
  } else {
    obj.style.background = 'highlight';
    obj.style.color = 'highlighttext';
  }
}

function showmenu(obj, which)
{
  obj.style.left = getX(document.getElementById(which));
  obj.style.top = getY(document.getElementById(which)) + document.getElementById(which).offsetHeight + 1;
  obj.style.visibility = 'visible';
  mainMenuOpened = true;
}

function hidemenu(num, what)
{
  mainMenuOpened = false;
  if (currentMenuHeader) {
    currentMenuHeader.style.background = '#EEE';
    currentMenuHeader.style.color = 'black';
    currentMenuHeader = null;
  }
  menus = ['file', 'edit', 'view', 'insert', 'help', 'tab', 'newsub', 'closesub'];
  for (i in menus) document.getElementById(menus[i] + 'menu').style.visibility = 'hidden';
  if (num == '1') {
    showmenu(document.getElementById(what+'menu'), what);
  }
}
function hidesubmenus() {
  var menus = ['newsub', 'closesub'];
  for (i in menus) document.getElementById(menus[i] + 'menu').style.visibility = 'hidden';
}

//##############################################################################################

var loadingnum = 1;
var loadint;

//script that runs the loading bar at the first.
function loadbar()
{
  if (loadingnum > 10) {
    document.getElementById('loadbar').style.backgroundColor = 'rgb(50,94,167)';
    clearInterval(loadint);
  } else {
    try
    {
      //document.getElementById('loadwindow').style.visibility = 'visible';
      obj = document.getElementById('load' + loadingnum++);
      obj.style.backgroundColor = 'rgb(50,94,167)';
    } catch (e) {}
  }
}

function returnback()
{
  for (i = 1; i <= 10; i++)
    document.getElementById('load' + i).style.backgroundColor = '#FFF';
  document.getElementById('loadbar').style.backgroundColor = '#FFF';
}

//##############################################################################################

// script for opening and closing all windows
function open_window(obj,num,i,which)
{
  if (typeof obj == 'string')
    obj = document.getElementById(obj);
  //try
  //{
    /*
    var topiframename = i;
    if (num == '1') {
      obj.style.width = '640';
      obj.style.height = '480';
      frames.workspacewindow.document.getElementById(topiframename).style.width = '640';
      frames.workspacewindow.document.getElementById(topiframename).style.height = '480';
      obj.style.display = 'block';
      document.getElementById('buttonbar').style.visibility = 'visible';
    }else if (num == '2') {
      obj.style.width = '800';
      obj.style.height = '600';
      frames.workspacewindow.document.getElementById(topiframename).style.width = '800';
      frames.workspacewindow.document.getElementById(topiframename).style.height = '600';
      obj.style.display = 'block';
      document.getElementById('buttonbar').style.visibility = 'visible';
    }else if (num == '3') {
      obj.style.width = '1024';
      obj.style.height = '768';
      frames.workspacewindow.document.getElementById(topiframename).style.width = '1024';
      frames.workspacewindow.document.getElementById(topiframename).style.height = '768';
      obj.style.display = 'block';
      document.getElementById('buttonbar').style.visibility = 'visible';
    }else if (num == '4') {
      obj.style.width = '1280';
      obj.style.height = '1024';
      frames.workspacewindow.document.getElementById(topiframename).style.width = '1280';
      frames.workspacewindow.document.getElementById(topiframename).style.height = '1024';
      obj.style.display = 'block';
      document.getElementById('buttonbar').style.visibility = 'visible';
    }else */if (num == '5') {
      //frames.workspacewindow.document.getElementById(topiframename).style.width = '100%';
      //frames.workspacewindow.document.getElementById(topiframename).style.height = '100%';
      obj.style.display = 'block';
      document.getElementById('buttonbar').style.visibility = 'visible';
    }else{
      if (obj) obj.style.display = 'block';

      /*
      if (window.parent) {
        var windowl = top.document.getElementById('maintd').offsetWidth/2;
        var windowt = top.document.getElementById('maintd').offsetHeight/2;
      }else{
        var windowl = document.getElementById('maintd').offsetWidth/2;
        var windowt = document.getElementById('maintd').offsetHeight/2;
      }

      var windoww = obj.offsetWidth/2;
      var windowh = obj.offsetHeight/2;

      windowl = windowl-windoww;
      windowt = windowt-windowh;

      pobj = obj;
      while (pobj.tagName != 'BODY')
        pobj = pobj.parentNode;
      left = (top.document.body.clientWidth / 2) - (obj.offsetWidth / 2);
      if (top.document.getElementById('sidebar').style.display != 'none')
        left -= top.document.getElementById('sidebar').offsetWidth / 2;
      obj.style.left = left + 'px';
      obj.style.top = (top.document.body.clientHeight / 2) - obj.offsetHeight + 'px';
      if (obj.offsetTop < 0) obj.style.top = '0px';
      if (obj.id == 'namenewworkspace') obj.style.top = '200px';
      */
    }
    if (which == 'new') {
      loadingnum = 1;
      open_window(document.getElementById('loadwindow'));
      loadint = setInterval('loadbar()',400);
      //if (openworkspace) {
        //if (projectfiles[0]) {
          //loadingTimer = setInterval("if(ws.document.getElementById('namenewworkspace')){close_window('loadwindow');returnback();clearInterval(loadint);clearInterval(loadingTimer);}", 10);
        //} else {
          //loadingTimer = setInterval("if(ws.document.getElementById('namenewworkspace')){close_window('loadwindow');returnback();clearInterval(loadint);clearInterval(loadingTimer);}", 10);
        //}
      //}else{
        //loadingTimer = setInterval("if(ws && ws.document.getElementById('namenewworkspace')){clearInterval(loadingTimer);open_window(ws.document.getElementById('namenewworkspace'));centerWindow();ws.document.getElementById('namenewworkspacefield').focus();close_window('loadwindow');clearInterval(loadint);returnback();/***ws.document.namenewworkspaceform.submit()***/}", 10)
      //}
    }
    if (which == 'template') {
      loadingnum = 1;
      open_window(document.getElementById('loadwindow'));
      loadint = setInterval('loadbar()',400);
      setTimeout("close_window('loadwindow');returnback();clearInterval(loadint);", 5500);
    }
    if (which == 'open') {
      loadingnum = 1;
      open_window(document.getElementById('loadwindow'));
      loadint = setInterval('loadbar()',400);
      setTimeout("close_window('loadwindow');returnback();", 5500);
    }
    if (which == 'addtotable') {
      obj.style.left = 0;
      obj.style.top = 0;
      obj.style.width = top.document.getElementById(topiframename).style.width;
      obj.style.height = top.document.getElementById(topiframename).style.height;    
    }
    if (obj && obj.id == 'editworkspace')
    {
      document.getElementById('minipalette').style.backgroundColor = ws.document.body.style.backgroundColor;
      document.getElementById('editpagetitle').value = ws.pagetitle;
      document.getElementById('workspaceWidth').value = (ie) ? ws.document.body.clientWidth : frames[topworkspacename].document.getElementById(topiframename).offsetWidth - 2;
      var prop = top.workspace_prop();
      document.getElementById('snap_x').checked = prop['snap_x'];
      document.getElementById('snap_y').checked = prop['snap_y'];
      document.getElementById('grid_x').value   = prop['grid_x'];
      document.getElementById('grid_y').value   = prop['grid_y'];
    }
    if (obj && obj.id == 'viewimages') {
      ws.document.getElementById('viewimages').setAttribute('mode', '');
    }
  //}
  //catch (e) {}
}

function close_window(obj,frame)
{
  if (obj == 'tablebuilder') {
    document.getElementById('tablepreviewbuilder').innerHTML = '';
    document.getElementById('edittablecover').style.width = '1px';
    document.getElementById('edittablecover').style.height = '1px';
  }
  if (typeof obj == 'string') obj = document.getElementById(obj);
  if (frame == 'formbuilder') close_window('formmaintitle');
  try
  {
    if (obj.style.display == 'none') return;
    obj.style.display = 'none';
  }
  catch (e) {}

  if (frame == 'reset')
  {
    ws.document.linkform.linktext.value = '';
    ws.document.linkform.setunderline.unchecked;
    ws.document.linkform.settarget.unchecked;
    close_window('addlinkwindow');
  }
  if (frame == 'formbuilder')
  {
    close_window('listofforms');
    close_window('formmaintitle');
    if (createeditinc) {
      close_window('editwindow'+createeditinc);
      close_window('maineditwindow'+createeditinc);
      close_window('mainformpreview'+createeditinc);
    }
    close_window('propwindow');
  }
}

//##############################################################################################

function showsourcecode()
{
  var pattern = /(.*?)<\/xmp>(\n)<xmp>(.*?)/gim;
  ws.line2 = ws.line2.replace(pattern, '$1$2$3');
  document.getElementById('panel3').innerHTML = ws.line2;
  //frames.workspacewindow.document.getElementById('source').firstChild.innerHTML = ws.line2;
}

//##############################################################################################

// Script for the workspace panels
function setpanel3()
{
  sourcePanel = document.getElementById('panel3');
  sourcePanel.style.left = getX('workspacewindow'+topworkspacenum) + (ie - 0) + 'px';
  sourcePanel.style.top = getY('workspacewindow'+topworkspacenum) + (ie - 0) + 'px';
  workspaceWindow = document.getElementById('workspacewindow'+topworkspacenum);
  sourcePanel.style.width = (workspaceWindow.offsetWidth - ((!ie) ? 25 : 0)) + 'px';
  sourcePanel.style.height = (workspaceWindow.offsetHeight - ((!ie) ? 10 : 0)) + 'px';
  setTimeout("if (document.getElementById('panel3').style.display == 'block') setpanel3()", 50);
}

//##############################################################################################

// Script for the save confirmation
function savehtm()
{
  document.iframeworkspace.saveworkspace.style.visibility = 'visible';
}

//##############################################################################################

// script for controlling the different workspaces at one time.
increment = 0;
htm = '';
titletab = [];
title = [];
var loadwin;
var loadtext;
loaditem = [];
var loadHelp;
var tutUsed;
function openHelpFiles() {
  frames.fileSelector.projectName="TUTORIAL";
  if (!projectName) {
    projectName="TUTORIAL";
  }
  for (i=0;i<document.getElementById("changeProjects").length;i++) {
    if (document.getElementById("changeProjects")[i].innerHTML=="TUTORIAL") {tutUsed=1;break;}
  }
  if (!tutUsed || document.getElementById('projectTabs').style.visibility=='hidden') {
    openWorkspace('TUTORIAL/General.htm')
    frames.fileSelector.projectName="TUTORIAL";
    projectName="TUTORIAL";
    document.getElementById('pageFader').style.display = 'block';
    document.getElementById('pageFader').innerHTML = "<table width=100% height=100%><td align=center style='font: bold 24px verdana,tahoma,arial; cursor: default'>Please wait while help files load...</table>";
    loadHelp="gen";
    tutUsed=undefined;
    scrollWorkspaceTabs();
  }else{
    alert("The help files are already open.\n\nUse the menu in the upper right hand corner of the screen to view the tutorial pages.");
  }
}
function openWorkspace(path, e) {
  if (!projectName) return alert('You must first select a project before you can open a file.');

  if (path) {
    if (path.match(/TUTORIAL\//i)) {
      close_window(document.getElementById("startbuilder"));
      close_window(document.getElementById("startproject"));
      editingWorkspace=undefined;
      runtutorial="true";
    }
  }


  // check if the file is already open
  for (i = 0; i < workspaces.length; i++) {
    wsnum = workspaces[i];
    if (!basicsTutorial) {
      if (path==projectName+"/"+document.getElementById("workspacetitletab"+wsnum).innerHTML) {
        unselectworkspaces();
        selectworkspace(wsnum);
        activateWorkspaceTab(document.getElementById('workspacetitletab' + wsnum));
        return;
      }
    }else{
      for (r=0;r<frames[topworkspacename].document.getElementById("workspace").childNodes.length;r++) {
        var workid=frames[topworkspacename].document.getElementById("workspace").childNodes[r].id;
        var worknum=workid.replace(/\w+(\d+)/,"$1");
        if (worknum==basicsTutorial) {
          unselectworkspaces();
          selectworkspace(basicsTutorial);
          return;
        }
      }
    }
  }

  // open the file
  wswin = document.getElementById(topworkspacename);
  if (e && e.clientX >= getX(wswin) && e.clientX <= getX(wswin) + wswin.offsetWidth &&
    e.clientY >= getY(wswin) && e.clientY <= getY(wswin) + wswin.offsetHeight) {
    document.getElementById('openReplaceConfirmWindow').setAttribute('path', frames.fileSelector.objectpath);
    if (topiframename) {
      document.getElementById('openReplaceConfirmWindow').style.display = 'block';
      document.getElementById('chkOpenReplace_Open').focus();
    }else{
      openworkspace = path;
      createworkspacetab(5);
      frames[topworkspacename].createworkspace(5);
    }
    close_window(document.getElementById("startbuilder"));
    centerWindow();
  } else if (!e || e == true) {
    if (!loadHelp) {
      document.getElementById('pageFader').style.display = 'block';
      document.getElementById('pageFader').innerHTML = "<table width=100% height=100%><td align=center style='font: bold 24px verdana,tahoma,arial; cursor: default'>Please wait for file to load...</table>";
    }
    var projectExists;
    var projectOpen=0;
    if (!projectName || (projectName!=frames.fileSelector.projectName&&projectName!=frames.openFileIframe.projectName)) {
      for (i=0;i<document.getElementById("changeProjects").length;i++) {
        if (frames.fileSelector.projectName==document.getElementById("changeProjects")[i].innerHTML) {
          projectOpen=1;
          break;
        }
      }
      if (projectOpen==0) {
        hideProjects();
        createworkspacetabbar();
        createAltWorkspace();
        centerWindow();
      }
    }
    if (path) {
      openworkspace = path;
    }else{
      openworkspace = "";
    }
    if (e == true) { closeworkspace(); }
    if (projectOpen==0) {
      if (!basicsTutorial) {
        createworkspacetab(5);
      }
    }
    if (projectName==frames.fileSelector.projectName) {
      frames[topworkspacename].createworkspace(5);
    }else if (projectName==frames.openFileIframe.projectName) {
      setTimeout('frames[topworkspacename].createworkspace(5)', 500);
      frames.openFileIframe.projectName=undefined;
    }else{
      if (path) {
        projectName=frames.fileSelector.projectName;
      }else{
        if (document.projectFormName.newProjectName.value) {
          projectName=newProjectName;
          frames.fileSelector.document.reloadForm.newprojectname.value=newProjectName;
          frames.fileSelector.document.reloadForm.submit();
        }else if (document.projectFormName.openProjectName.value) {
          projectName=openProjectName;
        }
      }
      for (r=0;r<document.getElementById('changeProjects').length;r++)
      {
        //alert(document.getElementById('changeProjects').innerHTML);
        var obj=document.getElementById('changeProjects')[r].innerHTML;
        if (projectName==obj) {
          var num=document.getElementById('changeProjects')[r].value;
          changeProjects(num);

/*******************************************************************************/
          var found;
          // check if the file is already open... again
          for (i = 0; i < workspaces.length; i++) {
            wsnum = workspaces[i];
            if (path==projectName+"/"+document.getElementById("workspacetitletab"+wsnum).innerHTML) {
              unselectworkspaces();
              selectworkspace(wsnum);
              activateWorkspaceTab(document.getElementById('workspacetitletab' + wsnum));
              found = true;
              projectExists=1;
              closePageFader();
              break;
            }
          }
/********************************************************************************/
          if (!found) {
            //alert("not found");
            createworkspacetab(5);
            setTimeout('frames[topworkspacename].createworkspace(5)',100);
            document.getElementById('changeProjects').value=topworkspacenum;
            projectExists=1;
          }
          break;
        }
      }

      if (!projectExists) {
        document.getElementById('projectTabs').style.visibility='visible';
        if (runtutorial) {
          alert('You are opening the help files which will minimize any open project.\n\nYou can switch between any open project and the help files by using the menu in the upper right hand corner of the screen.');
        }else{
          alert('You are opening a file that exists within a different project which will minimize your current project. Use the menu in the upper right hand corner of your screen to switch between open projects.');
        }
        wsint=setInterval('if (frames.fileSelector.filetreeloaded) { checkFileTree();clearInterval(wsint) }', 10);
      }
    }
  }
  //frames.fileSelector.mouseUp();
  close_window('startbuilder');
  close_window('startproject');
  close_window('starttemplate');

  runtutorial=undefined;
  return true;
}

function checkFileTree() {
  var r=1;
  for (i=0;i<frames.fileSelector.document.getElementById("folderList").rows.length;i++) {
    var ele=frames.fileSelector.document.getElementById("folderList").rows[i].cells[1].childNodes[0].innerHTML;
    if (ele && ele.match(/^<img.*?>\s\w+$/i)) {
      ele=ele.replace(/^<img.*?>\s(\w+)$/i,"$1");
      if (ele==projectName) {
        if (frames.fileSelector.document.getElementById("dir"+r)) {
          if (frames.fileSelector.document.getElementById("dir"+r).style.display=="none" || frames.fileSelector.document.getElementById("dir"+r).style.display=="") {
            frames.fileSelector.toggleFolder(r);
          }
        }
        frames.fileSelector.filetreeloaded=r;
      }
      r++;
    }
  }
  if (frames.fileSelector.filetreeloaded)
    setTimeout('frames[topworkspacename].createworkspace(5)', 100);

  if (ie) {
    var op=document.createElement("<option value='"+topworkspacenum+"' selected>");
  }else{
    var op=document.createElement('option');
    op.setAttribute('value',topworkspacenum);
  }
  var text=document.createTextNode(projectName);

  op.appendChild(text);
  document.getElementById('changeProjects').appendChild(op);
  document.getElementById('changeProjects').value=topworkspacenum;
}

var projects=0;
function createAltWorkspace()
{
  if (ie) {
    var workspace=document.createElement("<iframe src='"+top.script_name+"/altworkspace' id='workspacewindow"+projects+"' name='workspacewindow"+projects+"' class='workspace' frameborder='0'>");
  }else{
    var workspace=document.createElement('iframe');
    workspace.setAttribute('src',top.script_name+'/altworkspace');
    workspace.setAttribute('id','workspacewindow'+projects);
    workspace.setAttribute('name','workspacewindow'+projects);
    workspace.setAttribute('class','workspace');
    workspace.setAttribute('frameborder','0');
  }
  document.getElementById('workarea').appendChild(workspace);
  topworkspacename = 'workspacewindow' + projects;
  workspaces = [];
  globalObjects = [];
  globalObjectInc = 0;
  globalObjectExcludes = [];
  newprojectnum=projects;
  topworkspacenum = projects;
  projects++;
}
function createworkspacetabbar()
{
  if (ie) {
    var div=document.createElement("<div style='position:absolute;display:block;left:4px;top:34px;width:100%;height:28px;overflow:hidden' id=tabbox"+projects+">");
    var table=document.createElement("<table cellpadding=0 cellspacing=0 onmousedown='return false' style='cursor:default;visibility:hidden;margin-right:8px' id='tabbar"+projects+"' oncontextmenu=\"tabMenu = document.getElementById('tabmenu'); tabMenu.style.left = (event.clientX + tabMenu.offsetWidth > document.body.clientWidth) ? event.clientX - tabMenu.offsetWidth : event.clientX; tabMenu.style.top = event.clientY; tabMenu.style.visibility = 'visible'\">");
    var tbody=document.createElement('<tbody>');
    var tr=document.createElement("<tr id=tabboxtr"+projects+">");
    var td1=document.createElement('<td>');
    var td2=document.createElement('<td>');
    var img1=document.createElement("<img src='"+imagepath+"/tab_left1.jpg' onmousedown='if(editingWorkspace)return;top.unselectworkspaces(true);activateWorkspaceTab(this.parentNode.parentNode.cells[this.parentNode.cellIndex+1]);top.selectworkspace()'>");
    var img2=document.createElement("<img src='"+imagepath+"/tab_right1.jpg' onmousedown='if(editingWorkspace)return;top.unselectworkspaces(true);activateWorkspaceTab(this.parentNode.parentNode.cells[this.parentNode.cellIndex-1]);top.selectworkspace()'>");
    var div2=document.createElement("<div style='height: 28px'>");
  }else{
    var div=document.createElement('div');
      div.setAttribute("style","position:absolute;display:block;left:4px;top:33px;width:100%;height:28px;overflow:hidden");
      div.setAttribute("id","tabbox"+projects);
    var table=document.createElement("table");
      table.setAttribute("cellpadding","0");
      table.setAttribute("cellspacing","0");
      table.setAttribute("onmousedown","return false");
      table.setAttribute("style","cursor:default;visibility:hidden;margin-right:8px");
      table.setAttribute("id","tabbar"+projects);
      table.setAttribute("oncontextmenu","tabMenu = document.getElementById('tabmenu'); tabMenu.style.left = (event.clientX + tabMenu.offsetWidth > document.body.clientWidth) ? event.clientX - tabMenu.offsetWidth : event.clientX; tabMenu.style.top = event.clientY; tabMenu.style.visibility = 'visible'");
    var tbody=document.createElement("tbody");
    var tr=document.createElement("tr");
    var td1=document.createElement("td");
    var td2=document.createElement("td");
    var img1=document.createElement("img");
      img1.setAttribute("src",imagepath+"/tab_left1.jpg");
      img1.setAttribute("onmousedown","if(editingWorkspace)return;top.unselectworkspaces(true);activateWorkspaceTab(this.parentNode.parentNode.cells[this.parentNode.cellIndex+1]);top.selectworkspace()");
    var img2=document.createElement("img");
      img2.setAttribute("src",imagepath+"/tab_right1.jpg");
      img2.setAttribute("onmousedown","if(editingWorkspace)return;top.unselectworkspaces(true);activateWorkspaceTab(this.parentNode.parentNode.cells[this.parentNode.cellIndex-1]);top.selectworkspace()");
    var div2=document.createElement("div");
      div2.setAttribute("style","height:28px");
  }

  td1.appendChild(img1);
  td2.appendChild(img2);
  tr.appendChild(td1);
  tr.appendChild(td2);
  tbody.appendChild(tr);
  table.appendChild(tbody);
  div.appendChild(table);
  document.getElementById("mainmenutd").appendChild(div);

  tabbox = document.getElementById('tabbox'+projects);
  topworkspacebar=projects;
}

function hideProjects()
{
  //ws.hideeditbar();
  // switch out variables
  //topworkspacename="workspacewindow"+(projects-1);
  frames[topworkspacename].workspaces = workspaces;
  frames[topworkspacename].globalObjects = globalObjects;
  frames[topworkspacename].globalObjectInc = globalObjectInc;
  frames[topworkspacename].globalObjectExcludes = globalObjectExcludes;

  // hide tabbox and workspacewindow elements
  for (i=0;i<projects;i++) {
    if (document.getElementById("tabbox"+i) && document.getElementById("workspacewindow"+i)) {
      document.getElementById("tabbox"+i).style.display="none";
      document.getElementById("workspacewindow"+i).style.display="none";
    }
  }
}

function changeProjects(val) {
  for (i=0;i<document.getElementById("changeProjects").length;i++) {
    if (document.getElementById("changeProjects")[i].value==val) {
      var index=i;
      break;
    }
  }
  var r=1;
  for (i=0;i<frames.fileSelector.document.getElementById("folderList").rows.length;i++) {
    var ele=frames.fileSelector.document.getElementById("folderList").rows[i].cells[1].childNodes[0].innerHTML;
    if (ele && ele.match(/^<img.*?>\s\w+$/i)) {
      ele=ele.replace(/^<img.*?>\s(\w+)$/i,"$1");
      if (ele==document.getElementById("changeProjects")[index].innerHTML) {
        if (frames.fileSelector.document.getElementById("dir"+r)) {
          if (frames.fileSelector.document.getElementById("dir"+r).style.display=="none" || frames.fileSelector.document.getElementById("dir"+r).style.display=="") {
            frames.fileSelector.toggleFolder(r);
          }
        }
        frames.fileSelector.filetreeloaded=r;
      }
      r++;
    }
  }
  //if (!editingWorkspace) {
    hideProjects();
    //alert(document.getElementById("changeProjects")[val].innerHTML);
    //alert(val);
    document.getElementById("changeProjects").value=val;
    projectName=document.getElementById("changeProjects")[index].innerHTML;
    frames.fileSelector.document.reloadForm.projectname.value=projectName;
    //frames.fileSelector.document.reloadForm.submit();
    document.getElementById("tabbox"+val).style.display="block";
    document.getElementById("workspacewindow"+val).style.display="block";
    topworkspacebar=val;
    topworkspacenum=val;
    topworkspacename='workspacewindow' + topworkspacenum;
    //frames[topworkspacename].topiframename='iframeworkspace'+val;
    //alert(frames[topworkspacename].topiframename);
    if (!frames[topworkspacename].topiframename) {
      setChangeProjectsInt=setInterval("if (frames[topworkspacename].topiframename) {clearInterval(setChangeProjectsInt);changeProjects2()}",10);
    }else{
      selectnum = frames[topworkspacename].topiframename;
      selectnum = selectnum.replace(/.*?(\d+)/,"$1");
      selectnum = parseInt(selectnum);
      selectworkspace(selectnum);
      workspaces = frames[topworkspacename].workspaces;
      globalObjects = frames[topworkspacename].globalObjects;
      globalObjectInc = frames[topworkspacename].globalObjectInc;
      globalObjectExcludes = frames[topworkspacename].globalObjectExcludes;
      activateWorkspaceTab(document.getElementById("workspacetitletab"+selectnum));
      scrollWorkspaceTabs();
    }
  //}else{
    //document.getElementById('changeProjects').value=topworkspacenum;
  //}
  tabbox = document.getElementById('tabbox'+topworkspacebar);
  scrollWorkspaceTabs();    
  ws.hidemenu();
}

function changeProjects2() {
  selectnum = frames[topworkspacename].topiframename;
  selectnum = selectnum.replace(/.*?(\d+)/,"$1");
  selectnum = parseInt(selectnum);
  //alert("changeprojects2,"+selectnum);
  selectworkspace(selectnum);
  workspaces = frames[topworkspacename].workspaces;
  globalObjects = frames[topworkspacename].globalObjects;
  globalObjectInc = frames[topworkspacename].globalObjectInc;
  globalObjectExcludes = frames[topworkspacename].globalObjectExcludes;
  activateWorkspaceTab(document.getElementById("workspacetitletab"+selectnum));
  scrollWorkspaceTabs();
}
function alignProjects() {
  for (i=0;i<document.getElementById("changeProjects").length;i++) {
    document.getElementById("changeProjects")[i].value=i;
  }
  var r=0;
  for (i=0;i<document.getElementById('mainmenutd').childNodes.length;i++) {
    var boxid=document.getElementById('mainmenutd').childNodes[i].id;
    if (boxid) {
      if (boxid.match(/tabbox/i)) {
        document.getElementById('mainmenutd').childNodes[i].id="tabbox"+r;
        document.getElementById('mainmenutd').childNodes[i].childNodes[0].id="tabbar"+r;
        document.getElementById('mainmenutd').childNodes[i].childNodes[0].rows[0].id="tabboxtr"+r;
        r++;
      }
    }
  }
  var r=0;
  for (i=0;i<document.getElementById('workarea').childNodes.length;i++) {
    var boxid=document.getElementById('workarea').childNodes[i].id;
    if (boxid) {
      if (boxid.match(/workspacewindow/i)) {
        document.getElementById('workarea').childNodes[i].id="workspacewindow"+r;
        r++;
      }
    }
  }
}

function closeProject() {
  if (confirm("Are you sure you want to close the current project?\n\nAll open files in the project will be closed.")) {
    //if (ws) {
      //ws.hideeditbar();
    //}
    if (document.getElementById("changeProjects").length>1) {
      var setnum=document.getElementById("changeProjects").value;
      if (document.getElementById("changeProjects")[0].innerHTML==projectName) {
        changeProjects(document.getElementById("changeProjects")[1].value);
      }else{
        changeProjects(document.getElementById("changeProjects")[0].value);
      }
      for (i=0;i<document.getElementById("changeProjects").length;i++) {
        if (document.getElementById("changeProjects")[i].value==setnum) {
          break;
        }
      }
      document.getElementById("changeProjects").removeChild(document.getElementById("changeProjects")[i]);
      document.getElementById("mainmenutd").removeChild(document.getElementById("tabbox"+setnum));
      document.getElementById("workarea").removeChild(document.getElementById("workspacewindow"+setnum));
      //projects--;
    }else{
      var setnum=document.getElementById("changeProjects").value;
      document.getElementById("mainmenutd").removeChild(document.getElementById("tabbox"+setnum));
      document.getElementById("workarea").removeChild(document.getElementById("workspacewindow"+setnum));
      for (i=0;i<document.getElementById("changeProjects").length;i++) {
        if (document.getElementById("changeProjects")[i].value==setnum) {
          break;
        }
      }
      document.getElementById("changeProjects").removeChild(document.getElementById("changeProjects")[i]);
      ws=undefined;
      projectName=undefined;
      //projects--;
      createworkspacetabbar();
      createAltWorkspace();
      open_window('startproject');
      close_window('startbuilder');
      centerWindow();
    }
    //topworkspacebar=document.getElementById("changeProjects").value;
  }
}

function showProjects() {
  for (i=0;i<workspacebarinc;i++) {
    document.getElementById("tabbox"+i).style.display="block";
    document.getElementById("workspacewindow"+i).style.display="block";
  }
}
function newblankpage() {
  if (nameworkspacefirst==1) {
    alert('You must name your current workspace before opening a new one')
  }else{
    if(editingWorkspace)return;
    setChoose('new');
  }
}

function createworkspacetab(num)
{
  // initialize
  document.getElementById('pageFader').style.display = 'block';
  document.getElementById('pageFader').innerHTML = "<table width=100% height=100%><td align=center style='font: bold 24px verdana,tahoma,arial; cursor: default'>Please wait while file opens...</table>";
  workspacesize = num;
  deactivateWorkspaceTab();
  document.getElementById('buttonbar').style.visibility = 'visible';
  document.getElementById('edit').setAttribute('disabled', false);
  document.getElementById('view').setAttribute('disabled', false);
  document.getElementById('insert').setAttribute('disabled', false);
  document.getElementById('filesave').setAttribute('disabled', false);
  document.getElementById('filesaveas').setAttribute('disabled', false);

  // create tab
  with (document.getElementById('tabbar'+topworkspacebar).rows[0])
  {
    // create tab overlap image
    if (cells.length > 2) 
      with (insertCell(cells.length - 1))  innerHTML = "<img src='" + tab_both01.src + "' onMouseDown='if(editingWorkspace)return;unselectworkspaces(true);activateWorkspaceTab(event);selectworkspace()'>";
    else
      cells[0].firstChild.src = tab_left1.src;
    cells[cells.length-1].firstChild.src = tab_right1.src;

    // create tab
    newTab = insertCell(cells.length - 1);
    with (newTab)
    {
      id = 'workspacetitletab' + increment;
      className = 'fileTab';
      style.fontWeight = 'bold';
      style.color = 'white';
      setAttribute('background', tab_center1.src);
      innerHTML = '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
    }

    if (ie) newTab.onmousedown = new Function('if(editingWorkspace)return;unselectworkspaces(true);activateWorkspaceTab(event);selectworkspace()');
    else  newTab.setAttribute('onMouseDown','if(editingWorkspace)return;unselectworkspaces(true);activateWorkspaceTab(event);selectworkspace()');

    currentTab = newTab;
  }
  document.getElementById('tabbox'+topworkspacebar).scrollLeft = document.getElementById('tabbox'+topworkspacebar).scrollWidth;
  document.getElementById('tabbar'+topworkspacebar).style.visibility = 'visible';
  scrollWorkspaceTabs();

  setViewMode(0, false);
  workspaces.push(increment);
  updateAttachedObjects();
}

function newworkspace() {
  startnew=1;
  templatetext=undefined;
  openworkspace=undefined;
}

function openworkspacefunction() {
  openworkspace=1;
  templatetext=undefined;
  startnew=undefined;
}

function openProjectWindow() {
  document.getElementById('startproject').style.display = 'block';
  document.getElementById('startbuilder').style.display = 'none';
  centerWindow();
}

function newtemplate()
{
  templatetext = 1;
}

//When in Preview mode, dragging and right click should not even exist
///////////////////////////////////////

function turnoffdragging()
{
  if (!ws) return;
  ws.document.onmouseover = null;
  ws.document.onmousedown = null;
  ws.document.onmousemove = null;
  ws.document.onmouseout = null;
  ws.document.onmouseup = null;
  ws.document.ondblclick = null;
  ws.document.oncontextmenu = new Function('return false');
  ws.dragging = false;
}

function turnondragging()
{
  if (!ws) return;
  ws.document.onmouseover = ws.MO;
  ws.document.onmousedown = ws.MD;
  ws.document.onmousemove = ws.MM;
  ws.document.onmouseout = ws.MOU;
  ws.document.onmouseup = ws.MU;
  ws.document.ondblclick = ws.DC;
  ws.document.oncontextmenu = ws.showmenu;
  ws.dragging = true;
}


///////////////////////////////////////


function unselectworkspaces()
{
  for (k = 0; k < increment; k++) {
    if (frames[topworkspacename].document.getElementById('iframeworkspace'+k)) {
      frames[topworkspacename].document.getElementById('iframeworkspace'+k).style.display = 'none';
    }
  }
  top.document.getElementById('editbar').style.visibility = 'hidden';
}


function selectworkspace(e)
{
  //try
  //{
    if (typeof e == 'number') {
      var replacenum = e;
    } else if (!e) {
      var replacenum = currentTab.id.replace(/[a-z]/gi, '');
    } else {
      var tabname = (ie) ? event.srcElement.id : e.target.id;
      var replacenum = tabname.replace(/\w+(\d+)/gi, '$1');
    }
    frames[topworkspacename].document.getElementById('iframeworkspace' + replacenum).style.display = 'block';
    ws = frames[topworkspacename].frames['iframeworkspace' + replacenum];
    //top.document.getElementById('editbar').style.visibility = (ws.editingText) ? 'visible' : 'hidden';
    frames.fileSelector.topiframename = 'iframeworkspace' + replacenum;
    topiframename = 'iframeworkspace' + replacenum;
    if (ws.editingText) ws.showeditbar();
    centerWindow();

    mode = ws.viewMode;
    setViewMode(0);
    if (mode != 0) setViewMode(mode);

    frames[topworkspacename].document.body.scrollLeft = ws.scrollX;
    frames[topworkspacename].document.body.scrollTop = ws.scrollY;
    //ws.showmenu();
    //ws.hidemenu();
  //}
  //catch (ex) {}
}
var publishSave;
var saveAll=0;
function saveAllWorkspaces(publish)
{
  if (!savingWorkspaces)
  {
    editingWorkspace = true;
    saveAll=1;
    savingWorkspaces = [];
    currentWorkspace = currentTab.id.replace(/[a-z]/gi, '') - 0;
    for (i = 0; i < workspaces.length; i++) {
      if (workspaces[i] != currentWorkspace)
        savingWorkspaces.push(workspaces[i]);
    }
    savingWorkspaces.push(currentWorkspace);
    document.getElementById('pageFader').style.display = 'block';
    document.getElementById('pageFader').innerHTML = "<table width=100% height=100%><td align=center style='font: bold 24px verdana,tahoma,arial; cursor: default'>Saving...</table>";
  }
  if (savingWorkspaces.length > 0)
  {
    if (publish) publishSave=true;
    wsint = savingWorkspaces[0];
    wsname = 'iframeworkspace' + wsint;
    workspace = frames[topworkspacename].frames[wsname];
    if (!workspace.workspacename)
    {
      savingWorkspaces.shift();
      if (publish) {
        saveAllWorkspaces("publish");
      }else{
        saveAllWorkspaces();
      }
      return;
    }

    unselectworkspaces();
    selectworkspace(wsint);
    ws.panelSource();
    workspace.document.saveworkspaceform.savedhtm.value = workspace.line2;
    if (workspace.filePath) workspace.document.saveworkspaceform.submit();
    savingWorkspaces.shift();
  }
  if (savingWorkspaces.length == 0)
  {
    document.getElementById('pageFader').style.display = 'none';
    document.getElementById('pageFader').innerHTML = '';
    savingWorkspaces = null;
    editingWorkspace = false;
    saveAll=0;
    if (publish) {
      frames.ftpWindow.document.publishForm.submit();
    }
    publishSave=null;
  }
}


function closeworkspace()
{
  if (ie && editingWorkspace) {
    alert("Please finish editing the text before closing this workspace.");
    return;
  }
  if (workspaces.length == 0 || !ws)
    return ws = null;

  // initialize
  var childnum = frames[topworkspacename].document.getElementById('workspace').childNodes.length;
  var pattern = topiframename;
  var replacenum = pattern.replace(/[a-z]*(\d+)/gi, '$1');

  // remove workspace tab
  cellIndex = currentTab.cellIndex;
  deactivateWorkspaceTab();
  document.getElementById('tabbar'+topworkspacebar).rows[0].deleteCell(cellIndex);
  if (document.getElementById('tabbar'+topworkspacebar).rows[0].cells.length == 2) 
    document.getElementById('tabbar'+topworkspacebar).style.visibility = 'hidden';
  else
    document.getElementById('tabbar'+topworkspacebar).rows[0].deleteCell((cellIndex == 1) ? 1 : cellIndex - 1);
  currentTab = null;

  // remove workspace iframe etc.
  //document.getElementById('editbar').style.display = 'none';
  frames[topworkspacename].document.getElementById('source').style.display = 'none';
  frames[topworkspacename].document.getElementById('workspace').removeChild(frames[topworkspacename].iframe[replacenum]);
  //alert(document.getElementById("changeProjects").length);
  if (childnum == '1') {
    document.getElementById('buttonbar').style.visibility = 'hidden';
    document.getElementById('edit').setAttribute('disabled', true);
    document.getElementById('view').setAttribute('disabled', true);
    document.getElementById('insert').setAttribute('disabled', true);
    document.getElementById('filesave').setAttribute('disabled', true);
    document.getElementById('filesaveas').setAttribute('disabled', true);
    topiframename=undefined;
  }else{
    frames[topworkspacename].document.getElementById('workspace').childNodes[0].style.display = 'block';
    topiframename = frames[topworkspacename].document.getElementById('workspace').childNodes[0].id;
    ws = frames[topworkspacename].frames[topiframename];
    activateWorkspaceTab(document.getElementById('tabbar'+topworkspacebar).rows[0].cells[1]);
  }
  if (document.getElementById("changeProjects").length>1) {
    document.getElementById('buttonbar').style.visibility = 'visible';
    document.getElementById('edit').setAttribute('disabled', false);
    document.getElementById('view').setAttribute('disabled', false);
    document.getElementById('insert').setAttribute('disabled', false);
    document.getElementById('filesave').setAttribute('disabled', false);
    document.getElementById('filesaveas').setAttribute('disabled', false);
  }
  for (i = 0; i < workspaces.length; i++)
    if (workspaces[i] == replacenum)
      workspaces.splice(i, 1);

  //
  // if there are no more workspaces open, close all windows and show the startbuilder window
  //
  if (workspaces.length == 0)
  {
    closeProject();
    /*windows = [
      'colorBuilderWindow',
      'editworkspace',
      'detachConfirmWindow',
      'htmlBuilderWindow',
      'inserttextwindow',
      'linkBuilderWindow',
      'linkMoverWindow',
      'newWorkspace',
      'openReplaceConfirmWindow',
      'projectwindow',
      'removeConfirmWindow',
      'starttemplate'
    ];
    for (i in windows) close_window(windows[i]);
    if (!openworkspace)
    {
      document.getElementById("panel3").style.visibility="hidden";
      goToStart();
      centerWindowTimer = null;
      centerWindow();
    }*/
  }

  if (arguments[0] == 'all') {
    closeworkspace('all');
  }

  setViewMode();
  nameworkspacefirst=0;
}


////////////////////


function activateWorkspaceTab(obj)
{
  if (obj && (obj.srcElement || obj.target))
  {
    e = obj;
    obj = (ie) ? obj.srcElement : obj.target;
    if (obj.src)
    {
      temp = obj.src.indexOf(tab_both01.src) > 0;
      tabbarLeft = getX(document.getElementById('tabbar'+topworkspacebar));
      x = e.clientX + (document.getElementById('tabbox'+topworkspacebar).scrollLeft) - getX(obj) - tabbarLeft + 2 + (ie?0:2);
      obj = ((temp && x < 6) || (!temp && x < 11)) ? obj.parentNode.parentNode.cells[obj.parentNode.cellIndex-1] : obj.parentNode.parentNode.cells[obj.parentNode.cellIndex+1];
    }
  }
  if (obj)
  {
    deactivateWorkspaceTab();

    currentTab = obj;
    obj.style.fontWeight = 'bold';
    obj.style.color = 'white';
    obj.setAttribute('background', tab_center1.src);
      left = obj.parentNode.cells[obj.cellIndex-1].firstChild;
      if (left.src.match(/tab_left[01]\.jpg/))
        left.src = tab_left1.src;
      else if (left.src.match(/tab_both(00|10)\.jpg/))
        left.src = tab_both01.src;
      right = obj.parentNode.cells[obj.cellIndex+1].firstChild;
      if (right.src.match(/tab_right[01]\.jpg/))
        right.src = tab_right1.src;
      else if (right.src.match(/tab_both(00|01)\.jpg/))
        right.src = tab_both10.src;
  }
  // scroll the current tab into view
  x = getX(currentTab);
  //alert(document.getElementById('tabbox'+topworkspacebar)+","+topworkspacebar);
  tabDiv = document.getElementById('tabbox'+topworkspacebar);
  if (x - 20 < tabDiv.scrollLeft)
    tabDiv.scrollLeft = x - 20;
  if (x + currentTab.offsetWidth + 20 > tabDiv.scrollLeft + tabDiv.offsetWidth)
    tabDiv.scrollLeft = x + currentTab.offsetWidth + 20 - tabDiv.offsetWidth;
}


function deactivateWorkspaceTab()
{
  if (!currentTab) return;
  currentTab.style.color = 'black';
  currentTab.style.fontWeight = 'normal';
  currentTab.setAttribute('background', tab_center0.src);
  currentTab.parentNode.cells[currentTab.cellIndex-1].firstChild.src = (currentTab.cellIndex == 1) ? tab_left0.src : tab_both00.src;
  currentTab.parentNode.cells[currentTab.cellIndex+1].firstChild.src = (currentTab.cellIndex == currentTab.parentNode.cells.length - 2) ? tab_right0.src : tab_both00.src;
  /*
  currentTab.parentNode.cells[currentTab.cellIndex-1].innerHTML = "<img src='" + imagepath + '/tab_' + ((currentTab.cellIndex == 1) ? 'left0.jpg' : 'both00.jpg') + "' onMouseDown='if(editingWorkspace)return;unselectworkspaces(true);activateWorkspaceTab(this.parentNode.parentNode.cells[this.parentNode.cellIndex+1]);selectworkspace()'>";
  currentTab.parentNode.cells[currentTab.cellIndex+1].innerHTML = "<img src='" + imagepath + '/tab_' + ((currentTab.cellIndex == currentTab.parentNode.cells.length - 2) ? 'right0.jpg' : 'both00.jpg') + "' onMouseDown='if(editingWorkspace)return;unselectworkspaces(this.parentNode.parentNode.cells[this.parentNode.cellIndex-1]);activateWorkspaceTab(event);selectworkspace()'>";
  */
  currentTab = null;
}

var tabbox;

function scrollWorkspaceTabs(direction)
{
  // initialize
  var inertia = 1;
  if (!tabbox) tabbox = document.getElementById('tabbox'+topworkspacebar);
  tabbox.style.width = document.body.clientWidth - getX(tabbox) - (document.getElementById('projectTabs').style.visibility == 'visible' ? document.getElementById('projectTabs').offsetWidth : 0) - 6;
  var noScroll = (tabbox.scrollWidth == tabbox.offsetWidth && tabbox.scrollLeft == 0 && document.getElementById('tabbar'+topworkspacebar).offsetWidth < tabbox.offsetWidth);

  // scroll the current tab into view if direction isn't set
  if (!direction && !tabScrollDelayTimeout)
  {
    x = getX(currentTab);
    tabDiv = document.getElementById('tabbox'+topworkspacebar);
    if (x - 20 < tabDiv.scrollLeft)
      tabDiv.scrollLeft = x - 20;
    if (x + currentTab.offsetWidth + 20 > tabDiv.scrollLeft + tabDiv.offsetWidth)
      tabDiv.scrollLeft = x + currentTab.offsetWidth + 20 - tabDiv.offsetWidth;

    // show / hide scroll buttons
    document.getElementById('tabScrollLeft').style.display = (!noScroll /*&& tabDiv.scrollLeft > 0*/) ? 'block' : 'none';
    document.getElementById('tabScrollRight').style.display = (!noScroll /*&& tabDiv.scrollLeft < tabDiv.scrollWidth - tabDiv.offsetWidth*/) ? 'block' : 'none';
    return false;
  }
  if (noScroll) return;

  // set new scroll position
  //if (!tabNewScrollX)
    tabNewScrollX = tabbox.scrollLeft;
  tabNewScrollX += 30 * direction;

  // keep new scroll within bounds
  if (tabNewScrollX < 0)
    tabNewScrollX = 0;
  if (tabNewScrollX > tabbox.scrollWidth - tabbox.offsetWidth)
    tabNewScrollX = tabbox.scrollWidth - tabbox.offsetWidth;

  /*
  // scroll window
  if (!tabScrollSmoothInterval)
    tabScrollSmoothInterval = setInterval("if (tabbox.scrollLeft != tabNewScrollX) {tabbox.scrollLeft += (tabNewScrollX - tabbox.scrollLeft) / " + inertia + "} else {clearInterval(tabScrollSmoothInterval); tabScrollSmoothInterval = null; tabNewScrollX = null}", 10);
  */
  tabbox.scrollLeft = tabNewScrollX;

  tabScrollDelayTimeout = setTimeout("scrollWorkspaceTabs(" + direction + ")", 50);
}


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


function startforms()
{
  //document.getElementById('mainformbuilder').onkeyup = OK;
  document.getElementById('mainformbuilder').onclick = OK;
}

function OK(e)
{
  var node = ie?event.srcElement:e.target;
  //alert(node.id);
  var onode = node;
  var pattern = /props(\d+)/;
  var node = ie?event.srcElement:e.target;
  /*while(node.parentNode) {
    if (pattern.exec(onode.id) || node.id == 'inputprops' || node.parentNode.id == 'inputprops' || onode.id == 'inputprops' || onode.id == 'tatable' || onode.id == 'textawidth' || onode.id == 'textaheight' || onode.id == 'tawidth' || onode.id == 'taheight') {
      document.getElementById('inputprops').style.visibility = 'visible';
      break;
    }else{
      if (node.tagName == 'INPUT') break;
      document.getElementById('inputprops').style.visibility = 'hidden';
      break;
    }
    node = node.parentNode;
  }*/
  updateFormBuilder();
}

function updateFormBuilder()
{
  changename();
  changevalue();
  setInputHtm();
}

var formInterval;
function openFormBuilder() {
  document.getElementById('mainformbuilder').style.display='block';
  //document.getElementById("inputs").style.width=document.getElementById("inputs").parentNode.offsetWidth;
  document.getElementById(topworkspacename).style.display='none';
  document.getElementById('windowSpacer').style.display='block';
  if (ie) {
    document.getElementById("chooseinputs").style.width="100%";
    document.getElementById("chooseinputs").style.height="100%";
    document.getElementById("formpreview").style.width="100%";
    document.getElementById("formpreview").style.height="100%";
    document.getElementById("formpreview").style.overflow="auto";
  }else{
    //if (ws.editform) { var inc=100 }else{ var inc=12 }
    var inc=12;
    document.getElementById("chooseinputs").style.width=document.getElementById("chooseinputs").parentNode.offsetWidth-inc;
    document.getElementById("chooseinputs").style.height=document.getElementById("chooseinputs").parentNode.offsetHeight-inc;
    document.getElementById("formpreview").style.width=document.getElementById("formpreview").parentNode.offsetWidth-inc;
    document.getElementById("formpreview").style.height=document.getElementById("formpreview").parentNode.offsetHeight-inc;
    document.getElementById("formpreview").style.overflow="auto";
  }
  if (!ws.editform) {
    document.getElementById('formbgcolor').style.backgroundColor='transparent';
    document.getElementById('formfontcolor').style.backgroundColor='#000';
    document.getElementById('formpreview').innerHTML="<script>function checkrequired(f) { var checklist = eval(f+'validate'); for (checkthis in checklist) { if(document.getElementById(checklist[checkthis]).value.length==0) { alert('Please complete the required fields.'); return false; alert('Submitting form...'); } } } var pform"+formobjects+"validate = [];</script><form action='"+top.sendmail_url+"' method='post' target='_blank' id=pform"+formobjects+" name=pform"+formobjects+" onSubmit='return checkrequired(this.name);'><input type=hidden id=f"+formobjects+"email name=f"+formobjects+"email><table cellpadding=2 cellspacing=0><tbody id=previewtbody"+formobjects+"><tr id=f"+formobjects+"pinputtr0><td id=f"+formobjects+"prename0 valign=top>First Name</td><td id=f"+formobjects+"preinput0><input type=text id=f"+formobjects+"pinput0 name=f"+formobjects+"pinput0></td></tr></tbody><tfoot><tr id=f"+formobjects+"psubmittr><td id=f"+formobjects+"presubmit valign=top>&nbsp;</td><td id=f"+formobjects+"presubmit><input type=submit id=f"+formobjects+"submit name=f"+formobjects+"submit></td></tr></tfoot></table></form>";
    document.email.email.style.border='rgb(180,180,180) 1px solid';
    document.email.email.value='';

    document.inputsform.req0.checked=false;
    document.inputsform.name0.value='First Name';
    document.inputsform.type0.value='t';
    document.inputsform.value0.value='';
    var len=document.getElementById('inputstbody').childNodes.length;
    for (i=0;i<len;i++) {
      if (i!=0) {
        if (document.getElementById('inputtr'+i)) {
          document.getElementById('inputstbody').removeChild(document.getElementById('inputtr'+i));
        }
      }
    }
    addinput();
    addinput();
    addinput();
  }
  updateFormBuilder();
  // disable submit in form preview
  //document.getElementById('formpreview').firstChild.onsubmit = new Function('return false');
}

function closeFormBuilder() {
  close_window(document.getElementById('mainformbuilder'));
  document.getElementById(topworkspacename).style.display='block';
  document.getElementById('windowSpacer').style.display='none'
}

var formincrement;
var inputArray = [];
var reqArray = [];
var nameArray = [];
var typeArray = [];
var valueArray = [];
var blankArray = [];

var pinputArray = [];
var pnameArray = [];
var ptypeArray = [];

function addinput()
{
  if (ws.editform) {
    formobjects=ws.form_num;
  }else{
    formobjects = (ws.d_f[0]) ? ws.d_f.length : 0;
  }
  //alert(document.getElementById("formpreview").childNodes[0].childNodes[1].childNodes[0].tagName);
  formincrement=document.getElementById("previewtbody"+formobjects).rows.length;
  inputArray[formincrement] = document.createElement('tr');
  inputArray[formincrement].id = 'inputtr'+formincrement;
  reqArray[formincrement] = document.createElement('td');
  reqArray[formincrement].id = 'reqtd'+formincrement;
  nameArray[formincrement] = document.createElement('td');
  nameArray[formincrement].id = 'nametd'+formincrement;
  typeArray[formincrement] = document.createElement('td');
  typeArray[formincrement].id = 'typetd'+formincrement;
  valueArray[formincrement] = document.createElement('td');
  valueArray[formincrement].id = 'valuetd'+formincrement;
  blankArray[formincrement] = document.createElement('td');
  blankArray[formincrement].id = 'blanktd'+formincrement;
  inputArray[formincrement].appendChild(reqArray[formincrement]);
  inputArray[formincrement].appendChild(nameArray[formincrement]);
  inputArray[formincrement].appendChild(typeArray[formincrement]);
  inputArray[formincrement].appendChild(valueArray[formincrement]);
  inputArray[formincrement].appendChild(blankArray[formincrement]);

  document.getElementById('inputstbody').appendChild(inputArray[formincrement]);
  //document.getElementById('inputstbody').insertBefore(inputArray[formincrement],document.getElementById('inputstbody').rows[formincrement-1]);

  document.getElementById('reqtd'+formincrement).innerHTML = "<input type=checkbox name=req"+formincrement+" id=req"+formincrement+">";
  document.getElementById('nametd'+formincrement).innerHTML = "<input type=text id=name"+formincrement+" name=name"+formincrement+" class=input value=Name>";
  document.getElementById('typetd'+formincrement).innerHTML = "<select id=type"+formincrement+" name=type"+formincrement+" class=input onChange=changetype(event)><option value=t>Text</option><option value=ta>Textarea</option><option value=ddm>Drop Down Menu</option><option value=r>Radio Button</option><option value=c>Checkbox</option><option value=s>Submit Button</option></select>";
  document.getElementById('valuetd'+formincrement).innerHTML = "<input type=text id=value"+formincrement+" name=value"+formincrement+" class=input>";
  document.getElementById('blanktd'+formincrement).innerHTML = "<div id=props"+formincrement+" style=cursor:pointer onClick=showprops(event)>Properties</div><div id=del"+formincrement+" style=cursor:pointer onClick=deleterow(event)>Delete</div>";
  pinputArray[formincrement] = document.createElement('tr');
  pinputArray[formincrement].id = 'f'+formobjects+'pinputtr'+formincrement;
  pnameArray[formincrement] = document.createElement('td');
  pnameArray[formincrement].id = 'f'+formobjects+'prename'+formincrement;
  pnameArray[formincrement].valign = 'top';
  pnameArray[formincrement].noWrap="true";
  ptypeArray[formincrement] = document.createElement('td');
  ptypeArray[formincrement].id = 'f'+formobjects+'preinput'+formincrement;
  pinputArray[formincrement].appendChild(pnameArray[formincrement]);
  pinputArray[formincrement].appendChild(ptypeArray[formincrement]);

  document.getElementById('previewtbody'+formobjects).appendChild(pinputArray[formincrement]);
  //document.getElementById('previewtbody'+formobjects).insertBefore(pinputArray[formincrement],document.getElementById('previewtbody'+formobjects).rows[formincrement-1]);

  if (formincrement==1) {
    document.getElementById('name'+formincrement).value = 'Last Name';
  }else if (formincrement==2) {
    document.getElementById('name'+formincrement).value = 'Email';
  }else if (formincrement==3) {
    document.getElementById('name'+formincrement).value = '';
  }else{
    document.getElementById('name'+formincrement).value = 'Name';
  }
  document.getElementById('f'+formobjects+'preinput'+formincrement).innerHTML = "<input type=text id=f"+formobjects+"pinput"+formincrement+" name=f"+formobjects+"pinput"+formincrement+">";
}

function changetype(e,what)
{
  if (ws.editform) { formobjects=ws.form_num; }else{ formobjects = (ws.d_f[0]) ? ws.d_f.length : 0; }
  //alert(formobjects);
  if (typeof e=='number') {
    var num=e;
    var val=what;
    document.getElementById('inputstbody').rows[num].childNodes[2].childNodes[0].value=what;
  }else{
    if (ie) {
      var num = event.srcElement.id.replace(/.*?(\d+)/,'$1');
    }else{
      var num = e.target.id.replace(/.*?(\d+)/,'$1');
    }
    if (num==0 && !ie) {
      var val = document.getElementById('inputstbody').rows[num].cells[2].childNodes[1].value;
    }else{
      var val = document.getElementById('inputstbody').rows[num].cells[2].childNodes[0].value;
    }
  }
  var inputval = document.getElementById('inputstbody').rows[num].childNodes[3].childNodes[0].value;
  document.getElementById('name'+num).style.visibility = 'visible';
  switch (val) {
    case 't':  document.getElementById('f'+formobjects+'preinput'+num).innerHTML = "<input type=text id=f"+formobjects+"pinput"+num+" name=f"+formobjects+"pinput"+num+" value="+inputval+">";
          document.getElementById("props"+num).style.visibility="visible";
          break;
    case 'ta':  document.getElementById('f'+formobjects+'preinput'+num).innerHTML = "<textarea id=f"+formobjects+"pinput"+num+" name=f"+formobjects+"pinput"+num+" value="+inputval+">"+inputval+"</textarea>";
          document.getElementById("props"+num).style.visibility="visible";
          break;
    case 'ddm':  document.getElementById('f'+formobjects+'preinput'+num).innerHTML = "<select id=f"+formobjects+"pinput"+num+" name=f"+formobjects+"pinput"+num+" value="+inputval+"></select>";
          document.getElementById("props"+num).style.visibility="visible";
          break;
    case 'r':  document.getElementById('f'+formobjects+'preinput'+num).innerHTML = "<input type=radio id=f"+formobjects+"pinput"+num+" name=radio value="+inputval+">";
          document.getElementById("props"+num).style.visibility="hidden";
          break;
    case 'c':  document.getElementById('f'+formobjects+'preinput'+num).innerHTML = "<input type=checkbox id=f"+formobjects+"pinput"+num+" name=f"+formobjects+"pinput"+num+" value="+inputval+">";
          document.getElementById("props"+num).style.visibility="hidden";
          break;
    case 's':  //alert(document.getElementById("previewtbody1").innerHTML);
          //alert(formobjects+","+document.getElementById('f'+formobjects+'preinput'+num));
          document.getElementById('f'+formobjects+'preinput'+num).innerHTML = "<input type=submit id=f"+formobjects+"pinput"+num+" name=f"+formobjects+"pinput"+num+" value="+inputval+">";
          document.getElementById("props"+num).style.visibility="visible";
          //document.getElementById('name'+num).value = '';
          document.getElementById('name'+num).style.visibility = 'hidden';
          document.getElementById('value'+num).value = 'Submit';
          document.getElementById('f'+formobjects+'prename'+num).innerHTML='';
          //alert(formobjects+","+document.getElementById('f'+formobjects+'pinput'+num));
          document.getElementById('f'+formobjects+'pinput'+num).value=document.getElementById('value'+num).value;
          break;
  }
  //alert(document.getElementById('f'+formobjects+'preinput'+num).innerHTML);
}

function changename() {
  if (ws.editform) { formobjects=ws.form_num; }else{ formobjects = (ws.d_f[0]) ? ws.d_f.length : 0; }
  var pattern = /<font color=red>\*<\/font>(.*?)/gi;
  if (document.getElementById("previewtbody"+formobjects)) {
    for (i = 0; i < document.getElementById("previewtbody"+formobjects).rows.length; i++)
    {
      if (document.inputsform) {
        var val = document.getElementById("inputstbody").rows[i].cells[1].childNodes[0].value;
        if (document.getElementById("inputstbody").rows[i].cells[0].childNodes[0].checked) {
          if (document.getElementById("inputstbody").rows[i].cells[2].childNodes[0].value != 's') {
            document.getElementById('f'+formobjects+'prename'+i).innerHTML = "<script>pform"+formobjects+"validate.push('"+document.getElementById('f'+formobjects+'pinput'+i).id+"');</script><font color=red>*</font>"+val;
            document.getElementById('f'+formobjects+'pinput'+i).name = val;
            if (document.getElementById('propstitlename')) {
              document.getElementById('propstitlename').innerHTML = "<script>pform"+formobjects+"validate.push('"+document.getElementById('f'+formobjects+'pinput'+i).id+"');</script><font color=red>*</font>"+val;
            }
          }
        }else{
          if (document.getElementById("inputstbody").rows[i].cells[2].childNodes[0].value != 's') {
            val=val.replace(pattern, '$1');
            document.getElementById('f'+formobjects+'prename'+i).innerHTML=val;
            document.getElementById('f'+formobjects+'pinput'+i).name=val;
            if (document.getElementById('propstitlename')) {
              document.getElementById('propstitlename').innerHTML=val.replace(pattern, '$1');
            }
          }
        }
      }
    }
    document.getElementById("f"+formobjects+"submit").value=document.getElementById("submitvalue").value;
  }
}
function setInputHtm() {
  if (ws.editform) { formobjects=ws.form_num; }else{ formobjects = (ws.d_f[0]) ? ws.d_f.length : 0; }
  var pattern = /<font color=red>\*<\/font>(.*?)/gi;
  if (document.getElementById("previewtbody"+formobjects)) {
    for (i = 0; i < document.getElementById("previewtbody"+formobjects).rows.length; i++) {
      var val = document.getElementById('name'+i).value;
      if (document.getElementById('type'+i).value != 's' && document.getElementById('type'+i).value != 'r') {
        if (document.getElementById('type'+i).value=="t") {
          var inputSize=document.getElementById('f'+formobjects+'pinput'+i).size;
        }else if (document.getElementById('type'+i).value=="ta") {
          var inputWidth=document.getElementById('f'+formobjects+'pinput'+i).rows;
          var inputHeight=document.getElementById('f'+formobjects+'pinput'+i).cols;
        }
        document.getElementById('f'+formobjects+'pinput'+i).name = val;
        if (document.getElementById('type'+i).value=="t") {
          document.getElementById('f'+formobjects+'pinput'+i).size=inputSize;
        }else if (document.getElementById('type'+i).value=="ta") {
          document.getElementById('f'+formobjects+'pinput'+i).rows=inputWidth;
          document.getElementById('f'+formobjects+'pinput'+i).cols=inputHeight;
        }
      }
    }
  }
}
function changevalue()
{
  if (ws.editform) { formobjects=ws.form_num; }else{ formobjects = (ws.d_f[0]) ? ws.d_f.length : 0; }
  if (document.getElementById("previewtbody"+formobjects)) {
    for (i = 0; i < document.getElementById("previewtbody"+formobjects).rows.length; i++) {
      var val = document.getElementById("inputstbody").rows[i].cells[3].childNodes[0].value;
      document.getElementById('f'+formobjects+'pinput'+i).value=val;
    }
  }
}

function hideprops()
{
  close_window(document.getElementById('inputprops'));
}

function showprops(e)
{
  if (ws.editform) { formobjects=ws.form_num; }else{ formobjects = (ws.d_f[0]) ? ws.d_f.length : 0; }
  open_window(document.getElementById('inputprops'));
  centerWindow();
  if (ie) {
    num = event.srcElement.id.replace(/.*?(\d+)/,'$1');
  }else{
    num = e.target.id.replace(/.*?(\d+)/,'$1');
  }
  type=document.getElementById("inputstbody").rows[num].cells[2].childNodes[0].value;
  switch(type) {
    case 't':
      document.getElementById('propstitle').innerHTML="<nobr>Text Field Properties:</nobr>";
      document.getElementById('propsmain').innerHTML="<br><div align=center><nobr>Size: <input id=textprops style=vertical-align:middle type=text name=textsize value="+document.getElementById('f'+formobjects+'pinput'+num).size+" size=3 maxlength=2 onChange=changeprops(event)></nobr></div>";
      break;
    case 'ta':
      document.getElementById('propstitle').innerHTML="<nobr>Textarea Properties:</nobr>";
      document.getElementById('propsmain').innerHTML="<table align=center id=tatable style=font-size:11px;font-family:arial><tr><td>Width:</td><td><input id=textawidth value='"+document.getElementById('f'+formobjects+'pinput'+num).cols+"' type=text name=textawidth size=3 maxlength=2 onChange=changeprops(event)></td></tr><tr><td>Height:</td><td><input id=textaheight value='"+document.getElementById('f'+formobjects+'pinput'+num).rows+"' type=text name=textaheight size=3 maxlength=2 onChange=changeprops(event)></td></tr></table>";
      break;
    case 'ddm':
      document.getElementById('propstitle').innerHTML="<nobr>Drop Down Menu Properties:</nobr><br>";
      document.getElementById('propsmain').innerHTML="Options: <div id=ddmInputs align=center><input type=text size=35 name=ddmoption1 id=ddmoption1 onChange=addoptions(event)><br><input type=text size=35 name=ddmoption2 id=ddmoption2 onChange=addoptions(event)><br><input type=text size=35 name=ddmoption3 id=ddmoption3 onChange=addoptions(event)><br><input type=text size=35 name=ddmoption4 id=ddmoption4 onChange=addoptions(event)><br><input type=text size=35 name=ddmoption5 id=ddmoption5 onChange=addoptions(event)><br><input type=text size=35 name=ddmoption6 id=ddmoption6 onChange=addoptions(event)><br><input type=text size=35 name=ddmoption7 id=ddmoption7 onChange=addoptions(event)><br><input type=text size=35 name=ddmoption8 id=ddmoption8 onChange=addoptions(event)><br><input type=text size=35 name=ddmoption9 id=ddmoption9 onChange=addoptions(event)><br><input type=text size=35 name=ddmoption10 id=ddmoption10 onChange=addoptions(event)><br></div>";
      addoptions("pre");
      break;
    case 'r':
      //document.getElementById('propstitle').innerHTML="Radio Button <b>"+document.getElementById('name'+num).value+"</b> Properties:";
      //document.getElementById('propsmain').innerHTML='';
      break;
    case 'c':
      //document.getElementById('propstitle').innerHTML="Checkbox <b>"+document.getElementById('name'+num).value+"</b> Properties:";
      //document.getElementById('propsmain').innerHTML='';
      break;
    case 's':
      document.getElementById('propstitle').innerHTML="<nobr>Submit Button Properties:</nobr>";
      document.getElementById('propsmain').innerHTML="<br><div align=center><nobr>Size: <input id=submitprops style=vertical-align:middle type=text name=submitsize value='"+document.getElementById('f'+formobjects+'pinput'+num).offsetWidth+"' size=3 maxlength=2 onChange=changeprops(event)></nobr></div>";
      break;
  }
}

function changeprops(e)
{
  if (ws.editform) { formobjects=ws.form_num; }else{ formobjects = (ws.d_f[0]) ? ws.d_f.length : 0; }
  switch (type)
  {
    case 't':  document.getElementById('f'+formobjects+'pinput'+num).size=ie?event.srcElement.value:e.target.value;      break;
    case 'ta':  if (document.getElementById('textawidth').value)
            document.getElementById('f'+formobjects+'pinput'+num).cols=document.getElementById('textawidth').value;
          if (document.getElementById('textaheight').value)
            document.getElementById('f'+formobjects+'pinput'+num).rows=document.getElementById('textaheight').value;
          break;
    case 'ddm':  document.getElementById('f'+formobjects+'pinput'+num).value=ie?event.srcElement.value:e.target.value;      break;
    case 'r':  break;
    case 'c':  break;
    case 's':  document.getElementById('f'+formobjects+'pinput'+num).style.width=document.getElementById('submitsize').value;  break;
  }
}

function addoptions(e)
{
  if (ws.editform) {
    if (e=="pre") {
      var childOptions=document.getElementById('f'+ws.form_num+'pinput'+num).childNodes.length;
      var inc=0;
      for (i=0;i<childOptions;i++) {
        document.getElementById("ddmInputs").childNodes[inc].value=document.getElementById('f'+ws.form_num+'pinput'+num).childNodes[i].innerHTML;
        inc+=2;
      }
    }else{
      document.getElementById('f'+ws.form_num+'pinput'+num).innerHTML="";
      for (i=0;i<document.getElementById("ddmInputs").childNodes.length;i++) {
        if (document.getElementById("ddmInputs").childNodes[i].value) {
          var option=new Option;
          var text=document.createTextNode(document.getElementById("ddmInputs").childNodes[i].value);
          option.appendChild(text);
          document.getElementById('f'+ws.form_num+'pinput'+num).appendChild(option);
        }
      }
    }
  }else{
    if (e=="pre") {
      var childOptions=document.getElementById('f'+formobjects+'pinput'+num).childNodes.length;
      var inc=0;
      for (i=0;i<childOptions;i++) {
        document.getElementById("ddmInputs").childNodes[inc].value=document.getElementById('f'+formobjects+'pinput'+num).childNodes[i].innerHTML;
        //alert(document.getElementById("ddmInputs").childNodes[i].value);
        inc+=2;
      }
    }else{
      document.getElementById('f'+formobjects+'pinput'+num).innerHTML="";
      for (i=0;i<document.getElementById("ddmInputs").childNodes.length;i++) {
        if (document.getElementById("ddmInputs").childNodes[i].value) {
          var option=new Option;
          var text=document.createTextNode(document.getElementById("ddmInputs").childNodes[i].value);
          option.appendChild(text);
          document.getElementById('f'+formobjects+'pinput'+num).appendChild(option);
        }
      }
    }
  }
}

function testForm() {
  alert(document.getElementById("inputstbody").innerHTML);
  alert(document.getElementById("previewtbody"+formobjects).innerHTML);
  for (i = 0; i < document.getElementById("previewtbody"+formobjects).rows.length; i++) {
  }
}

function deleterow(e) {
  if (ws.editform) { formobjects=ws.form_num; }else{ formobjects = (ws.d_f[0]) ? ws.d_f.length : 0; }
  if (ie) { var num=event.srcElement.id }else{ var num=e.target.id }
  var pattern=/del(\d+)/;
  num=num.replace(pattern,"$1");
  //alert(num);
  var input=document.getElementById("inputstbody");
  var preinput=document.getElementById("previewtbody"+formobjects);
  input.deleteRow(num);
  preinput.deleteRow(num);
  var deleterowvar;
  for (i=0;i<(preinput.rows.length+1);i++) {
    if (!document.getElementById("inputtr"+i)) {
      deleterowvar="true";
      continue;
    }
    if (deleterowvar) {
      document.getElementById("inputtr"+i).id="inputtr"+(i-1);
      document.getElementById("reqtd"+i).childNodes[0].id="req"+(i-1);
      document.getElementById("reqtd"+i).id="reqtd"+(i-1);
      document.getElementById("nametd"+i).childNodes[0].id="name"+(i-1);
      document.getElementById("nametd"+i).id="nametd"+(i-1);
      document.getElementById("typetd"+i).childNodes[0].id="type"+(i-1);
      document.getElementById("typetd"+i).id="typetd"+(i-1);
      document.getElementById("valuetd"+i).childNodes[0].id="value"+(i-1);
      document.getElementById("valuetd"+i).id="valuetd"+(i-1);
      document.getElementById("blanktd"+i).id="blanktd"+(i-1);
      document.getElementById("props"+i).id="props"+(i-1);
      document.getElementById("del"+i).id="del"+(i-1);

      document.getElementById("f"+formobjects+"pinputtr"+i).id="f"+formobjects+"pinputtr"+(i-1);
      document.getElementById("f"+formobjects+"prename"+i).id="f"+formobjects+"prename"+(i-1);
      document.getElementById("f"+formobjects+"preinput"+i).childNodes[0].id="f"+formobjects+"pinput"+(i-1);
      document.getElementById("f"+formobjects+"preinput"+i).id="f"+formobjects+"preinput"+(i-1);
    }
  }
}

function sendformtoworkspace(clear)
{
  if (ws.editform) { formobjects=ws.form_num; }else{ formobjects = (ws.d_f[0]) ? ws.d_f.length : 0; }
  if (!document.getElementById('formbgcolor').style.backgroundColor) {
    document.getElementById('formbgcolor').style.backgroundColor='transparent';
  }
  if (!document.getElementById('formfontcolor').style.backgroundColor) {
    document.getElementById('formfontcolor').style.backgroundColor='000000';
  }
  document.getElementById('formpreview').firstChild.onsubmit = null; //re-enable submit
  document.getElementById('previewtbody'+formobjects).style.backgroundColor=document.getElementById('formbgcolor').style.backgroundColor;
  document.getElementById('previewtbody'+formobjects).style.color=document.getElementById('formfontcolor').style.backgroundColor;
  var pattern=/.*?[^\s].*?@.*?(\..*?)+/gi;
  //alert(document.getElementById("emailAddressField").value);
  if (pattern.exec(document.getElementById("emailAddressField").value) || clear) {
    //alert("Matched");
    /*for (i=0;i<document.getElementById('inputstbody').childNodes.length;i++) {
      if (i==0 && !ie) {
        if (document.getElementById("inputstbody").rows[i].cells[2].childNodes[1].value=='s') {
          var sub='true';
          break;
        }
      }else{
        if (document.getElementById("inputstbody").rows[i].cells[2].childNodes[0].value=='s') {
          var sub='true';
          break;
        }
      }
    }*/
    //if (!clear && sub!='true') {
      /*var confirm_sub=window.confirm('You do not have a submit button in your form. Users will not be able to send data. Would you still like to continue?');
      if (confirm_sub) {
        document.getElementById('f'+formobjects+'email').value=document.email.email.value;
        formhtm=document.getElementById('formpreview').innerHTML;
        document.getElementById('mainformbuilder').style.display = 'none';
        document.getElementById("workspacewindow"+topworkspacenum).style.display='block';
        document.getElementById('windowSpacer').style.display='none';
        if (!clear) {
          ws.setform();
          ws.document.getElementById('formtrans' + (formobjects-1)).style.height = ws.document.getElementById('formresize' + (formobjects-1)).offsetHeight;
        }
        document.getElementById('formbgcolor').style.backgroundColor='transparent';
        document.getElementById('formfontcolor').style.backgroundColor='000000';
        document.getElementById('formpreview').innerHTML="<form action='"+top.sendmail_url+"' method='post' target='_blank' id=pform"+formobjects+" name=pform"+formobjects+"><input type=hidden id=f"+formobjects+"email name=f"+formobjects+"email><table cellpadding=2 cellspacing=0><tbody id=previewtbody"+formobjects+"><tr id=f"+formobjects+"pinputtr0><td id=f"+formobjects+"prename0 valign=top nowrap>First Name</td><td id=f"+formobjects+"preinput0><input type=text id=f"+formobjects+"pinput0 name=f"+formobjects+"pinput0></td></tr></tbody></table></form>";
        document.email.email.style.border='rgb(180,180,180) 1px solid';
        document.email.email.value='';

        document.inputsform.req0.checked=false;
        document.inputsform.name0.value='First Name';
        document.inputsform.type0.value='t';
        document.inputsform.value0.value='';
        var len=document.getElementById('inputstbody').childNodes.length;
        for (i=0;i<len;i++) {
          if (i!=0) {
            if (document.getElementById('inputtr'+i)) {
              document.getElementById('inputstbody').removeChild(document.getElementById('inputtr'+i));
            }
          }
        }
        sub=undefined;
        ws.editform=undefined;
        addinput();
        addinput();
        addinput();
      }*/
    //}else{
      document.getElementById('f'+formobjects+'email').value=document.email.email.value;
      document.getElementById('f'+formobjects+'prename0').noWrap="true";
      formhtm=document.getElementById('formpreview').innerHTML;
      //alert(formhtm);
      document.getElementById('formpreview').innerHTML="";
      document.getElementById('mainformbuilder').style.display = 'none';
      document.getElementById("workspacewindow"+topworkspacenum).style.display='block';
      document.getElementById('windowSpacer').style.display='none';
      if (!clear) {
        ws.setform();
        ws.document.getElementById('formtrans' + (formobjects-1)).style.height = ws.document.getElementById('formresize' + (formobjects-1)).offsetHeight;
      }
      document.getElementById('formbgcolor').style.backgroundColor='transparent';
      document.getElementById('formfontcolor').style.backgroundColor='000000';
      //document.getElementById('formpreview').innerHTML="<form action='"+top.sendmail_url+"' method='post' target='_blank' id=pform"+formobjects+" name=pform"+formobjects+"><input type=hidden id=f"+formobjects+"email name=f"+formobjects+"email><table cellpadding=2 cellspacing=0><tbody id=previewtbody"+formobjects+"><tr id=f"+formobjects+"pinputtr0><td id=f"+formobjects+"prename0 valign=top>First Name</td><td id=f"+formobjects+"preinput0><input type=text id=f"+formobjects+"pinput0 name=f"+formobjects+"pinput0></td></tr></tbody></table></form>";
      document.email.email.style.border='rgb(180,180,180) 1px solid';
      document.email.email.value='';
      document.inputsform.name0.value='First Name';
      var len=document.getElementById('inputstbody').childNodes.length;
      //alert(len);
      for (i=0;i<len;i++) {
        if (i!=0) {
          if (document.getElementById('inputtr'+i)) {
            document.getElementById('inputstbody').removeChild(document.getElementById('inputtr'+i));
          }
        }
      }
      //addinput();
      //addinput();
      //addinput();
      sub=undefined;
      ws.editform=undefined;
      //alert(document.getElementById("inputstbody").innerHTML);
    //}
  }else{
    document.email.email.style.border='#D00 1px solid';
    alert('You must enter a valid email address that your users will be sending the form to.');
  }
}

function inbrowser()
{
  /*try
  {*/
    var formhtm = document.getElementById('mainformpreview'+createeditinc).innerHTML;
    var formpattern = /(<form)\sid=.*(\sname=.*\saction=.*>)/gi;
    var tablepattern = /(<table)\sid=.*\d+(\scellspacing=.*\scellpadding=.*\salign=center>)/gi;
    var tbodypattern = /(<tbody)\sid=.*\d+(\sstyle=".*")*(>)/gi;
    var trpattern = /(<tr)\sid=.*\d+(>)/gi;
    var tdpattern = /(<td)\sid=.*\d+(\svalign=top>.*<\/td>)/gi;
    var trnlpattern = /(.*)(<\/tr>)/gi;
    var fpattern = /(<\/tr>)(<\/tbody>)(<\/table>)(<\/form>)/gi;
  /*}
  catch (e)
  {
    return;
  }*/
  formhtm = formhtm.replace(formpattern,'$1$2');
  formhtm = formhtm.replace(tablepattern,'$1$2');
  formhtm = formhtm.replace(tbodypattern,'$1$2$3');
  formhtm = formhtm.replace(trpattern,'$1$2');
  formhtm = formhtm.replace(tdpattern,'$1$2');
  formhtm = formhtm.replace(trnlpattern,'$1\n$2');
  formhtm = formhtm.replace(fpattern,'$1\n$2\n$3\n$4');

  formhtm = formhtm.toLowerCase();
  previewwin = window.open('');
  previewwin.document.write(formhtm);
  previewwin.document.close();
}

function forminworkspace()
{
  //try
  //{
    formhtm = document.getElementById('mainformpreview'+createeditinc).innerHTML;
    alert(formhtm);
    var formpattern=/(<form)\sid=.*(\sname=.*\saction=.*>)/gi;
    var tablepattern=/(<table)\sid=.*\d+(\scellspacing=.*\scellpadding=.*\salign=center>)/gi;
    var tbodypattern=/(<tbody)\sid=.*\d+(\sstyle=".*")*(>)/gi;
    var trpattern=/(<tr)\sid=.*\d+(>)/gi;
    var tdpattern=/(<td)\sid=.*\d+(\svalign=top>.*<\/td>)/gi;
    var trnlpattern=/(.*)(<\/tr>)/gi;
    var fpattern=/(<\/tr>)(<\/tbody>)(<\/table>)(<\/form>)/gi;
  //}
  //catch (e)
  //{
  //  return false;
  //}

  formhtm=formhtm.replace(formpattern,'$1$2');
  formhtm=formhtm.replace(tablepattern,'$1$2');
  formhtm=formhtm.replace(tbodypattern,'$1$2$3');
  formhtm=formhtm.replace(trpattern,'$1$2');
  formhtm=formhtm.replace(tdpattern,'$1$2');
  formhtm=formhtm.replace(trnlpattern,'$1\n$2');
  formhtm=formhtm.replace(fpattern,'$1\n$2\n$3\n$4');

  formhtm=formhtm.toLowerCase();
}

function setformbgcolor()
{
  ws.formbgcolor();
  document.getElementById('palette').style.display='block';
  for (i=0;i<document.getElementById("inputstbody").childNodes.length;i++) {
    if (document.getElementById("type"+i)) {
      document.getElementById("type"+i).style.visibility="hidden";
    }
  }
}

function setformfontcolor()
{
  ws.formfontcolor();
  document.getElementById('palette').style.display='block';
  for (i=0;i<document.getElementById("inputstbody").childNodes.length;i++) {
    if (document.getElementById("type"+i)) {
      document.getElementById("type"+i).style.visibility="hidden";
    }
  }
}

var numrows;
var numcols;
var tablehtm;
var tablepreview=[];
var table=[];
var tablebody=[];
var tablenum;
var rows=[];
var columns=[];
var rresize=[];
var rresizeimage=[];
var cresizeimage=[];
var cresize=[];
var trs=[];
var buildtableinc=0;
if (numrows)
  document.tablebuilderform.createtable.value='Apply Changes';

function closeTableBuilder() {
  edittable = undefined;
  document.getElementById('tableprops').style.visibility='hidden';
  document.getElementById('tablebuilder').style.display='none';
  document.getElementById('edittablecover').style.cssText+=';width:1px;height:1px';
  close_window('table'+tablenum);
  if (document.getElementById('tablepreviewresize')) {
    document.getElementById('tablepreviewresize').style.visibility='hidden';
  }
  document.getElementById('workspacewindow'+topworkspacenum).style.display='block';
  document.getElementById('windowSpacer').style.display='none';
  onResize();
}

function buildtable()
{
  if (ws.d_ta[0]) {
    buildtableinc=ws.d_ta.length;
  }else{
    buildtableinc=0;
  }
  document.getElementById('tableprops').style.visibility='visible';
  document.getElementById('edittablecover').style.width=document.getElementById('createtablediv').offsetWidth;
  document.getElementById('edittablecover').style.height=document.getElementById('createtablediv').offsetHeight - 1;
  if (document.tablebuilderform.rows.value) {
    numrows=document.tablebuilderform.rows.value;
  }else{
    numrows=1;
  }
  if (document.tablebuilderform.columns.value) {
    numcols=document.tablebuilderform.columns.value;
  }else{
    numcols=1;
  }
  var border=document.tablebuilderform.border.value;

  if (ie) {
    tablepreview[buildtableinc]=document.createElement("<div id='tablepreviewresize' class='resize2'>");
    table[buildtableinc]=document.createElement("<table id='table"+buildtableinc+"' border='"+border+"' bgcolor='ffffff' style='visibility:visible;width:200;height:150'>");
    tablebody[buildtableinc]=document.createElement("<tbody id='tablebody"+buildtableinc+"'>");
  }else{
    tablepreview[buildtableinc]=document.createElement('div');
    tablepreview[buildtableinc].setAttribute('id','tablepreviewresize');
    tablepreview[buildtableinc].setAttribute('class','resize2');

    table[buildtableinc]=document.createElement('table');
    table[buildtableinc].setAttribute('id','table'+buildtableinc);
    table[buildtableinc].setAttribute('border',border);
    table[buildtableinc].setAttribute('style','visibility:visible;width:200;height:150;background-color:rgb(255,255,255)');
    tablebody[buildtableinc]=document.createElement('tbody');
    tablebody[buildtableinc].setAttribute('id','tablebody'+buildtableinc);
  }


  for (r=0;r<numrows;r++) {
    if (ie) {
      rows[r]=document.createElement("<tr id='t"+buildtableinc+"r"+r+"'>");
    }else{
      rows[r]=document.createElement('tr');
      rows[r].setAttribute('id','t'+buildtableinc+'r'+r);
    }
    for (c=0;c<numcols;c++) {
      if (ie) {
        columns[c]=document.createElement("<td id='t"+buildtableinc+"r"+r+"c"+c+"'>");
      }else{
        columns[c]=document.createElement('td');
        columns[c].setAttribute('id','t'+buildtableinc+'r'+r+'c'+c);

      }
      rows[r].appendChild(columns[c]);
    }
    tablebody[buildtableinc].appendChild(rows[r]);
  }

  if (ie) {
    var maintable=document.createElement("<table border='0' cellpadding='0' cellspacing='0' id='outertable"+buildtableinc+"'>");
    var maintbody=document.createElement('<tbody>');
    var maintr1=document.createElement('<tr>');
    var maintr2=document.createElement('<tr>');
    var maintd=document.createElement("<td id='maintabletd"+buildtableinc+"'>");
    var cresizetd=document.createElement("<td id='t"+buildtableinc+"cresize' align='right'>");
  }else{
    var maintable=document.createElement('table');
    maintable.setAttribute('border','0');
    maintable.setAttribute('cellpadding','0');
    maintable.setAttribute('cellspacing','0');
    maintable.setAttribute('id','outertable'+buildtableinc);
    var maintbody=document.createElement('tbody');
    var maintr1=document.createElement('tr');
    var maintr2=document.createElement('tr');
    var maintd=document.createElement('td');
    maintd.setAttribute('id','maintabletd'+buildtableinc);
    var cresizetd=document.createElement('td');
    cresizetd.setAttribute('id','t'+buildtableinc+'cresize');
    cresizetd.setAttribute('align','right');
  }

  tablepreview[buildtableinc].appendChild(maintable);
  maintable.appendChild(maintbody);
  maintbody.appendChild(maintr1);
  maintbody.appendChild(maintr2);
  maintr1.appendChild(maintd);
  maintr2.appendChild(cresizetd);
  maintd.appendChild(table[buildtableinc]);

  table[buildtableinc].appendChild(tablebody[buildtableinc]);

  document.getElementById('hiddenpreview').appendChild(tablepreview[buildtableinc]);

  var tablesource=document.getElementById('hiddenpreview').innerHTML;
  document.getElementById('tablepreviewbuilder').innerHTML=tablesource;
  document.getElementById('tablepreviewbuilder').style.cursor='default';
  document.getElementById('hiddenpreview').innerHTML='';
  for (r=0;r<numrows;r++) {
    for (c=0;c<numcols;c++) {
      //document.getElementById('t'+buildtableinc+'r'+r+'c'+c).innerHTML="<img src="+imagepath+"/transparentpixel.gif>";
      document.getElementById('t'+buildtableinc+'r'+r+'c'+c).innerHTML='&nbsp;';
      document.getElementById('t'+buildtableinc+'r'+r+'c'+c).vAlign="top";
    }
  }
  document.getElementById('t'+buildtableinc+'cresize').innerHTML="<img src='"+imagepath+"/resize.gif' id='tableresizeimage"+buildtableinc+"'>";

  tablenum=buildtableinc;
  buildtableinc++;
  functiontoresizetable();
}

function addtablecolumn(num,e) {
  if (e) {
    if (ie) { var ele=event.srcElement }else{ var ele=e.target; }
    var cpattern=/table(\d+)/g;
    var tpattern=/t(\d+)r\d+c\d+/g;
    if (cpattern.exec(itemtoberemoved)) {
      var testnum=itemtoberemoved.replace(cpattern, "$1");
    }
    if (tpattern.exec(itemtoberemoved)) {
      var testnum=itemtoberemoved.replace(tpattern, "$1");
    }
    var tablename='table'+testnum;
  }else{
    var tablename='table'+tablenum;
  }
  var pattern=/table(\d+)/;
  if (pattern.exec(tablename)) {
    tablenum=tablename.replace(pattern, '$1');
    rownum=document.getElementById(tablename).rows.length;
    colnum=document.getElementById(tablename).rows[0].cells.length;
    if (num) {
      for(r=0;r<rownum;r++) {
        if (ie) {
          var createtd=document.createElement("<td id='t"+tablenum+"r"+r+"c"+colnum+"' valign='top'>");
        }else{
          var createtd=document.createElement("td");
          createtd.setAttribute("id","t"+tablenum+"r"+r+"c"+colnum);
          createtd.setAttribute("valign","top");
        }
        document.getElementById('t'+tablenum+'r'+r).appendChild(createtd);
        //document.getElementById('t'+tablenum+'r'+r+'c'+colnum).innerHTML="<img src="+imagepath+"/transparentpixel.gif>";
        document.getElementById('t'+tablenum+'r'+r+'c'+colnum).innerHTML='&nbsp;';
      }
    }else{
      if (colnum>1) {
        for(r=0;r<rownum;r++) {
          document.getElementById('t'+tablenum+'r'+r).deleteCell(colnum-1);
        }
      }else{
        alert('There are no more columns to delete.');
      }
    }
  }
}

function addtablerow(num,e) {
  if (e) {
    if (ie) { var ele=event.srcElement }else{ var ele=e.target; }
    var cpattern=/table(\d+)/g;
    var tpattern=/t(\d+)r\d+c\d+/g;
    if (cpattern.exec(itemtoberemoved)) {
      var testnum=itemtoberemoved.replace(cpattern, "$1");
    }
    if (tpattern.exec(itemtoberemoved)) {
      var testnum=itemtoberemoved.replace(tpattern, "$1");
    }
    var tablename='table'+testnum;
  }else{
    var tablename='table'+tablenum;
  }
  var pattern=/table(\d+)/;
  if (pattern.exec(tablename)) {
    tablenum=tablename.replace(pattern, '$1');
    rownum=document.getElementById(tablename).rows.length;
    colnum=document.getElementById(tablename).rows[0].cells.length;
    if (num) {
      //rownum++;
      if (ie) {
        var createtr=document.createElement("<tr id='t"+tablenum+"r"+rownum+"'>");
      }else{
        var createtr=document.createElement("tr");
        createtr.setAttribute("id","t"+tablenum+"r"+rownum);
      }
      document.getElementById('tablebody'+tablenum).appendChild(createtr);
      for(c=0;c<colnum;c++) {
        if (ie) {
          var createtd=document.createElement("<td id='t"+tablenum+"r"+rownum+"c"+c+"' valign='top'>");
        }else{
          var createtd=document.createElement("td");
          createtd.setAttribute("id","t"+tablenum+"r"+rownum+"c"+c);
          createtd.setAttribute("valign","top");
        }
        document.getElementById('t'+tablenum+'r'+rownum).appendChild(createtd);
        //document.getElementById('t'+tablenum+'r'+rownum+'c'+c).innerHTML="<img src="+imagepath+"/transparentpixel.gif>";
        document.getElementById('t'+tablenum+'r'+rownum+'c'+c).innerHTML='&nbsp;';
      }
    }else{
      if (rownum>1) {
        document.getElementById('tablebody'+tablenum).deleteRow(rownum-1);
      }else{
        alert('There are no more rows to delete.');
      }
    }
  }
}

function tableInPreview()
{
  if (document.getElementById('tablepreviewresize')) {
    document.getElementById('tablepreviewresize').firstChild.rows[0].cells[0].firstChild.style.cursor = 'default';
    tablehtm=document.getElementById('tablepreviewresize').firstChild.rows[0].cells[0].innerHTML;
    var dpattern=/<div class.*?>(.*)/gi;
    var trnlpattern=/(.*)(<\/tr>)/gi;
    var fpattern=/(<\/tr>)(<\/tbody>)(<\/table>)(<\/div>)/gi;
    var enddpattern=/(.*)<\/div>$/gi;

    tablehtm=tablehtm.replace(dpattern, '$1');
    tablehtm=tablehtm.replace(trnlpattern,'$1\n$2');
    tablehtm=tablehtm.replace(fpattern,'$1\n$2\n$3\n$4');
    tablehtm=tablehtm.replace(enddpattern, '$1');

    var previewwin = window.open('');
    previewwin.document.write(tablehtm);
    previewwin.document.close();
  }else{
    alert("You have not created a table yet");
  }
}

function tableinworkspace()
{
  document.getElementById('edittablecover').style.width='1px';
  document.getElementById('edittablecover').style.height='1px';

  document.getElementById('tableprops').style.visibility = 'hidden';
  tablehtm=document.getElementById('tablepreviewresize').innerHTML;
  var dpattern=/<div class.*?>(.*)/gi;
  var trnlpattern=/(.*)(<\/tr>)/gi;
  var fpattern=/(<\/tr>)(<\/tbody>)(<\/table>)(<\/div>)/gi;
  var enddpattern=/(.*)<\/div>$/gi;

  tablehtm=tablehtm.replace(dpattern, '$1');
  tablehtm=tablehtm.replace(trnlpattern,'$1\n$2');
  tablehtm=tablehtm.replace(fpattern,'$1\n$2\n$3\n$4');
  tablehtm=tablehtm.replace(enddpattern, '$1');

  //tablehtm=tablehtm.toLowerCase();
  if (document.getElementById("tableBorderSelect").value==0) {
    alert("You are sending this table to the workspace with no border. You may not be able to see the table unless you move your mouse over it. To change this, you must right click on the table, and select \"Edit Table\"");
  }
  return (tablehtm != '');
}

function runedittable()
{
  var cell=/t(\d+)r\d+c\d+/;
  if (cell.exec(ws.itemtoberemoved)) {
    ws.itemtoberemoved=ws.itemtoberemoved.replace(cell, 'table$1');
  }
  tablenum=ws.itemtoberemoved.replace(/[a-z]*(\d+).*/,'$1');
  if (ie) {
    var createeditpreview=document.createElement("<div id='tablepreviewresize' class='resize2'>");
  }else{
    var createeditpreview=document.createElement('div');
    createeditpreview.setAttribute('id','tablepreviewresize');
    createeditpreview.setAttribute('class','resize2');
  }
  document.getElementById('windowSpacer').style.display='block';
  document.getElementById("workspacewindow"+topworkspacenum).style.display='none';
  document.getElementById('tablebuilder').style.display='block';
  document.getElementById('edittablecover').style.width=document.getElementById('createtablediv').offsetWidth;
  document.getElementById('edittablecover').style.height=document.getElementById('createtablediv').offsetHeight - 1;
  document.getElementById('tablepreviewbuilder').appendChild(createeditpreview);
  document.getElementById('tablepreviewresize').innerHTML=ws.document.getElementById('tableresize'+tablenum).innerHTML;
  document.getElementById('tableprops').style.visibility='visible';
  var rows = document.getElementById('table'+tablenum).rows.length;
  var cells = document.getElementById('table'+tablenum).rows[0].cells.length;
  document.tablebuilderform.rows.value=rows;
  document.tablebuilderform.columns.value=cells;
  //alert(ws.document.getElementById('table'+tablenum).style.backgroundColor);
  setTimeout("document.getElementById('tablebgcolor').style.backgroundColor=ws.document.getElementById('table'+tablenum).style.backgroundColor;",50);
  edittable='yes';
}

function changeBorder()
{
  document.getElementById('table'+tablenum).border=document.tablebuilderform.border.value;
}

function changeCellpadding(val)
{
  document.getElementById('table'+tablenum).setAttribute('cellPadding', val);
}

function changeCellspacing(val)
{
  document.getElementById('table'+tablenum).setAttribute('cellSpacing', val);
}








function showtextarea()
{
  if (!document.getElementById('inserttextwindow')) {
    setTimeout('showtextarea()', 100);
    return;
  }
  document.getElementById('inserttextwindow').style.display = 'block';
  createiframe();
  if (ie) {
    document.getElementById('inserttextiframe').focus();
  } else {
    ws.cdbX = null;
    ws.cdbY = null;
    document.getElementById('inserttextwindow').style.width = '575px';
    document.getElementById('inserttextiframe').style.width = '564px';
    document.getElementById('inserttextiframe').contentWindow.focus();
  }
  centerWindow();
}


function createiframe()
{
  if (!iframeCreated)
  {
    if (!ie && ns)
    {
      var textiframe = document.createElement('iframe');
      textiframe.setAttribute('id', 'inserttextiframe');
      textiframe.setAttribute('class', 'inserttextiframe');
      textiframe.setAttribute('name', 'inserttextiframe');
      textiframe.setAttribute('frameborder', '0');
      textiframe.setAttribute('style', 'border: inset 1px silver; width: 100%');
      textiframe.setAttribute('scrolling', 'auto');
      //textiframe.name = 'inserttextiframe';
      document.getElementById('inserttextwindow').appendChild(textiframe);
        document.getElementById('inserttextiframe').contentWindow.document.designMode = 'on';
        document.getElementById('inserttextiframe').contentWindow.document.open();
        document.getElementById('inserttextiframe').contentWindow.document.write("<body style='margin: 2px; font: 13px arial' onkeydown='top.ws.updateTextBuilderToolbar()' onkeyup='top.ws.updateTextBuilderToolbar()' onmouseup='top.ws.updateTextBuilderToolbar()'>");
        document.getElementById('inserttextiframe').contentWindow.document.close();
      try {
        document.getElementById('inserttextiframe').contentWindow.document.execCommand('bold', false, null);
      } catch (e) {
        alert('The HTML input area is not supported with your version of browser. You must upgrade.');
      }
    }
    else if (ie)
    {
      document.getElementById('inserttextwindow').innerHTML += "<div id=inserttextiframe class=inserttextiframe name=inserttextiframe contentEditable scrolling=auto onkeydown='if(event.keyCode>=37&&event.keyCode<=40)ws.updateTextBuilderToolbar()' onkeyup='ws.updateTextBuilderToolbar()' onmouseup='ws.updateTextBuilderToolbar()' onselectstart='ws.updateTextBuilderToolbar()' style='border: inset 1px #C8C8C8; font: 13px arial; overflow: auto; width: 558px'></div>";
    }
  }
  iframeCreated = true;
}


function closetextarea()
{
  document.getElementById('inserttextwindow').style.display = 'none';
}



































////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////














function setViewMode(mode)
{
  try
  {
    if (mode == null && ws) mode = ws.viewMode;
    var passive = (arguments[1] != 1);
    if (!ws) return;
    if (!ws.workspacename && !passive)
      return alert('You must have a workspace open to perform this action.');

    //document.getElementById('pageFader').style.display = 'block';
    //document.getElementById('pageFader').innerHTML = '<table width=100% height=100%><td align=center style="font: bold 24px verdana,tahoma,arial; cursor: default">Please wait for source to compile...</table>';

    document.getElementById('btnEdit').setAttribute('down', (mode == 0) - 0);
    document.getElementById('btnPreview').setAttribute('down', (mode == 1) - 0);
    document.getElementById('btnViewSource').setAttribute('down', (mode == 2) - 0);
    document.getElementById('btnEdit').src = imagepath + '/btn_edit' + ((mode == 0) - 0) + '0.jpg';
    document.getElementById('btnPreview').src = imagepath + '/btn_preview' + ((mode == 1) - 0) + '0.jpg';
    document.getElementById('btnViewSource').src = imagepath + '/btn_viewsource' + ((mode == 2) - 0) + '0.jpg';

    //document.getElementById('workspacewindow').style.visibility = (mode == 2) ? 'hidden' : 'visible';
    //document.getElementById('previewModeWarning').style.display = (mode == 1) ? 'block' : 'none';
    if (frames[topworkspacename].document.body) {
      frames[topworkspacename].document.body.style.background = '#CCC' + ((mode == 1) ? ' url(' + imagepath + '/previewbg.gif) fixed -5px':'');
    }
    document.getElementById('panel3').style.display = (mode == 2) ? 'block' : 'none';
    if (mode == ws.viewMode) return;

    // EDIT
    if (mode == 0)
    {
      turnondragging();
      ws.setworkspacebackground();
      ws.document.getElementById('panel1').style.display = 'block';
      ws.document.getElementById('panel2').style.display = 'none';
      ws.document.getElementById('panel2').innerHTML = '';
      ws.turnondrag();
      if (!passive) document.getElementById('btnEdit').src = imagepath + '/btn_edit11.jpg';
    }

    // PREVIEW
    else if (mode == 1)
    {
      turnoffdragging();
      ws.setworkspacebackground();
      ws.panelPreview();
      ws.document.getElementById('panel1').style.display = 'none';
      ws.document.getElementById('panel2').style.display = 'block';
      ws.document.getElementById('panel2').innerHTML = ws.line;
      ws.turnoffdrag();
      if (!passive) document.getElementById('btnPreview').src = imagepath + '/btn_preview11.jpg';
    }

    // VIEW SOURCE
    else if (mode == 2)
    {
      //alert(document.getElementById('pageFader').style.display);
      turnoffdragging();
      setpanel3();
      ws.panelSource();
      showsourcecode();
      ws.setworkspacebackground('1');
      if (!passive) document.getElementById('btnViewSource').src = imagepath + '/btn_viewsource11.jpg';
    }
    //document.getElementById('pageFader').style.display = 'none';
    //document.getElementById('pageFader').innerHTML = "";

    if (arguments[1] != false)
      ws.viewMode = mode;
  }
  catch (e) {}
}



////////////////////////////



var previewPaneWidth;
var previewPaneHeight;
var previewPaneSrc;
var imgLoadingTimer;

function updatePreviewPane(src)
{
  // initialize
  clearTimeout(imgLoadingTimer);
  clearInterval(imgLoadingTimer);
  previewDiv = document.getElementById('filetreepreview');

  // if no src, write ---
  if (!src || src == '') {
    previewPaneSrc = '';
    if (previewDiv.style.display == 'none' || previewDiv.offsetHeight == 0) return;
    if (previewDiv.innerHTML != '---') previewDiv.innerHTML = '---';
    return;
  }
  previewPaneSrc = src = top.script_name + '/userimage/' + src;
  imgLoadingTimer = setTimeout("if(previewDiv.innerHTML.indexOf('<') < 0)previewDiv.innerHTML = '<span style=font-family:arial;font-size:12px>Loading Preview...</span>'", 150);

  // get preview pane dimensions
  previewPaneWidth = previewDiv.offsetWidth - previewDiv.style.borderLeftWidth - previewDiv.style.borderRightWidth - 1;
  previewPaneHeight = previewDiv.offsetHeight - previewDiv.style.borderTopWidth - previewDiv.style.borderBottomWidth - 1;

  // get image dimensions
  frames.imgLoader.document.open();
  frames.imgLoader.document.write("<body onload='parent.updatePreviewPaneImage()' scroll=no style='margin: 0; overflow: hidden'><img src='" + src + "'>");
  frames.imgLoader.document.close();
}

function updatePreviewPaneImage()
{
  img = frames.imgLoader.document.body.firstChild;
  if (!ie && img.offsetWidth == 24 && img.offsetHeight == 24)
  {
    imgLoadingTimer = setInterval("if (frames.imgLoader.document.body.firstChild.offsetWidth != 24 || frames.imgLoader.document.body.firstChild.offsetHeight != 24) resizePreviewPaneImage()", 50);
  }
  else resizePreviewPaneImage();
}

function resizePreviewPaneImage()
{
  // initialize
  clearInterval(imgLoadingTimer);
  previewDiv = document.getElementById('filetreepreview');
  img = frames.imgLoader.document.body.firstChild;
  imgWidth = frames.imgLoader.document.body.firstChild.offsetWidth;
  imgHeight = frames.imgLoader.document.body.firstChild.offsetHeight;
  imgRatio = (imgWidth / imgHeight);

  // size image
  if (imgWidth > previewPaneWidth || imgHeight > previewPaneHeight) 
  {
    // if image is square
    if (imgWidth == imgHeight) {
      if (previewPaneWidth == previewPaneHeight)
        img.width = previewPaneWidth;
      else if (previewPaneWidth > previewPaneHeight)
        img.height = previewPaneHeight;
      else
        img.width = previewPaneWidth;
    }

    // if image is wide
    else if (imgWidth > imgHeight) {
      ratio = previewPaneWidth / imgWidth;
      img.width = previewPaneWidth;
      img.height = imgHeight * ratio;

      if (img.height > previewPaneHeight) {
        ratio = img.width / img.height;
        img.height = previewPaneHeight;
        img.width = img.height * ratio;
      }
    }

    // if image is tall
    else {
      ratio = previewPaneHeight / imgHeight;
      img.width = imgWidth * ratio;
      img.height = previewPaneHeight;

      if (img.width > previewPaneWidth) {
        ratio = img.height / img.width;
        img.width = previewPaneWidth;
        img.height = img.width * ratio;
      }
    }
  }

  // append image element to preview pane
  previewDiv.innerHTML = "<a href='javascript:;' onmousedown='return false' style='cursor: default'><img src='" + previewPaneSrc + "' width=" + img.width + " height=" + img.height + " id=previewImage border=0></a>";
}












function updateAttachedObjects(obj, alternate)
{
  // assertions
  if (workspaces.length <= 1 || globalObjects.length == 0 || savingWorkspaces)
    return;

  // loop through all of the open workspaces
  for (w = 0; w < workspaces.length; w++)
  {
    // if the workspace isn't loaded, continue
    workspace = frames[topworkspacename].frames['iframeworkspace' + workspaces[w]];
    if (!workspace || !workspace.document || !workspace.workspacename)
      continue;

    // loop through all of the global objects
    divTags = workspace.document.getElementsByTagName('DIV');
    for (g = globalObjects.length - 1; g >= 0; g--)
    {
      // set variables
      found = false;
      globalObject = globalObjects[g];
      name = globalObject[0];
      originalWS = globalObject[2];
      originalObj = globalObject[1];
      type = originalObj.id.replace(/[0-9]/g, '');

      // loop through all of the workspace's DIV tags to find the current global object
      for (d = 0; d < divTags.length; d++)
        if (divTags[d].name == name) {
          found = true;
          break;
        }

      // exclude specified global objects
      excludeGlobalObject = false;
      for (i = 0; i < globalObjectExcludes.length; i++) {
        if (globalObjectExcludes[i] == obj) return;
        if (globalObjectExcludes[i] == divTags[d] || globalObjectExcludes[i] == workspace) {
          excludeGlobalObject = true;
          break;
        }
      }
      if (excludeGlobalObject)
        continue;

      // if found, update the object; else, create a new one
      if (found)
      {
        // if source object selected, update the globalObject variable and continue
        if (obj == divTags[d])
        {
          globalObject[1] = obj;
          globalObject[2] = workspace;
          continue;
        }

        // assertions
        if (!obj || obj == divTags[d] || (obj && obj.name != divTags[d].name) || arguments[2] == 'reattach')
          continue;

        var num = obj.id.replace(type, '');
        var newnum = divTags[d].id.replace(type, '');
        switch (type)
        {
          case 'colorblock':
            var ox = ws.ColorBlocksLeft[num] - 1;
            var oy = ws.ColorBlocksTop[num] - 1;
            var ow = ws.ColorBlocksWidth[num] - ((ie) ? 0 : 2);
            var oh = ws.ColorBlocksHeight[num] - ((ie) ? 0 : 2);
            var oz = ws.ColorBlocksZ[num];

            divTags[d].innerHTML = obj.innerHTML;
            divTags[d].parentNode.style.left = ox + 'px';
            divTags[d].parentNode.style.top = oy + 'px';
            divTags[d].parentNode.style.zIndex = oz;
            divTags[d].style.width = ow + 'px';
            divTags[d].style.height = oh + 'px';

            workspace.ColorBlocksLeft[newnum] = ws.ColorBlocksLeft[num];
            workspace.ColorBlocksTop[newnum] = ws.ColorBlocksTop[num];
            workspace.ColorBlocksWidth[newnum] = ws.ColorBlocksWidth[num];
            workspace.ColorBlocksHeight[newnum] = ws.ColorBlocksHeight[num];
            workspace.ColorBlocksZ[newnum] = ws.ColorBlocksZ[num];
            break;

          case 'image':
            var ox = ws.PlainImagesLeft[num] - 1;
            var oy = ws.PlainImagesTop[num] - 1;
            var ow = ws.PlainImagesWidth[num] - ((alternate) ? 0 : 2);
            var oh = ws.PlainImagesHeight[num] - ((alternate) ? 0 : 2);
            var oz = ws.PlainImagesZ[num];

            //alert([ox, oy, ow, oh, oz].join('\n'));

            divTags[d].parentNode.parentNode.parentNode.parentNode.style.left = ox + 'px';
            divTags[d].parentNode.parentNode.parentNode.parentNode.style.top = oy + 'px';
            divTags[d].parentNode.parentNode.parentNode.parentNode.style.zIndex = oz;
            divTags[d].firstChild.style.width = ow + 'px';
            divTags[d].firstChild.style.height = oh + 'px';

            workspace.PlainImagesLeft[newnum] = ws.PlainImagesLeft[num];
            workspace.PlainImagesTop[newnum] = ws.PlainImagesTop[num];
            workspace.PlainImagesWidth[newnum] = ws.PlainImagesWidth[num];
            workspace.PlainImagesHeight[newnum] = ws.PlainImagesHeight[num];
            workspace.PlainImagesZ[newnum] = ws.PlainImagesZ[num];
            break;

          case 'nav':
            var ox = ws.NavLeft[num];
            var oy = ws.NavTop[num];
            var oz = ws.NavZ[num];

            divTags[d].innerHTML = ws.NavInfo[num];
            divTags[d].style.left = ox + 'px';
            divTags[d].style.top = oy + 'px';
            divTags[d].style.zIndex = oz;

            // set move cursor
            tbl = divTags[d].firstChild;
            for (y = 0; y < tbl.rows.length; y++)
              for (x = 0; x < tbl.rows[y].cells.length; x++)
              {
                tbl.rows[y].cells[x].style.cursor = 'move';
                tbl.rows[y].cells[x].firstChild.style.cursor = 'move';
              }
            tbl.style.cursor = 'move';

            workspace.NavLeft[newnum] = ws.NavLeft[num];
            workspace.NavTop[newnum] = ws.NavTop[num];
            workspace.NavZ[newnum] = ws.NavZ[num];
            workspace.NavInfo[newnum] = ws.NavInfo[num];
            workspace.NavSettings[newnum] = ws.NavSettings[num];
            break;

          case 'text':
            var ox = ws.TextBlocksLeft[num];
            var oy = ws.TextBlocksTop[num];
            var ow = ws.TextBlocksWidth[num] - ((ie) ? 0 : 2);
            var oh = ws.TextBlocksHeight[num] - ((ie) ? 0 : 2);
            var oz = ws.TextBlocksZ[num];

            divTags[d].innerHTML = ws.TextBlocksTextvoid[num];
            divTags[d].style.backgroundColor = obj.style.backgroundColor;
            divTags[d].parentNode.parentNode.parentNode.parentNode.style.left = ox + 'px';
            divTags[d].parentNode.parentNode.parentNode.parentNode.style.top = oy + 'px';
            divTags[d].parentNode.parentNode.parentNode.parentNode.style.width = ws.document.getElementById('textresize'+num).offsetWidth + 'px';
            divTags[d].parentNode.parentNode.parentNode.parentNode.style.height = ws.document.getElementById('textresize'+num).offsetHeight + 'px';
            divTags[d].parentNode.parentNode.parentNode.parentNode.style.zIndex = oz;
            divTags[d].style.width = ow + 'px';
            divTags[d].style.height = oh + 'px';

            workspace.TextBlocksLeft[newnum] = ws.TextBlocksLeft[num];
            workspace.TextBlocksTop[newnum] = ws.TextBlocksTop[num];
            workspace.TextBlocksWidth[newnum] = ws.TextBlocksWidth[num];
            workspace.TextBlocksHeight[newnum] = ws.TextBlocksHeight[num];
            workspace.TextBlocksZ[newnum] = ws.TextBlocksZ[num];
            workspace.TextBlocksText[newnum] = ws.TextBlocksText[num];
            workspace.TextBlocksTextnew[newnum] = ws.TextBlocksTextnew[num];
            workspace.TextBlocksTextvoid[newnum] = ws.TextBlocksTextvoid[num];

            num = divTags[d].id.replace('text', '');
            if (workspace.document.getElementById('trans' + num))
            {
              workspace.document.getElementById('trans' + num).style.left = 0;
              workspace.document.getElementById('trans' + num).style.top = 0;
              workspace.document.getElementById('trans' + num).style.width = ow + 'px';
              workspace.document.getElementById('trans' + num).style.height = oh + 'px';
            }
            break;

          case 'html':
            var ox = ws.HtmlBlocksLeft[num];
            var oy = ws.HtmlBlocksTop[num];
            var ow = ws.HtmlBlocksWidth[num] - ((ie) ? 0 : 2);
            var oh = ws.HtmlBlocksHeight[num] - ((ie) ? 0 : 2);
            var oz = ws.HtmlBlocksZ[num];

            divTags[d].innerHTML = ws.HtmlBlocksText[num];
            divTags[d].style.backgroundColor = obj.style.backgroundColor;
            divTags[d].parentNode.parentNode.parentNode.parentNode.style.left = ox + 'px';
            divTags[d].parentNode.parentNode.parentNode.parentNode.style.top = oy + 'px';
            divTags[d].parentNode.parentNode.parentNode.parentNode.style.width = ws.document.getElementById('htmlresize'+num).offsetWidth + 'px';
            divTags[d].parentNode.parentNode.parentNode.parentNode.style.height = ws.document.getElementById('htmlresize'+num).offsetHeight + 'px';
            divTags[d].parentNode.parentNode.parentNode.parentNode.style.zIndex = oz;
            divTags[d].style.width = ow + 'px';
            divTags[d].style.height = oh + 'px';

            workspace.HtmlBlocksLeft[newnum] = ws.HtmlBlocksLeft[num];
            workspace.HtmlBlocksTop[newnum] = ws.HtmlBlocksTop[num];
            workspace.HtmlBlocksWidth[newnum] = ws.HtmlBlocksWidth[num];
            workspace.HtmlBlocksHeight[newnum] = ws.HtmlBlocksHeight[num];
            workspace.HtmlBlocksZ[newnum] = ws.HtmlBlocksZ[num];
            workspace.HtmlBlocksText[newnum] = ws.HtmlBlocksText[num];

            num = divTags[d].id.replace('html', '');
            if (workspace.document.getElementById('trans' + num))
            {
              workspace.document.getElementById('trans' + num).style.left = 0;
              workspace.document.getElementById('trans' + num).style.top = 0;
              workspace.document.getElementById('trans' + num).style.width = ow + 'px';
              workspace.document.getElementById('trans' + num).style.height = oh + 'px';
            }
            break;
        }
      }
      else
      {
        var num = globalObject[1].id.replace(type, '');
        switch (type)
        {
          case 'colorblock':
            var ox = originalWS.ColorBlocksLeft[num];
            var oy = originalWS.ColorBlocksTop[num];
            var ow = originalWS.ColorBlocksWidth[num];
            var oh = originalWS.ColorBlocksHeight[num];
            var oz = originalWS.ColorBlocksZ[num];
            workspace.setcolorblock(originalObj.innerHTML, ox, oy, ow, oh, oz, name);
            break;

          case 'image':
            var ox = originalWS.PlainImagesLeft[num] - 1;
            var oy = originalWS.PlainImagesTop[num] - 1;
            var ow = originalWS.PlainImagesWidth[num] - ((arguments[2] == 'reattach') ? 2 : 0);
            var oh = originalWS.PlainImagesHeight[num] - ((arguments[2] == 'reattach') ? 2 : 0);
            var oz = originalWS.PlainImagesZ[num];
            workspace.setimage(originalObj.firstChild.src, ox, oy, ow, oh, oz, name/*, oow, ooh*/);
            break;

          case 'nav':
            var ox = originalWS.NavLeft[num];
            var oy = originalWS.NavTop[num];
            var oz = originalWS.NavZ[num];
            var html = originalWS.NavInfo[num];
            var settings = originalWS.NavSettings[originalObj.id.replace('nav', '')];
            workspace.setnavigation(html, settings, ox, oy, oz, name, originalObj.innerHTML);
            break;

          case 'text':
            var ox = originalWS.TextBlocksLeft[num];
            var oy = originalWS.TextBlocksTop[num];
            var ow = originalWS.TextBlocksWidth[num];
            var oh = originalWS.TextBlocksHeight[num];
            var oz = originalWS.TextBlocksZ[num];
            var oc = originalWS.TextBlocksColor[num];
            workspace.settext(originalWS.TextBlocksText[num], ox, oy, ow, oh, oz, name, oc);
            break;

          case 'html':
            var ox = originalWS.HtmlBlocksLeft[num];
            var oy = originalWS.HtmlBlocksTop[num];
            var ow = originalWS.HtmlBlocksWidth[num];
            var oh = originalWS.HtmlBlocksHeight[num];
            var oz = originalWS.HtmlBlocksZ[num];
            workspace.sethtml(originalWS.HtmlBlocksText[num], ox, oy, ow, oh, oz, name);
            break;
        }
      }
    }
  }
}


////////////////////////////////////////////////////////////////////////////////


function centerWindow()
{
  //try
  //{
    var os;
    var obj;
    var objId;
    var repeatInterval = 250;
    var windows = [
      //'tablebuilder',
      //'mainformbuilder',
      'editworkspace',
      'addfiletotree',
      'addfoldertotree',
      'addimagetotree',
      'colorBuilderWindow',
      'deleteobject',
      'detachConfirmWindow',
      'fileRename',
      'fileTreeDialogs',
      'gameselector',
      //'htmlBuilderWindow',
      'inputprops',
      'inserttextwindow',
      'linkBuilderWindow',
      'linkMoverWindow',
      'newWorkspace',
      'openReplaceConfirmWindow',
      'palette',
      'projectwindow',
      'publishWindow',
      'metatagsWindow',
      'removeConfirmWindow',
      'startbuilder',
      'startproject',
      'starttemplate',
      'ws.addlinkwindow',
      'ws.addmailtowindow',
      'ws.addobjecttotable',
      'ws.cellprops',
      'ws.namenewworkspace',
      'ws.saveworkarea',
      'ws.viewimages'
    ];

    //
    // get each open window and center it
    //
    for (i in windows)
    {
      // get window
      objId = windows[i];
      if (objId.indexOf('ws.') == 0)
      {
        if (workspaces.length == 0) continue;
        objId = objId.replace('ws.', '');
        if (ws)
        winObj = ws.document.getElementById(objId);
      }
      else winObj = document.getElementById(objId);

      if (winObj && (winObj.style.display == 'block' || winObj.style.visibility == 'visible')) {
        obj = winObj;
        os = obj.style;
      }
      else continue;

      //
      // disable workspace mouseover and mouseout
      //
      if (ws) {
        if (ws.workspacename) {
          ws.mouseoveroff();
        }
      }

      //
      // center window
      //
      if (windows[i].indexOf('ws.') == 0)
      {
        repeatInterval = 500;
        wwWidth = frames["workspacewindow"+topworkspacenum].document.body.clientWidth;
        wwHeight = frames["workspacewindow"+topworkspacenum].document.body.clientHeight;
        wsWidth = ws.document.body.clientWidth;
        wsHeight = ws.document.body.clientHeight;
        scrollLeft = frames["workspacewindow"+topworkspacenum].document.body.scrollLeft;
        scrollTop = frames["workspacewindow"+topworkspacenum].document.body.scrollTop;
        winWidth = winObj.offsetWidth;
        winHeight = winObj.offsetHeight;

        if (wwWidth < wsWidth)  os.left = (wwWidth / 2) - (winWidth / 2) + scrollLeft;
        else          os.left = (wsWidth / 2) - (winWidth / 2);
        os.top = (wwHeight / 2) - (winHeight / 2) - (wwHeight * 0.15) + scrollTop;
      }
      /*
      else if (objId == 'tablebuilder' || objId == 'mainformbuilder')
      {
        margin = 30;
        topmargin = 50;
        os.left = margin;
        os.width = document.body.clientWidth - (margin * 2);
        os.top = topmargin;
        os.height = (document.body.clientHeight - topmargin) - margin;
      }
      */
      else
      {
        if (editingWorkspace == null) editingWorkspace = true;
        w = obj.offsetWidth / 2;
        h = obj.offsetHeight / 2;
        obj = document.getElementById('workarea');
        x = getX(obj) + (obj.offsetWidth / 2) - w;
        y = getY(obj) + (obj.offsetHeight / 2) - h;
        y -= obj.offsetHeight * 0.1;
        if (y < 40) y += obj.offsetHeight * 0.14;
        if (x < 0) x = (document.body.clientWidth / 2) - w;
        os.left = x + 'px';                    // ((document.body.clientWidth / 2) - w)
        os.top = y + 'px';                    // ((document.body.clientHeight * 0.3) - h)
      }
    }

    //
    // exit centerWindow() loop if no windows are open
    //
    if (!os)
    {
      if (ws) {
        if (ws.workspacename) {
          ws.mouseoveron();
        }else{
          setMO_onint=setInterval("if (ws.MO_on) { ws.mouseoveron();clearInterval(setMO_onint) }", 10);
        }
      }
      clearInterval(centerWindowTimer);
      centerWindowTimer = null;
      editingWorkspace = null;
      return;
    }

    //
    // repeat centerWindow function
    //
    if (!centerWindowTimer)
    {
      centerWindowTimer = setInterval('centerWindow()', repeatInterval);
    }
  //}
  //catch (e) {}
}



function cancelFileDragging()
{
  frames.fileSelector.mouseUp();
  frames.fileSelector.dragObj = null;
  frames.fileSelector.fileDrag = null;
  frames.fileSelector.fileDragTo = null;
  frames.fileSelector.fileDragFrom = null;
  frames.fileSelector.fileDragInt = 0;
  document.getElementById('floatingFile').style.visibility = 'hidden';
  document.getElementById('pageHider').style.left = 0;
  document.getElementById('pageHider').style.top = 0;
  document.getElementById('pageHider').style.width = '100%';
  document.getElementById('pageHider').style.height = '100%';
  document.getElementById('pageHider').style.visibility = 'hidden';
  draggingFile = false;
}



function cancelPanelResizing()
{
  sidebarResize = null;
  panelResizeObject = null;
  if (panelResizeBar)
    panelResizeBar.style.background = '#0023BC';
  document.getElementById('pageHider').style.visibility = 'hidden';
  document.getElementById('sidebarResizeBar').style.visibility = 'hidden';
  panelResizeBar = null;
  onResize();
}



function workspacePositionX()
{
  return frames[topworkspacename].document.getElementById(topiframename).offsetLeft + getX(document.getElementById(topworkspacename));
}

function workspacePositionY()
{
  return frames[topworkspacename].document.getElementById(topiframename).offsetTop + getY(document.getElementById(topworkspacename));
}


function logOut() {
  var ele=window.confirm("Logging out will close all open projects and/or workspaces.\n\nDo you still want to log out?");
  if (ele) {
    location.replace("index.pl?logOut=1");
  }
}


















////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


















function contextMenu(e)
{
  e = (ie) ? event : e;
  obj = (ie) ? e.srcElement : e.target;

  if (obj.tagName != 'INPUT' && obj.tagName != 'TEXTAREA')
    return false;
}



function mouseOver(e)
{
  e = (ie) ? event : e;
  obj = (ie) ? e.srcElement : e.target;
  pobj = obj.parentNode;
  ppobj = pobj.parentNode;

  // if entering the main window, reset dragging etc.
  if (!ie && obj.tagName == 'BODY')
    cancelPanelResizing();

  // panel buttons
  if (obj.className == 'panelBtn' && ie)
  {
    document.getElementById('btnEdit').src = imagepath + '/btn_edit' + document.getElementById('btnEdit').getAttribute('down') + ((document.getElementById('btnEdit') == obj) - 0) + '.jpg';
    document.getElementById('btnPreview').src = imagepath + '/btn_preview' + document.getElementById('btnPreview').getAttribute('down') + ((document.getElementById('btnPreview') == obj) - 0) + '.jpg';
    document.getElementById('btnViewSource').src = imagepath + '/btn_viewsource' + document.getElementById('btnViewSource').getAttribute('down') + ((document.getElementById('btnViewSource') == obj) - 0) + '.jpg';
    document.getElementById('btnSaveWorkspace').src = imagepath + '/btn_saveworkspace' + document.getElementById('btnSaveWorkspace').getAttribute('down') + ((document.getElementById('btnSaveWorkspace') == obj) - 0) + '.jpg';
    document.getElementById('btnTutorial').src = imagepath + '/btn_tutorial' + document.getElementById('btnTutorial').getAttribute('down') + ((document.getElementById('btnTutorial') == obj) - 0) + '.jpg';
    return;
  }

  // if object is an image, select the parent
  if (obj.tagName == 'IMG')
  {
    obj = pobj;
    pobj = obj.parentNode;
  }

  // clear the highlighted toolbar buttons
  if (highlightedToolBtns.length > 0)
  {
    for (i in highlightedToolBtns)
    {
      o = highlightedToolBtns[i];
      o.className = o.className.replace('Hover', '');
    }
    highlightedToolBtns = [];
  }

  // linkMoverItem
  if (!obj.className) return;
  if (obj.className == 'linkMoverItem')
  {
    if (dragObj)
    {
      name = obj.innerHTML;
      url = obj.getAttribute('url');
      obj.innerHTML = dragObj.innerHTML;
      obj.setAttribute('url', dragObj.getAttribute('url'));
      dragObj.setAttribute('url', url);
      dragObj.innerHTML = name;
      dragObj = obj;
      obj.style.background = 'highlight';
      obj.style.color = 'highlighttext';
    }
    else
    {
      obj.style.background = '#EEE';
      obj.style.color = 'black';
    }
  }

  // toolbar items - up
  else if (obj.className.indexOf('toolBtn') == 0 && obj.className != 'toolBtnCaption')
  {
    if (obj.className.indexOf('toolBtnDown') == 0)
      obj.className = 'toolBtnDownHover';
    else if (obj.className.indexOf('toolBtn') == 0)
      obj.className = 'toolBtnHover';
    highlightedToolBtns.push(obj);
  }

  // selector window list item
  else if (obj.className.indexOf('selectorItem') == 0)
  {
    // initialize
    selector = obj.parentNode.parentNode.parentNode;
    id = selector.getAttribute('id');
    index = selector.getAttribute('index');

    // hint window
    if (hintText = obj.getAttribute('hint'))
    {
      document.getElementById('selectorHint').style.display = 'block';
      document.getElementById('selectorHint').style.left = getX(obj) + obj.parentNode.parentNode.parentNode.offsetWidth + 5;
      document.getElementById('selectorHint').style.top = getY(obj) - ((document.getElementById('selectorHint').offsetHeight - obj.offsetHeight) / 2);
      document.getElementById('selectorHint').rows[0].cells[0].innerHTML = hintText;
    }
    else document.getElementById('selectorHint').style.display = 'none';
    
    // highlight
    try
    {
      if (index) selector.rows[index].cells[0].className = 'selectorItem';
      selector.setAttribute('index', obj.rowIndex);
      if (ie) obj.className = 'selectorItemOn';
    }
    catch (e) {return false;}
  }
}



function mouseOut(e)
{
  e = (ie) ? event : e;
  obj = (ie) ? e.srcElement : e.target;

  // if leaving the main window, reset dragging etc.
  //if (obj.tagName == 'BODY')
  //  cancelPanelResizing();

  if (draggingFile)
    return;

  if (!obj.className)
    return;

  // panel buttons
  if (obj.className == 'panelBtn')
  {
    document.getElementById('btnSaveWorkspace').src = imagepath + '/btn_saveworkspace' + document.getElementById('btnSaveWorkspace').getAttribute('down') + '0.jpg';
    document.getElementById('btnTutorial').src = imagepath + '/btn_tutorial' + document.getElementById('btnTutorial').getAttribute('down') + '0.jpg';
    if (!ie) return;

    document.getElementById('btnEdit').src = imagepath + '/btn_edit' + document.getElementById('btnEdit').getAttribute('down') + '0.jpg';
    document.getElementById('btnPreview').src = imagepath + '/btn_preview' + document.getElementById('btnPreview').getAttribute('down') + '0.jpg';
    document.getElementById('btnViewSource').src = imagepath + '/btn_viewsource' + document.getElementById('btnViewSource').getAttribute('down') + '0.jpg';
    return;
  }

  // if object is an image, select the parent
  if (obj.tagName == 'IMG')
  {
    obj = pobj;
    pobj = obj.parentNode;
  }

  // linkMoverItem
  if (obj.className == 'linkMoverItem')
  {
    obj.style.background = '#FAFAFA';
    obj.style.color = 'black';
  }

  // toolbar items - up
  else if (obj.className.indexOf('toolBtn') == 0 && obj.className != 'toolBtnCaption')
  {
    for (i in highlightedToolBtns)
    {
      o = highlightedToolBtns[i];
      o.className = o.className.replace('Hover', '');
    }
    highlightedToolBtns = [];
  }

  // selector window list item
  else if (obj.className.indexOf('selectorItem') == 0)
  {
    if (ie) obj.className = 'selectorItem';
  }
}



function mouseMove(e)
{
  e = (ie && !e) ? event : e;
  obj = (ie) ? e.srcElement : e.target;

  floatingFileObj = document.getElementById('floatingFile');

  // remove file dragging from fileSelector and begin dragging in the main window
  if (frames.fileSelector && frames.fileSelector.fileDrag)
  {
    floatingFileObj.style.left = 0;
    floatingFileObj.style.top = 0;
    floatingFileObj.style.visibility = 'visible';
    frames.fileSelector.fileDrag.style.visibility = 'hidden';
    draggingFile = true;
  }

  // dragging file
  if (draggingFile)
  {
    if (editingWorkspace || workspaces.length == 0) return cancelFileDragging();

    // if a workspace isn't open and dragging an image, return
    //if (ws) {
      if ((ws.viewMode != 0 || !ws.workspacename) && !frames.fileSelector.objectpath.match(/\.html?$/))
      {
        floatingFileObj.style.visibility = 'hidden';
        frames.fileSelector.fileDrag = false;
        frames.fileSelector.mouseUp();
        draggingFile = false;
        if (ws.viewMode != 0) alert('You must be in edit mode to perform this action.');
        return;
      }
    //}

    // show and position the floating file element
    if (floatingFileObj.style.visibility != 'visible')
      floatingFileObj.style.visibility = 'visible';
    floatingFileObj.style.left = e.clientX - frames.fileSelector.startOffset.x;
    floatingFileObj.style.top = e.clientY - frames.fileSelector.startOffset.y;

    document.getElementById('pageHider').style.width = '200px';
    document.getElementById('pageHider').style.height = '200px';
    document.getElementById('pageHider').style.left = (e.clientX - 100) + 'px';
    document.getElementById('pageHider').style.top = (e.clientY - 100) + 'px';
    document.getElementById('pageHider').style.visibility = 'visible';

    if (!frames.fileSelector.objectpath || frames.fileSelector.objectpath.match(/\.html?$/)) return;

    workspaceiframe = frames["workspacewindow"+topworkspacenum].document.getElementById(topiframename);
    l = getX(workspaceiframe);
    t = getY(workspaceiframe);
    r = getX(workspaceiframe) + workspaceiframe.offsetWidth;
    b = getY(workspaceiframe) + workspaceiframe.offsetHeight;
    if (e.clientX >= l && e.clientX <= r && e.clientY >= t && e.clientY <= b)
    {
      ws.setimage(frames.fileSelector.objectpath, 'center');
      ws.buttonnum = num = (imageobjects-1);
      ws.itemtoberemoved = id = 'image' + num;
      ws.o_borg=ws.document.getElementById('imageresize' + num);
      ws.o_b = ws.document.getElementById('imageresize' + num).style;
      ws.imagename = id;
      //ws.document.onmouseover = null;
      //ws.document.onmouseout = null;

      ws.document.getElementById('imageresizeb' + num).style.visibility = 'visible';
      ws.document.getElementById('image' + num).style.border = '#666 1px solid';
      ws.document.getElementById('image' + num).style.cursor = 'move';
      ws.document.getElementById('image' + num).style.margin = '0';
      ws.whichmenu(e, 'image', '5');

      mouseUp(e);
    }
  }

  // panel resizing
  if (panelResizeObject)
  {
    if ((ie && e.button == 0) || (!ie && e.which == 0))
      return cancelPanelResizing();

    // if sidebarResize, exit
    if (sidebarResize)
    {
      bar = document.getElementById('sidebarResizeBar');
      bar.style.left = e.clientX - sidebarResizeOrigin;
      return false;
    }

    // cancel resize if object is hidden
    if (panelResizeObject.style.display == 'none')
      return cancelPanelResizing();

    // perform resize
    try
    {
      if (panelResizeVertical)
      {
        switch (panelResizeObject.id)
        {
          case 'informationPanelDiv':    percentLimit = 0.6;    break;
          case 'filetreepreview':      percentLimit = 0.7;    break;
          default:            percentLimit = 0.6;    break;
        }
        if (!ie) percentLimit -= 0.1;
        newSize = panelResizeObject.offsetHeight + (panelResizeOrigin - e.clientY);
        parentSize = panelResizeObject.parentNode.parentNode.offsetHeight;

        if (newSize / parentSize <= percentLimit)
        {
          panelResizeObject.style.height = newSize + 'px';
          panelResizeOrigin = e.clientY;
        }
        else panelResizeObject.style.height = (parentSize * percentLimit) + 'px';

        if (panelResizeObject.id == 'filetreepreview')
          frames.fileSelector.updatePreviewPane();
      }
      else
      {
        switch (panelResizeObject.id)
        {
          case 'sidebar':      percentLimit = 0.36;  break;
          default:        percentLimit = 0.5;    break;
        }
        newSize = panelResizeObject.offsetWidth + (panelResizeOrigin - e.clientX);
        parentSize = panelResizeObject.parentNode.parentNode.offsetWidth;

        if (newSize / parentSize <= percentLimit)
        {
          panelResizeObject.style.width = newSize + 'px';
          panelResizeOrigin = e.clientX;
        }
        else panelResizeObject.style.width = (parentSize * percentLimit) + 'px';
      }
    } catch (e) {}
    return false;
  }
}



function mouseDown(e)
{
  e = (ie) ? event : e;
  obj = (ie) ? e.srcElement : e.target;
  pobj = obj.parentNode;

  // close current workspace's menu
  if (workspaces.length > 0)
    try {ws.hidemenu();} catch (ex) {}

  // close all selector windows
  if (obj.className.indexOf('selectorItem') != 0 && obj.className != 'selectorWindow')
    closeSelector();


  // mainbottom
  newobj = obj;
  while (newobj.parentNode && newobj.className != 'mainbottom')
    newobj = newobj.parentNode;
  if (newobj.className == 'mainbottom')
  {
    panelResizeBar = newobj.firstChild;
    if (panelResizeObject || !newobj.getAttribute('resize')) return;
    document.getElementById('pageHider').style.cursor = 's-resize';
    document.getElementById('pageHider').style.visibility = 'visible';
    panelResizeObject = document.getElementById(newobj.getAttribute('resize'));
    if (panelResizeObject.offsetHeight == 0) return cancelPanelResizing();
    panelResizeOrigin = e.clientY;
    panelResizeVertical = true;
    return false;
  }


  // mainright
  else if (obj.className == 'mainright')
  {
    if (document.getElementById('fileTreeDiv').style.display == 'none')
      return false;
    document.getElementById('pageHider').style.visibility = 'visible';
    if (obj.id == 'sidebar_sep')
    {
      sidebarResize = true;
      bar = document.getElementById('sidebarResizeBar');
      bar.style.visibility = 'visible';
      bar.style.left = getX(document.getElementById('sidebar_sep'));
      bar.style.top = getY(document.getElementById('sidebar_sep'));
      bar.style.height = document.getElementById('sidebar_sep').offsetHeight - 1;
      bar.style.width = document.getElementById('sidebar_sep').offsetWidth;
      sidebarResizeOrigin = e.clientX - parseInt(bar.style.left);
    }
    document.getElementById('pageHider').style.cursor = 'e-resize';
    panelResizeObject = document.getElementById(obj.getAttribute('resize'));
    panelResizeOrigin = e.clientX;
    panelResizeVertical = null;
    return false;
  }

  // mainleft
  else if (obj.className == 'mainleft')
  {
    if (document.getElementById('helpbariframe').style.display != 'block')
      return false;
    document.getElementById('pageHider').style.visibility = 'visible';
    if (obj.id == 'helpbar_sep')
    {
      sidebarResize = true;
      bar = document.getElementById('sidebarResizeBar');
      bar.style.visibility = 'visible';
      bar.style.left = getX(document.getElementById('helpbar_sep'));
      bar.style.top = getY(document.getElementById('helpbar_sep'));
      bar.style.height = document.getElementById('helpbar_sep').offsetHeight - 1;
      bar.style.width = document.getElementById('helpbar_sep').offsetWidth;
      sidebarResizeOrigin = e.clientX - parseInt(bar.style.left);
    }
    document.getElementById('pageHider').style.cursor = 'e-resize';
    panelResizeObject = document.getElementById(obj.getAttribute('resize'));
    panelResizeOrigin = e.clientX;
    panelResizeVertical = null;
    return false;
  }

  // panel buttons
  else if (obj.className == 'panelBtn')
  {
    if (editingWorkspace) return;
    switch (obj.id)
    {
      case 'btnEdit':        setViewMode(0, 1);  break;
      case 'btnPreview':      setViewMode(1, 1);  break;
      case 'btnViewSource':    setViewMode(2, 1);  break;
      case 'btnSaveWorkspace':  document.getElementById('btnSaveWorkspace').src = imagepath + '/btn_saveworkspace11.jpg';  break;
      case 'btnTutorial':      document.getElementById('btnTutorial').src = imagepath + '/btn_tutorial11.jpg';        break;
    }    
    return false;
  }

  // linkMoverItem
  else if (obj.className == 'linkMoverItem')
  {
    dragObj = obj;
    obj.style.background = 'highlight';
    obj.style.color = 'highlighttext';
    return false;
  }

  // toolbar items - down
  else if (pobj.className.indexOf('toolBtnDown') == 0 && !pobj.getAttribute('group'))
  {
    pobj.className = 'toolBtn';
    lbUpdate();
  }

  else if (obj.className.indexOf('toolBtnDown') == 0 && !obj.getAttribute('group'))
  {
    obj.className = 'toolBtn';
    lbUpdate();
  }

  // toolbar items - up
  else if (pobj.className.indexOf('toolBtn') == 0)
  {
    group = pobj.getAttribute('group');
    if (group == 0)
    {
      document.getElementById('toolBtnLeft').className = 'toolBtn';
      document.getElementById('toolBtnCenter').className = 'toolBtn';
      document.getElementById('toolBtnRight').className = 'toolBtn';
    }
    if (group == 1)
    {
      document.getElementById('textToolBtnLeft').className = 'toolBtn';
      document.getElementById('textToolBtnCenter').className = 'toolBtn';
      document.getElementById('textToolBtnRight').className = 'toolBtn';
    }
    pobj.className = 'toolBtnDown';
    lbUpdate();
  }

  else if (obj.className.indexOf('toolBtn') == 0 && obj.className != 'toolBtnCaption')
  {
    group = obj.getAttribute('group');
    if (group == 0)
    {
      document.getElementById('toolBtnLeft').className = 'toolBtn';
      document.getElementById('toolBtnCenter').className = 'toolBtn';
      document.getElementById('toolBtnRight').className = 'toolBtn';
    }
    if (group == 1)
    {
      document.getElementById('textToolBtnLeft').className = 'toolBtn';
      document.getElementById('textToolBtnCenter').className = 'toolBtn';
      document.getElementById('textToolBtnRight').className = 'toolBtn';
    }
    obj.className = 'toolBtnDown';
    lbUpdate();
  }

  // toolSelect || toolSelectCenter
  else if (obj.className.indexOf('toolSelect') == 0)
  {
    obj.className = obj.className.replace('On','') + 'On';
    selector = obj.getAttribute('selector');
    openSelector(selector, obj);
  }

  // selectorItem
  else if (obj.className.indexOf('selectorItem') == 0)
  {
    obj = obj.parentNode;
    closeSelector(true, obj.rowIndex);
    lbUpdate();
  }

  return true;
}



function mouseUp(e)
{
  try
  {
    e = (ie && !e) ? event : e;
    obj = (ie) ? e.srcElement : e.target;
    pobj = obj.parentNode;

    clearInterval(workspaceSizeTimer);
    clearTimeout(tabScrollDelayTimeout);
    tabScrollDelayTimeout = null;
    workspaceSizeTimer = null;

    // clear file dragging
    if (draggingFile)
    {
      openWorkspace(frames.fileSelector.objectpath, e);
      cancelFileDragging();
    }

    // resize sidebar
    if (sidebarResize)
    {
      if (panelResizeObject.id == 'sidebar')
      {
        newSize = document.body.clientWidth - (parseInt(document.getElementById('sidebarResizeBar').style.left) + parseInt(document.getElementById('sidebarResizeBar').style.width) + 1);
        if (newSize < 0) newSize = 10;
        document.getElementById('sidebar').style.width = newSize + 'px';
        updatePreviewPane();
      }
      else if (panelResizeObject.id == 'helpbariframe')
      {
        newSize = parseInt(document.getElementById('sidebarResizeBar').style.left) - document.getElementById('helpbar').style.borderLeftWidth - document.getElementById('helpbar').style.borderRightWidth - (ie ? 2 : 3);
        if (newSize < 0) newSize = 10;
        document.getElementById('helpbariframe').style.width = newSize + 'px';
      }
      onResize();
    }

    // reset variables
    if (obj.id == 'btnSaveWorkspace')  obj.src = imagepath + '/btn_saveworkspace01.jpg';
    if (obj.id == 'btnTutorial')    obj.src = imagepath + '/btn_tutorial01.jpg';
    document.body.scrollLeft = 0;
    document.body.scrollTop = 0;
    if (sidebarResize || panelResizeObject)
      cancelPanelResizing();
    dragObj = null;
    hidemenu();

    // linkMoverItem
    if (obj.className == 'linkMoverItem')
    {
      obj.style.background = '#EEE';
      obj.style.color = 'black';
    }

    // selectorItem
    else if (obj.className.indexOf('selectorItem') == 0)
    {
      obj = obj.parentNode;
      closeSelector(true, obj.rowIndex);
      lbUpdate();
    }
  }
  catch (ex) {}
}

var workspace_props = {};
function workspace_prop () {
  if (! workspace_props[topiframename])
    workspace_props[topiframename] = {
      'snap_x' : false,
      'snap_y' : false,
      'grid_x' : '15',
      'grid_y' : '15'
    };
  return workspace_props[topiframename];
}


function onResize()
{
  try
  {
    document.getElementById('projectTabs').style.width = (document.getElementById('sidebar').offsetWidth + 2) + 'px';
    scrollWorkspaceTabs();
    closeSelector();
    centerWindow();

    wswin = frames[topworkspacename].document;
    b = (wswin.getElementById(topiframename).offsetWidth > wswin.body.clientWidth - 1);
    wswin.body.style.margin = (b) ? '0' : '8px 0';
  }
  catch (e) {}
}



////////////////////////////////////////////////////////////////////


document.oncontextmenu = contextMenu;
document.onmouseover = mouseOver;
document.onmousemove = mouseMove;
document.onmousedown = mouseDown;
document.onmouseout = mouseOut;
document.onmouseup = mouseUp;
window.onresize = onResize;
document.ondragstart = new Function('return false');
