function DoNothing()
{
 return false;
}

function GoToURL(url)
{
 top.location=url;
}

// Online Document related functions
function ColorToHex(color)
{
 color = color.toLowerCase();
 color = color.replace(/ /g,"");
 if (color == "") return "";
 if (color.indexOf('#') != -1) return color;
 //alert(color+"index: "+color.indexOf('rgb'));
 
 if (color.indexOf('rgb') != -1)
 {
  Red = color.substr(color.indexOf('(')+1,3);
  Green = color.substr(color.indexOf(',')+1,3);
  color = color.substr(color.indexOf(',')+1);
  Blue = color.substr(color.indexOf(',')+1,3);
  //alert("#"+RGBtoHex(Red,Green,Blue));
  return "#"+RGBtoHex(Red,Green,Blue);
 }
 else
 {
  return "";
 }
}

function RGBtoHex(R,G,B) {return toHex(R)+toHex(G)+toHex(B)}

function toHex(decNum) {
 if (decNum == null) return "00";
 decNum = parseInt(decNum);
 if (decNum == 0 || isNaN(decNum)) return "00";
 decNum = Math.max(0,decNum);
 decNum = Math.min(decNum,255);
 decNum = Math.round(decNum);
 
 return "0123456789ABCDEF".charAt((decNum-decNum%16)/16)+"0123456789ABCDEF".charAt(decNum%16);
}


function ChangeTOCItemDisplay(eventTxt, tocSeq)
{
 hoverBgColor = "#6d8abc";
 defaultBgColor = "#ffffff";
 selectedBgColor = "#888888";
 selectedhoverBgColor = "#888888";
 
 if (eventTxt == "onmouseover")
 {
  elNam = "toc"+tocSeq;
  elID = document.getElementById(elNam);
  if (elID != null)
  {
   if (ColorToHex(elID.style.backgroundColor) == selectedBgColor)
   {
    elID.style.backgroundColor = selectedhoverBgColor;
   }
   else
   {
    elID.style.backgroundColor = hoverBgColor;
   }
   elID.style.cursor = 'pointer';
  }
 }
 if (eventTxt == "onmouseout")
 {
  elNam = "toc"+tocSeq;
  elID = document.getElementById(elNam);
  if (elID != null)
  {
   if (ColorToHex(elID.style.backgroundColor) == selectedhoverBgColor)
   {
    elID.style.backgroundColor = selectedBgColor;
   }
   else
   {
    elID.style.backgroundColor = defaultBgColor;
   }
   //elID.style.cursor = 'pointer';
  }
 }
 if (eventTxt == "onclick")
 {
  //alert("in onclick event handler"+tocSeq);
  for (i=1;i<=1000;i++)
  {
   elNam = "toc"+i;
   elID = document.getElementById(elNam);
   if (elID != null)
   {
    if (i == tocSeq)
    {
     //alert("found clicked on item"+elID.style.backgroundColor);
     elID.style.backgroundColor = selectedhoverBgColor;
    }  
    else
    {
     elID.style.backgroundColor = defaultBgColor;
    }
   }
   else
   {
    break;
   }
  }
 }
 return;
}

function UpdateTOCBreadCrumb(docID,contentID,tocSeq,searchExp)
{
 if (searchExp != '')
 {
  bcTxt = '<span class="breadcrumbtext">Results of your search for <strong>'+searchExp+'</strong>:</span>';
  if (document.getElementById('docbreadcrumb') != null) document.getElementById('docbreadcrumb').innerHTML = bcTxt;
  return;
 }
 bcTxt = '';
 varNam = "toc"+tocSeq;
 varID = document.getElementById(varNam);
 if (varID != null)
 {
  className = varID.className;
  startTOCItemLev =  className.substr(className.indexOf("toc")+3);
  bcTxt = varID.innerHTML;
  startIdx = tocSeq - 1;
  for (i=startIdx;i>=1;i--)
  {
   varNam = "toc"+i;
   varID = document.getElementById(varNam);
   if (varID != null)
   {
    onClickEventFunction = varID.onclick+"";
    onClickEventFunction = onClickEventFunction.substr(onClickEventFunction.indexOf('{')+1);
    onClickEventFunction = onClickEventFunction.replace(/}/g,"");
    onClickEventFunction = onClickEventFunction.replace(/;/g,"");
    className = varID.className;
    tocItemLev =  className.substr(className.indexOf("toc")+3);
    if ((startTOCItemLev - tocItemLev) == 1)
    {
     startTOCItemLev--;
     bcTxt = '<a href="#" onclick="javascript:'+onClickEventFunction+';return false;">'+varID.innerHTML+'</a>'+" &gt; "+bcTxt;
    }
   }
  }
 }
 bcTxt = '<span class="breadcrumbtext">'+bcTxt+'</span>';
 //bcTxt = '<span class="caption">'+bcTxt+'</span>';
 if (document.getElementById('docbreadcrumb') != null) document.getElementById('docbreadcrumb').innerHTML = bcTxt;
 return;
}

// JavaScript to connect to MySQL database via PHP queries
var xmlhttp01;
var xmlhttp02;

// Document content SQL dynamic update functions
function ShowDocContent(docID, itemID, tocSeq, whereExp)
{
 // show loading user feedback text
 //document.getElementById("doccontent").innerHTML='<p class="doc_paragraph">loading... &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>';
 
 xmlhttp01=GetXmlHttpObject();
 if (xmlhttp01==null)
 {
  alert ("Browser does not support HTTP Request");
  return;
 }
 var url="getdoccontent.php";
 url=url+"?d="+docID;
 url=url+"&i="+itemID;
 url=url+"&w="+whereExp;
 url=url+"&sid="+Math.random();
 xmlhttp01.onreadystatechange=DocStateChanged;
 xmlhttp01.open("GET",url,true);
 xmlhttp01.send(null);
}

function DocStateChanged()
{
 if (xmlhttp01.readyState==4)
 {
  document.getElementById("doccontent").innerHTML=xmlhttp01.responseText;
 }
}


// TOC content SQL dynamic update functions

function ShowTOC(docID, tocLev, whereExp)
{
 // show loading user feedback text
 document.getElementById("doctoc").innerHTML='<p class="doc_paragraph">loading... &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>';
 

 xmlhttp02=GetXmlHttpObject();
 if (xmlhttp02==null)
 {
  alert ("Browser does not support HTTP Request");
  return;
 }
 var url="getdoctoc.php";
 url=url+"?d="+docID;
 url=url+"&l="+tocLev;
 url=url+"&w="+whereExp;
 url=url+"&sid="+Math.random();
 xmlhttp02.onreadystatechange=TOCStateChanged;
 xmlhttp02.open("GET",url,true);
 xmlhttp02.send(null);
}

function TOCStateChanged()
{
 if (xmlhttp02.readyState==4)
 {
  document.getElementById("doctoc").innerHTML=xmlhttp02.responseText;
 }
}

function GetXmlHttpObject()
{
 if (window.XMLHttpRequest)
 {
  // code for IE7+, Firefox, Chrome, Opera, Safari
  return new XMLHttpRequest();
 }
 if (window.ActiveXObject)
 {
  // code for IE6, IE5
  return new ActiveXObject("Microsoft.XMLHTTP");
 }
 return null;
}


function SaveHTMLToContent(cleanHTML,tarContentIdx,numTOCItems)
{
 //alert("numTocItems: "+numTOCItems);
 parArr = new Array();
 var lowerHTML,startPos,numHeaders,txt,varNam,i,j;
 // see if headers are defined
 lowerHTML = cleanHTML.toLowerCase();
 startPos = lowerHTML.indexOf('<p class="doc_header_');
 //alert("startPos: "+startPos);
 if (startPos >= 0)
 {
  // there are headers defined in textarea text
  parArr = cleanHTML.split('<p class="doc_header_');
  numHeaders = parArr.length;
  txt = '';
  for (i=0;i<numHeaders;i++)
  {
   txt = txt+"\n["+i+"]: "+parArr[i];
  }
  //alert(txt);
  numHeaders--;
  //alert("numH: "+numHeaders);
  if (startPos == 0)
  {
   // no extra text for current content
   // copy empty text to current hidden content variable
   varNam = "content"+tarContentIdx;
   ApplyValToElement(varNam,'','');
   // copy all hidden content variables with offset = numHeaders down
   for (i=numTOCItems;i>tarContentIdx;i--) 
   {
    j = i*1+numHeaders;
    //alert("copy from "+i+" to "+j);
    CopyDocContent(i,j,false);
   }
   for (i=1;i<=numHeaders;i++)
   {
    curParTxt = trim(parArr[i]);
    numCharsTxt1 = curParTxt.indexOf('</p>')*1+4;
    tmpTxt1 = '<p class="doc_header_'+curParTxt.substr(0,numCharsTxt1);
    if (curParTxt.length > numCharsTxt1)
    {
     tmpTxt2 = trim(curParTxt.substr(numCharsTxt1));
    }
    else
    {
     tmpTxt2 = '';
    }
    newContentIdx = tarContentIdx*1+i;
    //alert("ContentIdx: "+newContentIdx+"\nHeader: "+tmpTxt1+"\nText: "+tmpTxt2);
    varNam = "toccontent"+newContentIdx;
    ApplyValToElement(varNam,tmpTxt1,'');
    varNam = "content"+newContentIdx;
    ApplyValToElement(varNam,tmpTxt2,'');
    varNam = "contentid"+newContentIdx;
    ApplyValToElement(varNam,-1,'');
   }
  }
  else
  {
   // extra text for current content exists
   // copy text to current hidden content variable
   varNam = "content"+tarContentIdx;
   ApplyValToElement(varNam,trim(parArr[0]),'');

   // copy all hidden content variables with offset = numHeaders down
   for (i=numTOCItems;i>tarContentIdx;i--) 
   {
    j = i*1+numHeaders;
    //alert("copy from "+i+" to "+j);
    CopyDocContent(i,j,false);
   }
   for (i=1;i<=numHeaders;i++)
   {
    curParTxt = trim(parArr[i]);
    //alert(curParTxt);
    numCharsTxt1 = curParTxt.indexOf('</p>')*1+4;
    tmpTxt1 = '<p class="doc_header_'+curParTxt.substr(0,numCharsTxt1);
    if (curParTxt.length > numCharsTxt1)
    {
     tmpTxt2 = trim(curParTxt.substr(numCharsTxt1));
    }
    else
    {
     tmpTxt2 = '';
    }
    //alert("Header: "+tmpTxt1+"\nText: "+tmpTxt2);
    newContentIdx = tarContentIdx*1+i;
    varNam = "toccontent"+newContentIdx;
    ApplyValToElement(varNam,tmpTxt1,'');
    varNam = "content"+newContentIdx;
    ApplyValToElement(varNam,tmpTxt2,'');
    varNam = "contentid"+newContentIdx;
    ApplyValToElement(varNam,-1,'');
   }
  }
 }
 else
 {
  // copy cleanHTML to current hidden content varaiable 
  varNam = "content"+tarContentIdx;
  ApplyValToElement(varNam,cleanHTML,'');
 }
 //alert("returning");
}
 

function CleanTinyHTML(textAreaID)
{
 // check if the textarea is empty except for residu code left in by tinyMCE
 tinyID = tinyMCE.getInstanceById(textAreaID);
 if (tinyID != null)
 {
  tmpVal = tinyID.getBody().innerHTML;
  checkVal = StripHTML(tmpVal);
  checkVal = StripTxt(checkVal,'&nbsp;');
  //alert(checkVal);
  checkVal = trim(checkVal);
  if (checkVal != '')
  {
   // convert remaining html tags to lowercase
   tmpVal = ConvertUpperHTMLToLowerHTML(tmpVal);
   // get rid of <br> put in not at demand by tinyMCE
   tmpVal = StripTxt(tmpVal,'<br>');
   // delete class definitions without quotes
   tmpVal = StripRegExp(tmpVal,/class=[A-Za-z0-9_][A-Za-z0-9_]*\ /gi);
   // add space after <p> for split to work correctly
   //alert("before:"+tmpVal);
   tmpVal = tmpVal.replace(/<p>/g,'<p class="doc_paragraph">');
   tmpVal = tmpVal.replace(/<p style="">/g,'<p class="doc_paragraph">');
   tmpVal = tmpVal.replace(/<p class="doc_paragraph"><\/p>/g,'');
   //alert("after:"+tmpVal);
   // delete all &nbsp; character sequences from content
   //tmpVal = StripTxt(tmpVal,'&nbsp;');
   // trim any extra spaces 
   tmpVal = trim(tmpVal);
   //alert(tmpVal);
   return tmpVal;
  }
  else
  {
   return '';
  }
 }
 return '';
}


function RefreshDocContent()
{
 docHTML = '';
 for (i=1;i<=250;i++)
 {
  varNam = 'toccontent'+i;
  varID = document.getElementById(varNam)
  if (varID != null)
  {
   if (varID.value == '') break; 
   docHTML = docHTML + trim(varID.value);
  }
  varNam = 'content'+i;
  varID = document.getElementById(varNam)
  if (varID != null)
  {
   if (trim(varID.value) != '')
   {
    docHTML = docHTML + trim(varID.value);
    //alert(varNam+": "+trim(varID.value));
   } 
  }
 }
 document.getElementById('doc2').innerHTML = docHTML;
}

function ConvertUpperHTMLToLowerHTML(tmpVal)
{
 var regExp = /<[a-zA-Z]*[A-Z]+[a-zA-Z]*/g;
 tmpVal = tmpVal.replace(regExp,function(word){return word.toLowerCase();});
 
 var regExp = /<\/[a-zA-Z]*[A-Z]+[a-zA-Z]*/g;
 tmpVal = tmpVal.replace(regExp,function(word){return word.toLowerCase();});

 return tmpVal;
}

function StripHTML (inStr)
{
 var matchTag = /<(?:.|\s)*?>/g;
 
 return inStr.replace(matchTag,"");
}

function StripRegExp (inStr,regExp)
{
 return inStr.replace(regExp,"");
}

function StripTxt (inStr,findStr)
{
 outStr = inStr;
 lowerInStr = inStr.toLowerCase();
 lowerFindStr = findStr.toLowerCase();
 findStrLen = findStr.length;
 startPos = lowerInStr.indexOf(lowerFindStr);
 while (startPos >= 0)
 {
  outStr = inStr.substr(0,startPos)+inStr.substr(startPos+findStrLen);
  inStr = outStr;
  lowerInStr = inStr.toLowerCase();
  startPos = lowerInStr.indexOf(lowerFindStr);
 }
 return outStr;
}

function CopyDocContent(fromIdx,toIdx,doExchange)
{
 var i;
 varNamArr = new Array();
 varNamArr[1] = 'contentid';
 varNamArr[2] = 'toccontent';
 varNamArr[3] = 'content';
 varNamArr[4] = 'contentlev';
 var numVars = 4;
 var srcVarNam,srcVarID,srcContent,tarVarNam,tarVarID,tarContent;
 for (i=1;i<=numVars;i++)
 {
  srcVarNam = varNamArr[i]+fromIdx;
  srcVarID = document.getElementById(srcVarNam);
  if (srcVarID != null) srcContent = srcVarID.value;
     
  tarVarNam = varNamArr[i]+toIdx;
  tarVarID = document.getElementById(tarVarNam);
  if (tarVarID != null) tarContent = tarVarID.value;
 
  if ((srcVarID != null) && (tarVarID != null))
  {
   tarVarID.value = trim(srcContent);
   if (doExchange == true)
   {
    //alert("Exchanging "+srcVarNam+" ("+srcContent+") and "+tarVarNam+" ("+tarContent+")");
    srcVarID.value = trim(tarContent);
   }
  }
 }
}

function CreateTocOptionsFromDocContent()
{
 var docID,tocStr,i,tocVarNam,tocVarID,levVarNam,className,idVarNam,contentID;
 docID = document.getElementById('docid').value;
 tocStr = '';
 i = 1;
 tocVarNam = 'toccontent'+i;
 tocVarID = document.getElementById(tocVarNam);
 while (tocVarID != null)
 {
  var tocContent = trim(tocVarID.value);
  // if no more values stop
  if (tocContent == '') break;
  levVarNam = "contentlev"+i;
  className = "toc"+document.getElementById(levVarNam).value;
  idVarNam = "contentid"+i;
  contentID = document.getElementById(idVarNam).value;
  tocStr = tocStr+'<p id="toc'+i+'" class="'+className+'" onmouseover="ChangeTOCItemDisplay('+"'onmouseover'"+','+i+')" onmouseout="ChangeTOCItemDisplay('+"'onmouseout'"+','+i+')" onclick="DoDocAction('+docID+','+contentID+','+i+','+"'toc_select_item'"+')">'+StripHTML(tocContent)+'</p>'+"\n";
  //if (i == 1) alert(tocStr);
  i++;
  tocVarNam = 'toccontent' + i;
  tocVarID = document.getElementById(tocVarNam);
 }
 i--;
 //alert(tocStr);
 //alert("numTOCItems: "+i);
 document.getElementById('numtocitems').value = i;
 document.getElementById('toc').innerHTML = tocStr;
}

function ApplyValToElement(elNam, elVal, elAtt)
{
 elID = document.getElementById(elNam);
 if (elID != null)
 {
  switch (elAtt)
  {
   case 'innerHTML':
    elID.innerHTML = elVal;
    break;
    
   default:
    elID.value = elVal;
    break; 
  }  
 }
}

function LoadTOCItemContent(contentIdx,editable)
{
 if (contentIdx == -1)
 {
  if (editable == false)
  {
   tinyMCE.getInstanceById('content').getBody().innerHTML = '<div class="mceNonEditable">'+''+'</div>';
  }
  else
  {
   tinyMCE.getInstanceById('content').getBody().innerHTML = '';
  }
 }
 else
 {
  contentVarNam = 'content'+contentIdx;
  srcVarID = document.getElementById(contentVarNam);
  if (srcVarID != null)
  {
   if (editable == false)
   {
    tinyMCE.getInstanceById('content').getBody().innerHTML = '<div class="mceNonEditable">'+trim(srcVarID.value)+'</div>';
   }
   else
   {
    //alert(contentVarNam+": \n"+trim(srcVarID.value));
    tinyMCE.getInstanceById('content').getBody().innerHTML = trim(srcVarID.value);
   }
  }
  //alert(trim(srcVarID.value));
 }
}

function DoDocAction(docID, docContentID, tocSeq, action)
{
 //alert(action);
 varID = document.getElementById('formaction');
 if (varID != null) varID.value = action;
 switch(action)
 {
  case 'doc_search':
   varID = document.getElementById('doc_quick_search');
   if (varID != null)
   {
    searchExp = trim(varID.value).toLowerCase();
    varID.value = "Quick search";
    //alert("SearchExp:"+searchExp);
    if ((searchExp == "quick search") || (searchExp == ""))
    {
     alert("No search string specified!");
     varID.value = "Quick search";
    }
    else
    { 
     //alert(searchExp);
     varID = document.getElementById('search_exp');
     if (varID != null) varID.value = searchExp;
     ShowTOC(docID, 100, searchExp);
     UpdateTOCBreadCrumb(docID,docContentID,tocSeq,searchExp);
     ShowDocContent(docID,-1,-1,searchExp);
    }
   } 
   break;

  case 'toc_show_1':
  case 'toc_show_2':
  case 'toc_show_3':
  case 'toc_show_4':
  case 'toc_show_all':
   tocLev = action.substr(action.lastIndexOf('_')+1);
   ShowTOC(docID, tocLev, "");
   break;
   
  case 'load_doc_content':
   varNam = 'selected_toc_id_str';
   varID = document.getElementById(varNam);
   if (varID != null) varID.value = docContentID;
   // color the background of the chosen TOC item
   ChangeTOCItemDisplay("onclick",tocSeq);
   UpdateTOCBreadCrumb(docID,docContentID,tocSeq,'');
   ShowDocContent(docID, docContentID, tocSeq, "");
   break;

  case 'load_ts_summary_table':
   // color the background of the chosen TOC item
   ChangeTOCItemDisplay("onclick",tocSeq);
   // send SQL statement to get the data
   ShowDocContent(docID, -1, -1, "ts_summary_table");
   break;
   
  case 'doc_to_word':
   varNam = 'selected_toc_id_str';
   varID = document.getElementById(varNam);
   if (varID != null) tocIdStr = varID.value;
   //if (tocIdStr == '') 
   //{
    //alert("No content to export!");
    //break;
   //}
   hrefTxt = "exportdoccontent.php?d="+docID+"&i="+tocIdStr+"&t=word";
   window.location.href=hrefTxt;
   break;
   
  case 'doc_to_pdf':
   varNam = 'selected_toc_id_str';
   varID = document.getElementById(varNam);
   if (varID != null) tocIdStr = varID.value;
   //if (tocIdStr == '') 
   //{
    //alert("No content to export!");
    //break;
   //}
   hrefTxt = "exportdoccontent.php?d="+docID+"&i="+tocIdStr+"&t=pdf";
   window.location.href=hrefTxt;
   break;

  case 'save_content':
   tocID = document.getElementById('toc');
   numTocItems = document.getElementById('numtocitems').value;
   curContentIdx = document.getElementById('lastselectedidx').value;
   contentVarNam = "content"+curContentIdx;
   contentidVarNam = "contentid"+curContentIdx;
   levVarNam = "contentlev"+curContentIdx;
   curItemLev = document.getElementById(levVarNam).value;
   // save the selected toc items's related paragraphs to hidden content variables

   varID = document.getElementById(contentVarNam);
   if (varID != null)
   {
    // clean HTML inside textarea
    //alert("bbcontentid2="+document.getElementById('contentid2').value);
    cleanHTML = CleanTinyHTML('content');
    if (cleanHTML != '')
    {
     //alert("bcontentid2="+document.getElementById('contentid2').value);
     SaveHTMLToContent(cleanHTML,curContentIdx,numTocItems);
     //alert("acontentid2="+document.getElementById('contentid2').value);
     CreateTocOptionsFromDocContent();
    }
   } 

   // update status bar with current selected item's level
   ApplyValToElement('statuscol2','Selected Item Level: '+curItemLev,'innerHTML');
   
   // set lastselectedidx / lastaction
   ApplyValToElement('lastselectedidx', curContentIdx,'');
   ApplyValToElement('lastaction', action,'');
   // load content of item in WYSIWYG area
   LoadTOCItemContent(curContentIdx,true);
   // set focus on newly positionned item 
   break;

  case 'toc_select_item':
   numTocItems = document.getElementById('numtocitems').value;
   if (numTocItems == 0)
   {
    // reset toolbar buttons visibility
    RefreshToolbar("docadd","toc_insert_below");
    // set lastaction hidden var
    ApplyValToElement('lastaction','toc_insert_below','');
    // reset content of item in WYSIWYG area and make readonly
    LoadTOCItemContent(-1,false);
    // set focus on text field
    varID = document.getElementById('tocitem');
    varID.value = "";
    varID.focus();
    break;
   }
   varNam = 'toc'+tocSeq;
   tocItemID = document.getElementById(varNam);
   contentVarNam = "content"+tocSeq;
   contentidVarNam = "contentid"+tocSeq;
   
   //save selected doccontentid in hidden form variable for later use (e.g. export to doc action)
   levVarNam = "contentlev"+tocSeq;
   curItemLev = document.getElementById(levVarNam).value;
   
   // save the last selected toc items's related paragraphs to hidden content variables
   varID = document.getElementById('lastselectedidx');
   if (varID != null)
   {
    if ((varID.value != -1) && (varID.value != tocSeq))
    {
     tarContentIdx = varID.value*1;
     tarVarNam = "content"+tarContentIdx;
     tarVarID = document.getElementById(tarVarNam);
     if (tarVarID != null)
     {
      // clean HTML inside textarea
      cleanHTML = CleanTinyHTML('content');
      if (cleanHTML != '')
      {
       SaveHTMLToContent(cleanHTML,tarContentIdx,numTocItems);
       CreateTocOptionsFromDocContent();
      }
      else
      {
       tarVarID.value = '';
      }
     } 
    }
   }  

   // update status bar with current selected item's level
   ApplyValToElement('statuscol2','Selected Item Level: '+curItemLev,'innerHTML');
   
   // set lastselectedidx / lastaction
   ApplyValToElement('lastselectedidx', tocSeq,'');
   //ApplyValToElement('lastselectedidx', curSelectIdx,'');
   ApplyValToElement('lastaction', action,'');
   
   // load content of item in WYSIWYG area
   LoadTOCItemContent(tocSeq,true);
   // set focus on newly positionned item 
   //tocID.selectedIndex = curSelectIdx;
   //tocID.focus();
   ChangeTOCItemDisplay("onclick",tocSeq);
   document.getElementById('toc').focus();
   break;
   
  case 'toc_move_up':
   curIdx = document.getElementById('lastselectedidx').value;
   numTocItems = document.getElementById('numtocitems').value;
   if (curIdx > 1)
   {
    // exchange doc content related hidden variable's content
    newIdx = curIdx - 1;
    CopyDocContent(curIdx,newIdx,true);
    CreateTocOptionsFromDocContent();

    // set lastselectedidx / lastaction
    ApplyValToElement('lastselectedidx',newIdx,'');
    ApplyValToElement('lastaction',action,'');

    // set focus on newly positionned item 
    ChangeTOCItemDisplay("onclick",newIdx);
   }
   break;
   
  case 'toc_move_dn':
   curIdx = document.getElementById('lastselectedidx').value;
   numTocItems = document.getElementById('numtocitems').value;
   if (curIdx < numTocItems)
   {
    // exchange doc content related hidden variable's content
    newIdx = curIdx*1 + 1;
    CopyDocContent(curIdx,newIdx,true);
    CreateTocOptionsFromDocContent();

    // set lastselectedidx / lastaction
    ApplyValToElement('lastselectedidx',newIdx,'');
    ApplyValToElement('lastaction',action,'');

    // set focus on newly positionned item 
    ChangeTOCItemDisplay("onclick",newIdx);
   }
   break;
   
  case 'toc_promote':
   lastIdx = document.getElementById('lastselectedidx').value;
   levVarNam = "contentlev"+lastIdx;
   curItemLev = document.getElementById(levVarNam).value;
   varNam = 'toc'+lastIdx;
   tocItemID = document.getElementById(varNam);
   if (tocItemID != null)
   {
    if (curItemLev > 1) 
    {
     // adapt class of option in TOC select object
     newItemLev = curItemLev - 1;
     newItemClassname = 'toc'+newItemLev;
     tocItemID.className = newItemClassname
     // adapt header class in hidden content object
     varNam = 'toccontent'+lastIdx;
     varID = document.getElementById(varNam);
     if (varID != null)
     {
      newValue = StripHTML(varID.value);
      newValue = '<p class="doc_header_'+newItemLev+'">'+newValue+'</p>';
      varID.value = newValue;
     }
     // adapt level in hidden level object
     varNam = 'contentlev'+lastIdx;
     varID = document.getElementById(varNam);
     if (varID != null) varID.value = newItemLev;
    }
    // update status bar with current selected item's level
    ApplyValToElement('statuscol2','Selected Item Level: '+newItemLev,'innerHTML');
    
    // set lastaction
    ApplyValToElement('lastaction', action,'');
   }
   break;
   
  case 'toc_demote':
   lastIdx = document.getElementById('lastselectedidx').value;
   levVarNam = "contentlev"+lastIdx;
   curItemLev = document.getElementById(levVarNam).value;
   varNam = 'toc'+lastIdx;
   tocItemID = document.getElementById(varNam);
   if (tocItemID != null)
   {
    if (curItemLev < 6) 
    {
     // adapt class of option in TOC select object
     newItemLev = curItemLev*1 + 1;
     newItemClassname = 'toc'+newItemLev;
     tocItemID.className = newItemClassname
     // adapt header class in hidden content object
     varNam = 'toccontent'+lastIdx;
     varID = document.getElementById(varNam);
     if (varID != null)
     {
      newValue = StripHTML(varID.value);
      newValue = '<p class="doc_header_'+newItemLev+'">'+newValue+'</p>';
      varID.value = newValue;
     }
     // adapt level in hidden level object
     varNam = 'contentlev'+lastIdx;
     varID = document.getElementById(varNam);
     if (varID != null) varID.value = newItemLev;
    }
    // update status bar with current selected item's level
    ApplyValToElement('statuscol2','Selected Item Level: '+newItemLev,'innerHTML');
    // set lastaction
    ApplyValToElement('lastaction', action,'');
   }
   break;

  case 'toc_insert_above':
  case 'toc_insert_below':
   // reset toolbar buttons visibility
   RefreshToolbar("docadd","toc_insert_above");
   // set lastaction
   ApplyValToElement('lastaction',action,'');
   // set focus on text field
   varID = document.getElementById('tocitem');
   varID.value = "";
   varID.focus();
   break;

  case 'toc_edit_one':
   // get selected TOC item's index
   curContentIdx = document.getElementById('lastselectedidx').value;
   // get value of selected TOC item
   varNam = "toccontent"+curContentIdx;
   curTocContent = document.getElementById(varNam).value;
   // reset toolbar buttons visibility
   RefreshToolbar("docadd","toc_edit_one");
   // set lastaction
   ApplyValToElement('lastaction',action,'');
   // apply value to text input field and set focus to the field
   tocItemID = document.getElementById('tocitem');
   tocItemID.value = StripHTML(curTocContent);
   tocItemID.focus();
   break;

  case 'toc_delete_current':
   doDelete = confirm('Do you realy want to delete this table of content item \n and its associated text paragraphs?');
   if (doDelete == true)
   {
    curIdx = document.getElementById('lastselectedidx').value;
    numTocItems = document.getElementById('numtocitems').value;
    startItemSeq = curIdx*1+1;
    for (i=startItemSeq;i<=numTocItems;i++) 
    {
     // copy doc content related hidden variable's content to previous
     CopyDocContent(i,i-1,false);
    }
    // reset last item hidden variables with new empty data
    tarVarNam = 'toccontent'+numTocItems;
    tarVarID = document.getElementById(tarVarNam);
    if (tarVarID != null) tarVarID.value = '';

    tarVarNam = 'content'+numTocItems;
    tarVarID = document.getElementById(tarVarNam);
    if (tarVarID != null) tarVarID.value = '';

    tarVarNam = 'contentid'+numTocItems;
    tarVarID = document.getElementById(tarVarNam);
    if (tarVarID != null) tarVarID.value = '-1';

    tarVarNam = 'contentlev'+numTocItems;
    tarVarID = document.getElementById(tarVarNam);
    if (tarVarID != null) tarVarID.value = '';

    // update TOC
    CreateTocOptionsFromDocContent();
    // check if last element from list was deleted
    if ((numTocItems == curIdx) && (numTocItems > 1))
    {
     newIdx = curIdx - 1;
     ApplyValToElement('lastselectedidx',newIdx,'');
     ApplyValToElement('lastaction',action,'');
     //ApplyValToElement('numtocitems',(numTocItems -1),'');
     LoadTOCItemContent(newIdx,true);
     ChangeTOCItemDisplay("onclick",newIdx);
    }
    else
    {
     // check if the only toc item was deleted
     if (numTocItems == 1)
     {
      // set lastselectedidx / lastaction
      ApplyValToElement('lastselectedidx',0,'');
      //ApplyValToElement('numtocitems',0,'');
      ApplyValToElement('lastaction',action,'');
      // load content of item in WYSIWYG area
      LoadTOCItemContent(-1,true);
      DoDocAction(docID,0,0,'toc_insert_below');
     }
     else
     // a normal item is deleted
     {
      newIdx = curIdx;
      ApplyValToElement('lastselectedidx',newIdx,'');
      ApplyValToElement('lastaction',action,'');
      //ApplyValToElement('numtocitems',(numTocItems -1),'');
      LoadTOCItemContent(newIdx,true);
      ChangeTOCItemDisplay("onclick",newIdx);
     }
    }
   }
   break;
   
  case 'toc_save_one':
   tocID = document.getElementById('toc');
   if (tocID != null)
   {
    numTocItems = document.getElementById('numtocitems').value;
    lastAction = document.getElementById('lastaction').value;
    if (numTocItems == 0)
    {
     if ((lastAction == 'toc_insert_above') || (lastAction == 'toc_insert_below'))
     { 
      curContentIdx = 1;
      curItemClassname = "toc1";
      curItemLev = 1;
      srcVarID = document.getElementById('tocitem');
      srcContent = trim(srcVarID.value);
      if (srcContent != '')
      {
       // fill current item hidden variables with new item data
       newItemText = '<p class="doc_header_'+curItemLev+'">'+srcContent+'</p>';
       tarVarNam = 'toccontent'+curContentIdx;
       ApplyValToElement(tarVarNam,newItemText,'');
       tarVarNam = 'content'+curContentIdx;
       ApplyValToElement(tarVarNam,'','');
       tarVarNam = 'contentid'+curContentIdx;
       ApplyValToElement(tarVarNam,-1,'');
       tarVarNam = 'contentlev'+curContentIdx;
       ApplyValToElement(tarVarNam,curItemLev,'');
       // update TOC
       CreateTocOptionsFromDocContent();
       // empty input field
       ApplyValToElement('tocitem','','');
        // set lastselectedidx / lastaction / numtocitems
       ApplyValToElement('lastselectedidx',curContentIdx,'');
       ApplyValToElement('lastaction',action,'');
       //ApplyValToElement('numtocitems',1,'');

       // reset toolbar buttons visibility
       RefreshToolbar("docadd","init");
       // highlight newly inserted TOC item
       ChangeTOCItemDisplay("onclick",curContentIdx);
       // load new item's (empty) content in WYSIWYG edit area
       LoadTOCItemContent(curContentIdx,true);
       // set focus on TOC
       document.getElementById('toc').focus();
      }
      else
      {
       alert("Content is empty! please try again");
       // reset toolbar buttons visibility
       RefreshToolbar("docadd","init");
      } 
     }
    }
    else
    {
     curContentIdx = document.getElementById('lastselectedidx').value;
     levVarNam = "contentlev"+curContentIdx;
     curItemLev = document.getElementById(levVarNam).value;
     if (lastAction == 'toc_edit_one')
     {
      srcVarID = document.getElementById('tocitem');
      srcContent = trim(srcVarID.value);
      srcVarID.value = '';
      if (srcContent != '')
      {
       // reset toolbar
       RefreshToolbar("docadd","init");
       // assign new value to the TOC item
       varNam = "toccontent"+curContentIdx;
       newItemText = '<p class="doc_header_'+curItemLev+'">'+srcContent+'</p>';
       document.getElementById(varNam).value = newItemText;
       // update TOC
       CreateTocOptionsFromDocContent();
       // reset highlite on selected TOC item
       ChangeTOCItemDisplay("onclick",curContentIdx);
      }
      else
      {
       alert("Empty string is not allowed, please try again, or click the cancel button");
       document.getElementById('tocitem').focus();
      }
     }
     if (lastAction == 'toc_insert_above')
     {
      srcVarID = document.getElementById('tocitem');
      srcContent = trim(srcVarID.value);
      if (srcContent != '')
      {
       for (i=numTocItems;i>=curContentIdx;i--) 
       {
        // copy doc content related hidden variable's content to previous
        CopyDocContent(i,i*1+1,false);
       }
       // fill current item hidden variables with new item data
       newItemText = '<p class="doc_header_'+curItemLev+'">'+srcContent+'</p>';
       
       tarVarNam = 'toccontent'+curContentIdx;
       ApplyValToElement(tarVarNam,newItemText,'');
       
       tarVarNam = 'content'+curContentIdx;
       ApplyValToElement(tarVarNam,'','');
       
       tarVarNam = 'contentid'+curContentIdx;
       ApplyValToElement(tarVarNam,-1,'');

       tarVarNam = 'contentlev'+curContentIdx;
       ApplyValToElement(tarVarNam,curItemLev,'');
       // update TOC
       CreateTocOptionsFromDocContent();
       // empty input field
       ApplyValToElement('tocitem','','');
     
       // set lastselectedidx / lastaction / numtocitems
       ApplyValToElement('lastselectedidx',curContentIdx,'');
       ApplyValToElement('lastaction',action,'');
       //ApplyValToElement('numtocitems',(numTocItems*1+1),'');

       // reset toolbar buttons visibility
       RefreshToolbar("docadd","init");
       // highlight newly inserted TOC item
       ChangeTOCItemDisplay("onclick",curContentIdx);
       // load new item's (empty) content in WYSIWYG edit area
       LoadTOCItemContent(curContentIdx,true);
       // set focus on TOC
       document.getElementById('toc').focus();
      }
      else
      {
       alert("Content is empty! please try again");
       // reset toolbar buttons visibility
       RefreshToolbar("docadd","init");
      }
     }
     if (lastAction == 'toc_insert_below')
     {
      srcVarID = document.getElementById('tocitem');
      srcContent = trim(srcVarID.value);
      if (srcContent != '')
      {
       newContentIdx = curContentIdx*1+1;
       for (i=numTocItems;i>=newContentIdx;i--) 
       {
        // copy doc content related hidden variable's content to next
        CopyDocContent(i,i*1+1,false);
       }
       // fill current item hidden variables with new item data
       newItemText = '<p class="doc_header_'+curItemLev+'">'+srcContent+'</p>';
       
       tarVarNam = 'toccontent'+newContentIdx;
       ApplyValToElement(tarVarNam,newItemText,'');
       
       tarVarNam = 'content'+newContentIdx;
       ApplyValToElement(tarVarNam,'','');
       
       tarVarNam = 'contentid'+newContentIdx;
       ApplyValToElement(tarVarNam,-1,'');

       tarVarNam = 'contentlev'+newContentIdx;
       ApplyValToElement(tarVarNam,curItemLev,'');
       // update TOC
       CreateTocOptionsFromDocContent();
       // empty input field
       ApplyValToElement('tocitem','','');
       // set lastselectedidx / lastaction / numtocitems
       ApplyValToElement('lastselectedidx',newContentIdx,'');
       ApplyValToElement('lastaction',action,'');
       //ApplyValToElement('numtocitems',(numTocItems*1+1),'');
       // reset toolbar buttons visibility
       RefreshToolbar("docadd","init");
       // highlight newly inserted TOC item
       ChangeTOCItemDisplay("onclick",newContentIdx);
       // load new item's (empty) content in WYSIWYG edit area
       LoadTOCItemContent(newContentIdx,true);
       // set focus on TOC
       document.getElementById('toc').focus();
      }
      else
      {
       alert("Content is empty! please try again");
       // reset toolbar buttons visibility
       RefreshToolbar("docadd","init");
      }
     }
    }
   }
   break;

  case 'toc_cancel_one':
   // reset toolbar buttons visibility
   RefreshToolbar("docadd","init");
   // reset text field to empty
   varNam = "tocitem";
   varID = document.getElementById(varNam);
   varID.value = "";
   // save current settings hidden variables
   ApplyValToElement('lastaction',action,'');
   // set focus on last selected item
   varID = document.getElementById('toc');
   varID.focus();
   break;
 }
 RefreshDocContent();
}

function GetOS()
{
 uAgent = navigator.userAgent.toLowerCase();
 //version = navigator.appVersion;
 //language = (navigator.language) ? navigator.language : navigator.userLanguage;
 if (uAgent.indexOf('mac') != -1) return "mac";  
 if (uAgent.indexOf('win') != -1) return "win";
 if (uAgent.indexOf('nt 6') != -1) return "vista";
 if (uAgent.indexOf('nt 5') != -1) return "winxp";
 //isOldWin = (isWin && !isVista && !isWinXP) ? true:false;
 if (uAgent.indexOf('linux') != -1) return "linux";
}


function GetBrowser()
{
 sBrowser = navigator.userAgent.toLowerCase();
 alert(sBrowser);
 if (sBrowser.indexOf('firefox/') > -1) return 'ff';
 if ((sBrowser.indexOf('gecko') > -1) && (navigator.userAgent.indexOf('KHTML') == -1)) return 'gecko';
 if (sBrowser.indexOf('msie 5.0') > -1) return 'ie5';
 if (sBrowser.indexOf('msie 6.0') > -1) return 'ie6';
 if (sBrowser.indexOf('msie 7.0') > -1) return 'ie7';
 if (sBrowser.indexOf('msie 8.0') > -1) return 'ie8';
 if (sBrowser.indexOf('opera') > -1) return 'opera';
 if (sBrowser.indexOf('applewebkit/') > -1) return 'webkit';
 if (sBrowser.indexOf('opera') > -1) return 'opera';
 if (sBrowser.indexOf('safari') > -1) return 'safari';
 return "";
}

function disableEnterKey(ev)
{
 var key;
 if (window.event)
 {
  key = window.event.keyCode;
 }
 else
 {
  key = ev.which;
 }
 return (key != 13)
}


//return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');

function ltrim(sString) 
{
 while (sString.substring(0,1) == ' ')
 {
  sString = sString.substring(1, sString.length);
 }
 return sString;
}


function rtrim(sString) 
{
 while (sString.substring(sString.length-1, sString.length) == ' ')
 {
  sString = sString.substring(0,sString.length-1);
 }
 return sString;
}

function trim(sString) 
{
 while (sString.substring(0,1) == ' ')
 {
  sString = sString.substring(1, sString.length);
 }
 while (sString.substring(sString.length-1, sString.length) == ' ')
 {
  sString = sString.substring(0,sString.length-1);
 }
 return sString;
}


function SetTreeItemAction(form)
{
 //alert("In STIA");
 srcVarNam = "action";
 varID = (document.getElementById(srcVarNam));
 if (varID != null) actionIdx = varID.value;  // options[varID.selectedIndex].text
 //alert(actionIdx);
 switch (actionIdx)
 {
  case '-1': action = "DoNothing"; break;
  case '1': action = "DoAdd"; break;
  case '2': action = "DoChange"; break;
  case '3': action = "DoMove"; break;
  case '4': action = "DoDelete"; break;
 }
 //alert(action);
 tarVarNam = "tree_item_action";
 varID = (document.getElementById(tarVarNam));
 if (varID != null) varID.value = action;

 // disable and reinitialise all controls
 varNam = "list1";
 varID = (document.getElementById(varNam));
 if (varID != null)
 {
  varID.className = 'selecttreedatada';
  varID.selectedIndex = 0;
 }
 varNam = "to1txt";
 varID = (document.getElementById(varNam));
 if (varID != null) varID.className = 'txtda';
 varNam = "new_val";
 varID = (document.getElementById(varNam));
 if (varID != null)
 {
  varID.className = 'selecttreedataitemda';
  varID.value = "";
 }
 varNam = "astxt";
 varID = (document.getElementById(varNam));
 if (varID != null) varID.className = 'txtda';
 varNam = "sublist";
 varID = (document.getElementById(varNam));
 if (varID != null)
 {
  varID.className = 'selecttreedatada';
  varID.selectedIndex = 0;
 }
 varNam = "to2txt";
 varID = (document.getElementById(varNam));
 if (varID != null) varID.className = 'txtda';
 varNam = "list2";
 varID = (document.getElementById(varNam));
 if (varID != null)
 {
  varID.className = 'selecttreedatada';
  varID.selectedIndex = 0;
 }
 varNam = "do_action";
 varID = (document.getElementById(varNam));
 if (varID != null) varID.className = 'selecttreedatabuttonda';

 switch (action)
 {
  case 'DoNothing':
   return false;
   break;
  
  case 'DoAdd':
   varNam = "new_val";
   varID = (document.getElementById(varNam));
   if (varID != null) varID.className = 'selecttreedataitem';
   varNam = "astxt";
   varID = (document.getElementById(varNam));
   if (varID != null) varID.className = 'txt';
   varNam = "sublist";
   varID = (document.getElementById(varNam));
   if (varID != null) varID.className = 'selecttreedata';
   varNam = "to2txt";
   varID = (document.getElementById(varNam));
   if (varID != null) varID.className = 'txt';
   varNam = "list2";
   varID = (document.getElementById(varNam));
   if (varID != null)
   {
    varID.className = 'selecttreedata';
    varID.selectedIndex = 0;
   }
   varNam = "do_action";
   varID = (document.getElementById(varNam));
   if (varID != null) varID.className = 'selecttreedatabutton';
   break;

  case 'DoChange':
   varNam = "list1";
   varID = (document.getElementById(varNam));
   if (varID != null)
   {
    varID.className = 'selecttreedata';
    varID.selectedIndex = 0;
   }
   varNam = "to1txt";
   varID = (document.getElementById(varNam));
   if (varID != null) varID.className = 'txt';
   varNam = "new_val";
   varID = (document.getElementById(varNam));
   if (varID != null) varID.className = 'selecttreedataitem';
   varNam = "do_action";
   varID = (document.getElementById(varNam));
   if (varID != null) varID.className = 'selecttreedatabutton';
   break;

  case 'DoMove':
   varNam = "list1";
   varID = (document.getElementById(varNam));
   if (varID != null)
   {
    varID.className = 'selecttreedata';
    varID.selectedIndex = 0;
   }
   varNam = "to2txt";
   varID = (document.getElementById(varNam));
   if (varID != null) varID.className = 'txt';
   varNam = "list2";
   varID = (document.getElementById(varNam));
   if (varID != null)
   {
    varID.className = 'selecttreedata';
    varID.selectedIndex = 0;
   }
   varNam = "do_action";
   varID = (document.getElementById(varNam));
   if (varID != null) varID.className = 'selecttreedatabutton';
   break;

  case 'DoDelete':
   varNam = "list1";
   varID = (document.getElementById(varNam));
   if (varID != null)
   {
    varID.className = 'selecttreedata';
    varID.selectedIndex = 0;
   }
   varNam = "do_action";
   varID = (document.getElementById(varNam));
   if (varID != null) varID.className = 'selecttreedatabutton';
   break;
 }
}

function ValidateTreeItemSubmit()
{
 //alert("In Validate");
 varNam = "tree_item_action";
 varID = (document.getElementById(varNam));
 if (varID != null) treeItemAction = varID.value;
 
 switch (treeItemAction)
 {
  case "DoMove":
   errMsg = "";
   list1Idx = "-1";
   varNam = "list1";
   varID = (document.getElementById(varNam));
   if (varID != null) list1Idx = varID.value;
   //alert(list1Idx);
   if (list1Idx == -1) errMsg = "Please choose a From item.\n";   

   list2Idx = "-1";
   varNam = "list2";
   varID = (document.getElementById(varNam));
   if (varID != null) list2Idx = varID.value;
   //alert(list2Idx);
   if (list2Idx == -1) errMsg = errMsg + "Please choose To item.\n";
  
   if (list1Idx == list2Idx) errMsg = errMsg + "From and To items need to be different";
   
   if (errMsg != "")
   {
    alert(errMsg);
    return false;
   }
   break;

  case "DoAdd":
   error = false;
   errMsg = "";
   addValue = "";
   
   varNam = "new_val";
   varID = (document.getElementById(varNam));
   //alert("added value="+varID.value+"-");
   if (varID != null)
   {
    addValue = trim(varID.value.toLowerCase());
    if (addValue == "") errMsg = "Please specify the value to add\n";
    //alert("added value="+addValue+"-");
   }
   
   list1Idx = "-1";
   varNam = "sublist";
   varID = (document.getElementById(varNam));
   if (varID != null) list1Idx = varID.value;
   //alert(list1Idx);
   if (list1Idx == -1) errMsg = errMsg+"Please specify if the item to add is a child or brother \n";

   list2Idx = "-1";
   varNam = "list2";
   varID = (document.getElementById(varNam));
   if (varID != null) list2Idx = varID.value;
   //alert(list2Idx);
   if (list2Idx == -1) errMsg = errMsg+"Please specify where the item has to added\n";

   for (i=1;i<=1000;i++)
   {
    varNam = "lab_"+i;
    varID = (document.getElementById(varNam));
    if (varID != null)
    {
     arrValue = trim(varID.value.toLowerCase());
     if (addValue == arrValue)
     {
      errMsg = errMsg+"The specified value you want to add exists already, please retry \n";
      break;
     }
    }
    else
    {
     break;
    }
   }

   if (errMsg != "")
   {
    alert(errMsg);
    return false;
   }
   break;

  case "DoDelete":
   list1Idx = "-1";
   varNam = "list1";
   varID = (document.getElementById(varNam));
   if (varID != null)
   {
    list1Idx = varID.value;
    if (list1Idx == -1)
    {
     alert("Please specify which item to delete");
     return false;
    }
    varNam = "dep"+list1Idx;
    varID = (document.getElementById(varNam));
    if (varID != null)
    {
     numDepRecs = varID.value;
     depTab = "";
     varNam = "dep_tab";
     varID = (document.getElementById(varNam));
     if (varID != null) depTab = varID.value;
     if (numDepRecs >= 0)
     {
      if (numDepRecs == 0) 
      {
       return confirm('WARNING! Item will be deleted permanently. \nDo you want to continue?');
      }
      else
      {
       return confirm('WARNING! '+numDepRecs+" records will be affected in the "+depTab+"\nDo you want to delete the item anyway?");
      }
     }
    }
   }
   break;

case "DoChange":
   errMsg = "";
   list1Idx = "-1";
   varNam = "list1";
   varID = (document.getElementById(varNam));
   if (varID != null)
   {
    list1Idx = varID.value;
    varNam = "lab"+list1Idx;
    varID = (document.getElementById(varNam));
    if (varID != null) list1Val = trim(varID.value);
    //alert("selected value = "+list1Val);
   }
   else
   {
    return false;
   }
   if (list1Idx == -1) errMsg = "Please specify which item to change \n";
   newValue = "";
   varNam = "new_val";
   varID = (document.getElementById(varNam));
   if (varID != null) newValue = varID.value;
   if (newValue == "") errMsg = errMsg+"Please specify the item's corrected value \n";
   //alert("new value = "+newValue);
   if (trim(newValue) == list1Val) errMsg = errMsg+"The new value equals the old value, please retry \n";
   if (errMsg != "")
   {
    alert(errMsg);
    return false;
   }
   // check its existance
   for (i=1;i<=1000;i++)
   {
    varNam = "lab_"+i;
    varID = (document.getElementById(varNam));
    if (varID != null)
    {
     arrValue = trim(varID.value.toLowerCase());
     //alert(arrValue+"=?"+trim(newValue.toLowerCase()));
     if ((trim(newValue.toLowerCase()) == arrValue) && (trim(newValue.toLowerCase()) != list1Val.toLowerCase()))
     {
      errMsg = errMsg+"The specified value you want to add exists already, please retry \n";
      break;
     }
    }
    else
    {
     break;
    }
   }
   if (errMsg != "")
   {
    alert(errMsg);
    return false;
   }
   varNam = "dep"+list1Idx;
   varID = (document.getElementById(varNam));
   if (varID != null)
   {
    numDepRecs = varID.value;
    depTab = "";
    varNam = "dep_tab";
    varID = (document.getElementById(varNam));
    if (varID != null) depTab = varID.value;
    if (numDepRecs >= 0)
    {
     return confirm('WARNING! '+numDepRecs+" records will be affected in the "+depTab+"\nDo you want to change the item's value anyway?");
    }
   }
   break;

 }
 return true;
}


function keyPressTest(e, obj)
{
  var validateChkb = document.getElementById('chkValidateOnKeyPress');
  if (validateChkb.checked) {
    var displayObj = document.getElementById('spanOutput');
    var key;
    if(window.event) {
      key = window.event.keyCode; 
    }
    else if(e.which) {
      key = e.which;
    }
    var objId;
    if (obj != null) {
      objId = obj.id;
    } else {
      objId = this.id;
    }
    displayObj.innerHTML = objId + ' : ' + String.fromCharCode(key);
  }
}

function ListboxItem(txt,val,disabled)
  {
   this.txt = txt;
   this.val = val;
   this.disabled = disabled;
  }

function CompareItems(a,b)
 {
  return (a.val - b.val);
 }


function ProcessScrollListItem(action,srcListboxID,tarListboxID,disabledIdxStr) 
{
 var srcListboxID = document.getElementById(srcListboxID);
 var tarListboxID = document.getElementById(tarListboxID);
 var numSrcListItems = srcListboxID.length;
 var numTarListItems = tarListboxID.length;
 var tmpNumSrcItem = 0;
 var tmpNumTarItem = 0;
 var tmpItemText = '';
 var tmpItemValue = '';
  
 var tmpItems = new Array();
 var tmpItemsRow = 0;
 if (action == 'add')
 {
  //tmpItems[0] = new ListboxItem('chose item(s) to delete...',0);
  // loop through source listbox
  while (tmpNumSrcItem < numSrcListItems)
  {
   if (srcListboxID.options[tmpNumSrcItem].selected)
   {
    // add item to temporary array and adapt counter
    tmpItems[tmpItemsRow] = new ListboxItem(srcListboxID.options[tmpNumSrcItem].text, srcListboxID.options[tmpNumSrcItem].value, srcListboxID.options[tmpNumSrcItem].disabled);
    ++tmpItemsRow;
    // delete item from source listbox adapt counter
    srcListboxID.options[tmpNumSrcItem] = null;
    --numSrcListItems;
   }
   else
   {
    ++tmpNumSrcItem;
   }
  }
  // fill temporary array with rest of target items
  tmpNumTarItem = 0;
  while (tmpNumTarItem < numTarListItems)
  {
   tmpItems[tmpItemsRow] = new ListboxItem(tarListboxID.options[tmpNumTarItem].text, tarListboxID.options[tmpNumTarItem].value, tarListboxID.options[tmpNumTarItem].disabled);
   ++tmpItemsRow;
   ++tmpNumTarItem;
  }
  // sort temporary array on values
  tmpItems.sort(CompareItems);
  // empty target listbox
  tarListboxID.length = 0;
  // fill target listbox with sorted items
  tmpNumTarItem = 0;
  numTarListItems = tmpItemsRow;
  while (tmpNumTarItem < numTarListItems)
  {
   tarListboxID.options[tmpNumTarItem] = new Option(tmpItems[tmpNumTarItem].txt,tmpItems[tmpNumTarItem].val);
   tarListboxID.options[tmpNumTarItem].disabled = tmpItems[tmpNumTarItem].disabled;
   ++tmpNumTarItem;
  }
 }
  
 if (action == 'del')
 {
  //tmpItems[0] = new ListboxItem('chose item(s) to add...',0);
  // loop through source listbox
  while (tmpNumTarItem < numTarListItems)
  {
   if (tarListboxID.options[tmpNumTarItem].selected)
   {
    // add item to temporary array and adapt counter
    tmpItems[tmpItemsRow] = new ListboxItem(tarListboxID.options[tmpNumTarItem].text, tarListboxID.options[tmpNumTarItem].value, tarListboxID.options[tmpNumTarItem].disabled);
    ++tmpItemsRow;
    // delete item from target listbox adapt counter
    tarListboxID.options[tmpNumTarItem] = null;
    --numTarListItems;
   }
   else
   {
    ++tmpNumTarItem;
   }
  }
  // fill temporary array with rest of target items
  tmpNumSrcItem = 0;
  while (tmpNumSrcItem < numSrcListItems)
  {
   tmpItems[tmpItemsRow] = new ListboxItem(srcListboxID.options[tmpNumSrcItem].text, srcListboxID.options[tmpNumSrcItem].value, srcListboxID.options[tmpNumSrcItem].disabled);
   ++tmpItemsRow;
   ++tmpNumSrcItem;
  }
  // sort temporary array on values
  tmpItems.sort(CompareItems);
  // empty source listbox
  srcListboxID.length = 0;
  // fill source listbox with sorted items
  tmpNumSrcItem = 0;
  numSrcListItems = tmpItemsRow;
  while (tmpNumSrcItem < numSrcListItems)
  {
   srcListboxID.options[tmpNumSrcItem] = new Option(tmpItems[tmpNumSrcItem].txt,tmpItems[tmpNumSrcItem].val);
   srcListboxID.options[tmpNumSrcItem].disabled = tmpItems[tmpNumSrcItem].disabled;
   ++tmpNumSrcItem;
  }
 }
 return '';
}

function ShowTab(tabNum,frameColor)
{
 //alert("In ShowTab");
// fldDetTabArr = new Array();
// fldDetTabArr = fldDetTabExp.split(",");
// lenFldDetTabArr = fldDetTabArr.length;
// for (i=lenFldDetTabArr;i>=1;i--)
// {
//  fldDetTabArr[i] = fldDetTabArr[i-1];
// }
// fldDetTabArr[0] = null;
//
// tabToShow = fldDetTabArr[fldNum];
// curTabNum = 0;
// preTabNum = 0;
 for (i=1;i<=20;i++)
 {
  tarVarNam = "tabcontent"+i;
  tarVarID = document.getElementById(tarVarNam);
  if (tarVarID != null)
  {
   if (i != tabNum)
   {
    //alert("hide tab num "+i);
    tarVarID.style.display='none';
   }
   else
   {
    //alert("show tab num "+i);
     tarVarID.style.display='block';
   }
  }
  tarVarNam = "tabbottomborder"+i+"a";
  tarVarID = document.getElementById(tarVarNam);
  if (tarVarID != null)
  {
   if (i != tabNum)
   {
    //alert("hide tab num "+fldDetTabArr[i]);
    tarVarID.style.backgroundColor = frameColor;
   }
   else
   {
    //alert("show tab num "+fldDetTabArr[i]);
     tarVarID.style.backgroundColor = frameColor;
   }
  }
  tarVarNam = "tabtxt"+i;
  tarVarID = document.getElementById(tarVarNam);
  if (tarVarID != null)
  {
   if (i != tabNum)
   {
    //alert("hide tab num "+fldDetTabArr[i]);
    tarVarID.className = 'tabunselected';
   }
   else
   {
    //alert("show tab num "+fldDetTabArr[i]);
     tarVarID.className = 'tabselected';
   }
  }
 }
}


function ShowRecordDetail(recNum)
{
 var varNam = "listMode";
 var varID = (document.getElementById(varNam));
 if (varID != null) listMode = varID.value;

 var varNam = "listAction";
 var varID = (document.getElementById(varNam));
 if (varID != null) listAction = varID.value;
 
 if ((listAction == "ModOne") || (listAction == "AddOne"))
 {
  return;
 }
 
 var varNam = "listAction";
 var varID = (document.getElementById(varNam));
 if (varID != null)
 {
  varID.value = "ShowDetail";
  listAction = "ShowDetail";
 }

 varNam = "numFlds";
 varID = (document.getElementById(varNam));
 if (varID != null) numFlds = varID.value;
    
 varNam = "numValsPerFldExp"+recNum;
 varID = (document.getElementById(varNam));
 if (varID != null) numValsPerFldExp = varID.value;
    
 varNam = "fldModTypExp";
 varID = (document.getElementById(varNam));
 if (varID != null) fldModTypExp = varID.value;
    
 varNam = "fldDetTabExp";
 varID = (document.getElementById(varNam));
 if (varID != null) fldDetTabExp = varID.value;
    
 tarVarNam = "currecdes";
 tarVarID = (document.getElementById(tarVarNam));
 srcVarNam = "recdes"+recNum;
 srcVarID = (document.getElementById(srcVarNam));
 if ((srcVarID != null) && (tarVarID != null))
 {
  tarVarID.value = srcVarID.value;
 }

 tarVarNam = "currecid";
 tarVarID = (document.getElementById(tarVarNam));
 srcVarNam = "rec"+recNum+"_id";
 srcVarID = (document.getElementById(srcVarNam));
 if ((srcVarID != null) && (tarVarID != null))
 {
  tarVarID.value = srcVarID.value;
  tmpIdx = srcVarID.value;
 }

 varNam = "currecnum";
 varID = (document.getElementById(varNam));
 if (varID != null) varID.value = recNum;

 tarVarNam = "detrecdes";
 tarVarID = (document.getElementById(tarVarNam));
 srcVarNam = "recdes"+recNum;
 srcVarID = (document.getElementById(srcVarNam));
 if ((srcVarID != null) && (tarVarID != null))
 {
  tarVarID.value = srcVarID.value+" ("+tmpIdx+")";
 }

 varNam = "curlistid";
 varID = (document.getElementById(varNam));
 if (varID != null) listID = varID.value;



 ShowToolbar("list_detail_toolbar",listAction);
 
 // adapt print button action from detail toolbar
 varNam = "print_one_a"
 varID = (document.getElementById(varNam));
 if (varID != null)
 {
  varID.href = "print.php?lid="+listID+"&rid="+tmpIdx; 
 }
 
 // create the Arrays from strings
 //alert("FldModTypExp "+fldModTypExp);
 //alert("numValsPerFldExp "+numValsPerFldExp);
 tmpArr = new Array();
 fldModTypArr = new Array();
 fldDetTabArr = new Array();
 numValsPerFldArrIdx = new Array();
 numValsPerFldArrVal = new Array();
 
 fldModTypArr = fldModTypExp.split(",");
 //alert(fldModTypArr);
 //alert(fldModTypArr[0]);
 //alert(fldModTypArr[7]);
 lenFldModTypArr = fldModTypArr.length;
 for (i=lenFldModTypArr;i>=1;i--)
 {
  fldModTypArr[i] = fldModTypArr[i-1];
 }
 fldModTypArr[0] = null;

 fldDetTabArr = fldDetTabExp.split(",");
 lenFldDetTabArr = fldDetTabArr.length;
 for (i=lenFldDetTabArr;i>=1;i--)
 {
  fldDetTabArr[i] = fldDetTabArr[i-1];
 }
 fldDetTabArr[0] = null;

 tmpArr = numValsPerFldExp.split("-"); 
 var lenTmpArr = tmpArr.length;
 for (i=1;i<=lenTmpArr;i++)
 {
  idxVal = tmpArr[i-1].split(";");
  idx = idxVal[0];
  val = idxVal[1];
  numValsPerFldArrIdx[i] = idx;
  numValsPerFldArrVal[i] = val;
 }
 for (i=1;i<=numFlds;i++)
 {
  //alert("Field Type "+i+" = ¦"+fldModTypArr[i]+"¦");
  curFldModTyp = fldModTypArr[i];
  switch (fldModTypArr[i])
  {
   case "listbox":
    // LOAD LISTBOX ELEMENTS related to this contact
    //alert("in listbox");
    daStr = '';
    varNam = "daStr"+i;
    varID = document.getElementById(varNam);
    if (varID != null) daStr = varID.value;
    
    tarVarNam = "curfldval"+i+"_1";
    //LoadListElements(srcVarNam);
    tarVarID = document.getElementById(tarVarNam);
    tarVarID.length = 0;
    numItems = numValsPerFldArrVal[i];
    itemsIdxStr = '';
    for (j=1;j<=numItems;j++)
    {
     srcVarNam = "fldval"+recNum+"_"+i+"_"+j;
     if (document.getElementById(srcVarNam) != null)
     {
      tmpIdxVal = document.getElementById(srcVarNam).value;
      tmpSepPos = tmpIdxVal.indexOf(",");
      tmpIdx = tmpIdxVal.substr(0,tmpSepPos);
      itemsIdxStr = itemsIdxStr+';'+tmpIdx;
      tmpVal = tmpIdxVal.substr(tmpSepPos+1);
      //alert("adding value ("+tmpVal+") to list");
      addOption = new Option(tmpVal,tmpIdx);
      tarVarID.options[j-1] = addOption;
      // check if needs to disable
      tmpIdx = ','+tmpIdx+',';
      //alert("daStr = "+daStr+" TmpIdx = "+tmpIdx);
      if (daStr.indexOf(tmpIdx) > -1)
      {
       //alert("Option "+tmpVal+" is disabled");
       tarVarID.options[j-1].disabled = true;
      }
     }
     else
     {
      alert("source hidden variable ("+srcVarNam+") not found...");
     }
    }
    itemsIdxStr = itemsIdxStr+';';
     
    // FILL mod select with original data without the contact's items;
    // get temporary listbox ID and length
    srcVarNam = "curtmpval"+i+"_1";
    srcVarID = document.getElementById(srcVarNam);
    numItems = srcVarID.length;
    // get mod listbox; empty and add all temporary items except for the contact's ones
    tarVarNam = "curmodval"+i+"_1";
    tarVarID = document.getElementById(tarVarNam);
    tarVarID.length = 0;
    k = 0;
    for (j=1;j<=numItems;j++)
    {
     findStr = ';'+srcVarID.options[j-1].value+';';
     if (itemsIdxStr.match(findStr) != findStr)
     {
      tarVarID.options[k] = new Option(srcVarID.options[j-1].text,srcVarID.options[j-1].value);
      tmpIdx = ','+srcVarID.options[j-1].value+',';
      if (daStr.indexOf(tmpIdx) > -1)
      {
       //alert("Option "+srcVarID.options[j-1].text+" is disabled");
       tarVarID.options[k].disabled = true;
      }
      k++;
     }
    }
    break;

   case "yn":
   case "chilist_ddlist":
   case "chilist_text":
   case "chilist_text_dd":
   case "chilist_tree":
    curFldGrp = numValsPerFldArrIdx[i];
    //alert("in chilist_text, curFldGrp="+curFldGrp);
    numFldsInGrp = 0;
    j = i;
    while (numValsPerFldArrIdx[j] == curFldGrp)
    {
     numFldsInGrp++;
     j++;
    }
    //alert("after while loop");
    numItems = numValsPerFldArrVal[i];
    numItems = 15;
    for (j=1;j<=numItems;j++)
    {
     tarVarNam = "curfldval"+i+"_"+j;
     if (document.getElementById(tarVarNam) == null) break;
     for (k=1;k<=numFldsInGrp;k++)
     {
      curFldModTyp = fldModTypArr[i+k-1];  
      srcVarNam = "fldval"+recNum+"_"+(i+k-1)+"_"+j;
      if (document.getElementById(srcVarNam) != null)
      {
       //alert("Found: "+srcVarNam);
       tmpIdxVal = document.getElementById(srcVarNam).value;
       tmpSepPos = tmpIdxVal.indexOf(",");
       tmpIdx = tmpIdxVal.substr(0,tmpSepPos);
       tmpVal = tmpIdxVal.substr(tmpSepPos+1);
      }
      else
      {
       //alert("Not found: "+srcVarNam);
       tmpIdx = -1;
       tmpVal = "";
      }
      tarVarNam = "curfldval"+(i+k-1)+"_"+j;
      //alert("Record Number["+recNum+"] SourceVarVal: "+srcVarNam+" "+tmpVal+" ; "+"TargetVar: "+tarVarNam+" List mode = "+listMode);
      if (document.getElementById(tarVarNam) != null)
      {
       document.getElementById(tarVarNam).value = tmpVal;
       tarIdxNam = "curfldidx"+(i+k-1)+"_"+j;
       if (document.getElementById(tarIdxNam) != null)
       {
        document.getElementById(tarIdxNam).value = tmpIdx;
        //alert("Fld Idx = "+tmpIdx+" Fld Val = "+tmpVal);
       }
      }
      else
      {
       break;
      }
     }
    }
    i = i + numFldsInGrp - 1;
    //alert(i);
    break;

   default:
    srcVarNam = "fldval"+recNum+"_"+i;
    tarVarNam = "curfldval"+i+"_1";
    if ((document.getElementById(srcVarNam) != null) && (document.getElementById(tarVarNam) != null))
    {
     document.getElementById(tarVarNam).value = document.getElementById(srcVarNam).value;
    }
    tarVarNam = "curmodval"+i+"_1";
    if ((document.getElementById(srcVarNam) != null) && (document.getElementById(tarVarNam) != null))
    {
     document.getElementById(tarVarNam).value = document.getElementById(srcVarNam).value;
    }
    break;
  }
 }
}

function InitToolbarArray(toolbarName, action)
{
 //alert("In Init Toolbar Array");
 toolbar = new Array();
 if (toolbarName == "list_main_toolbar")
 {
  numToolbarItems = 17;
  for (i=1;i<=numToolbarItems;i++)
  {
   toolbar[i] = new Array(3);
  }
  i = 1;
  toolbar[i][0] = "wrapper";
  toolbar[i][1] = "apply_filter";
  toolbar[i][2] = "disable";
  i++;
  toolbar[i][0] = "wrapper";
  toolbar[i][1] = "clear_filter";
  toolbar[i][2] = "disable";
  i++;
  toolbar[i][0] = "text";
  toolbar[i][1] = "show_hide_field";
  toolbar[i][2] = "disable";
  i++;
  toolbar[i][0] = "wrapper";
  toolbar[i][1] = "show_hide_field";
  toolbar[i][2] = "disable";
  i++;
  toolbar[i][0] = "wrapper";
  toolbar[i][1] = "modify_all";
  toolbar[i][2] = "disable";
  i++;
  toolbar[i][0] = "wrapper";
  toolbar[i][1] = "save_all";
  toolbar[i][2] = "disable";
  i++;
  toolbar[i][0] = "wrapper";
  toolbar[i][1] = "cancel_all";
  toolbar[i][2] = "disable";
  i++;
  toolbar[i][0] = "wrapper";
  toolbar[i][1] = "first_page";
  toolbar[i][2] = "disable";
  i++;
  toolbar[i][0] = "wrapper";
  toolbar[i][1] = "previous_page";
  toolbar[i][2] = "disable";
  i++;
  toolbar[i][0] = "text";
  toolbar[i][1] = "page";
  toolbar[i][2] = "disable";
  i++;
  toolbar[i][0] = "wrapper";
  toolbar[i][1] = "cur_page";
  toolbar[i][2] = "disable";
  i++;
  toolbar[i][0] = "text";
  toolbar[i][1] = "num_pages";
  toolbar[i][2] = "disable";
  i++;
  toolbar[i][0] = "wrapper";
  toolbar[i][1] = "next_page";
  toolbar[i][2] = "disable";
  i++;
  toolbar[i][0] = "wrapper";
  toolbar[i][1] = "last_page";
  toolbar[i][2] = "disable";
  i++;
  toolbar[i][0] = "text";
  toolbar[i][1] = "showing_items";
  toolbar[i][2] = "disable";
  i++;
  toolbar[i][0] = "wrapper";
  toolbar[i][1] = "num_items_per_page";
  toolbar[i][2] = "disable";
  i++;
  toolbar[i][0] = "text";
  toolbar[i][1] = "items_per_page";
  toolbar[i][2] = "disable";

  switch (action)
  {
   case "AddOne":
   case "ModOne":
    // do nothing all buttons / text stays disabled
    break;
   case "Init":
    for (i=1;i<=numToolbarItems;i++)
    {
     toolbar[i][2] = "enable";
    }
    toolbar[6][2] = "disable";
    toolbar[7][2] = "disable";
    break;
  }
 }
 if (toolbarName == "list_detail_toolbar")
 {
  numToolbarItems = 6;
  for (i=1;i<=numToolbarItems;i++)
  {
   toolbar[i] = new Array(3);
  }
  i=1;
  toolbar[i][0] = "wrapper";
  toolbar[i][1] = "print_one";
  toolbar[i][2] = "disable";
  i++;
  toolbar[i][0] = "wrapper";
  toolbar[i][1] = "modify_one";
  toolbar[i][2] = "disable";
  i++;
  toolbar[i][0] = "wrapper";
  toolbar[i][1] = "add_one";
  toolbar[i][2] = "disable";
  i++;
  toolbar[i][0] = "wrapper";
  toolbar[i][1] = "delete_one";
  toolbar[i][2] = "disable";
  i++;
  toolbar[i][0] = "wrapper";
  toolbar[i][1] = "save_one";
  toolbar[i][2] = "disable";
  i++;
  toolbar[i][0] = "wrapper";
  toolbar[i][1] = "cancel_one";
  toolbar[i][2] = "disable";

  switch (action)
  {
   case "CancelOne":
   case "Init":
    // add_one button
    toolbar[3][2] = "enable";
    break;
   case "ShowDetail":
    // enable print, modify_one, add_one and delete_one buttons
    toolbar[1][2] = "enable";
    toolbar[2][2] = "enable";
    toolbar[3][2] = "enable";
    toolbar[4][2] = "enable";
    break;
   case "AddOne":
   case "ModOne":
    // enable save_one and cancel_one buttons
    toolbar[5][2] = "enable";
    toolbar[6][2] = "enable";
    break;
  }
 }
 return toolbar;
}




function ShowToolbar(toolbarName,action)
{
 toolbar = new Array();
 toolbar = InitToolbarArray(toolbarName, action);
 
 numItems = toolbar.length-1;
 for(i=1;i<=numItems;i++)
 {
  curType = toolbar[i][0];
  curItemName = toolbar[i][1];
  curItemAction = toolbar[i][2];
  if (curType == "wrapper")
  {
   idVal = curItemName+"_da_wrapper";
   elementID = (document.getElementById(idVal));
   if (elementID != null)
   {
    if (curItemAction == "disable")
    {
     elementID.className = "toolbarbuttonshow";
    }
    if (curItemAction == "enable")
    {
     elementID.className = "toolbarbuttonhide";
    }
   }
   idVal = curItemName+"_wrapper";
   elementID = (document.getElementById(idVal));
   if (elementID != null)
   {
    if (curItemAction == "disable")
    {
     elementID.className = "toolbarbuttonhide";
    }
    if (curItemAction == "enable")
    {
     elementID.className = "toolbarbuttonshow";
    }
   }
  }
  if (curType == "text")
  {
   idVal = curItemName+"_text";
   elementID = (document.getElementById(idVal));
   if (elementID != null)
   {
    if (curItemAction == "disable")
    {
     elementID.className = "toolbarbuttontextda";
    }
    if (curItemAction == "enable")
    {
     elementID.className = "toolbarbuttontext";
    }
   }
  }
 }
 return;
}

function InitPage(page)
{
 switch (page)
 {
  case "docadd":
   RefreshToolbar("docadd","init");
   varID = document.getElementById('toc');
   if (varID != null)
   {
    //varID.selectedIndex = 0;
    //varID.focus();
    DoDocAction(-1,1,1,'toc_select_item');
   }
   break;
 }
}

function RefreshToolbar(toolbar,action)
{
 //alert("tb action: "+action);
 if (toolbar == 'docadd')
 {
  possibleButtons = "toc_move_up,toc_move_dn,toc_promote,toc_demote,toc_insert_above,toc_insert_below,toc_edit_one,toc_delete_current,toc_save_one,toc_cancel_one";
  buttonArr = possibleButtons.split(",");
  numButtons = buttonArr.length;
  // by default show all toolbar buttons
  for (i=0;i<=numButtons;i++)
  {
   varNam = buttonArr[i]+"_wrapper";
   varID = document.getElementById(varNam);
   if (varID != null) varID.className = "toolbarbuttonshow";
   varNam = buttonArr[i]+"_da_wrapper";
   varID = document.getElementById(varNam);
   if (varID != null) varID.className = "toolbarbuttonhide";
  }

  switch (action)
  {
   case 'init':
    // disable save and cancel buttons
    varNam = "toc_save_one_wrapper";
    varID = document.getElementById(varNam);
    if (varID != null) varID.className = "toolbarbuttonhide";
    varNam = "toc_save_one_da_wrapper";
    varID = document.getElementById(varNam);
    if (varID != null) varID.className = "toolbarbuttonshow";
    varNam = "toc_cancel_one_wrapper";
    varID = document.getElementById(varNam);
    if (varID != null) varID.className = "toolbarbuttonhide";
    varNam = "toc_cancel_one_da_wrapper";
    varID = document.getElementById(varNam);
    if (varID != null) varID.className = "toolbarbuttonshow";
    break;
    
   case 'toc_edit_one':
   case 'toc_insert_above':
   case 'toc_insert_below':
    // disable all buttons
    for (i=0;i<=numButtons;i++)
    {
     varNam = buttonArr[i]+"_wrapper";
     varID = document.getElementById(varNam);
     if (varID != null) varID.className = "toolbarbuttonhide";
     varNam = buttonArr[i]+"_da_wrapper";
     varID = document.getElementById(varNam);
     if (varID != null) varID.className = "toolbarbuttonshow";
    }
    // enable save and cancel buttons
    varNam = "toc_save_one_wrapper";
    varID = document.getElementById(varNam);
    if (varID != null) varID.className = "toolbarbuttonshow";
    varNam = "toc_save_one_da_wrapper";
    varID = document.getElementById(varNam);
    if (varID != null) varID.className = "toolbarbuttonhide";
    varNam = "toc_cancel_one_wrapper";
    varID = document.getElementById(varNam);
    if (varID != null) varID.className = "toolbarbuttonshow";
    varNam = "toc_cancel_one_da_wrapper";
    varID = document.getElementById(varNam);
    if (varID != null) varID.className = "toolbarbuttonhide";
    break;
  }
 }
}


function SetAction(action,param1)
{
 //alert("In SetAction - "+action);
 // set the listAction variable
 if (action != null)
 {
  elementID = document.getElementById("listAction");
  if (elementID != null) elementID.value = action;
  elementID = document.getElementById("pageAction");
  if (elementID != null) elementID.value = action;
 }

 // get curren record number (not ID)
 varNam = "currecnum";
 varID = document.getElementById(varNam);
 if (varID != null)
 {
  if (varID.value != '')
  {
   recNum = varID.value;
   varNam = "numValsPerFldExp"+recNum;
   varID = (document.getElementById(varNam));
   if (varID != null) numValsPerFldExp = varID.value;

   tmpArr = numValsPerFldExp.split("-"); 
   var lenTmpArr = tmpArr.length;
   for (i=1;i<=lenTmpArr;i++)
   {
    idxVal = tmpArr[i-1].split(";");
    idx = idxVal[0];
    val = idxVal[1];
    numValsPerFldArrIdx[i] = idx;
    numValsPerFldArrVal[i] = val;
   }
  }
 }

 // prepare number of values per field array
 varNam = "fldDetTabExp";
 varID = (document.getElementById(varNam));
 if (varID != null) fldDetTabExp = varID.value;

 // prepare field modification types array
 varNam = "fldModTypExp";
 varID = document.getElementById(varNam);
 if (varID != null) fldModTypExp = varID.value;

 fldModTypArr = fldModTypExp.split(",");
 lenFldModTypArr = fldModTypArr.length;
 for (i=lenFldModTypArr;i>=1;i--)
 {
  fldModTypArr[i] = fldModTypArr[i-1];
 }
 fldModTypArr[0] = null;
 
 numFlds = lenFldModTypArr;
 
 // specific processing per action
 switch (action)
 {
  case 'show_new_page':
  case 'num_items_per_page':
   formRef = param1;
   formRef.submit();
   return false;
   break;
   
  case 'DelOne':
   itemNum = param1;
   if (itemNum != null)  // delete one button in list is clicked
   {
    //if (document.getElementById("recordNum") != null) document.getElementById("recordNum").value = itemNum;
    srcVarNam = 'recdes'+itemNum;
    tarVarNam = 'currecdes';
    if ((document.getElementById(srcVarNam) != null) && (document.getElementById(tarVarNam) != null))
    {
     document.getElementById(tarVarNam).value = document.getElementById(srcVarNam).value;
    }
    srcVarNam = "rec"+itemNum+"_id";
    tarVarNam = "currecid";
    if ((document.getElementById(srcVarNam) != null) && (document.getElementById(tarVarNam) != null))
    {
     document.getElementById(tarVarNam).value = document.getElementById(srcVarNam).value;
    }
   }
   break;

  case 'AddOne':

   // init toolbars for this action
   ShowToolbar("list_main_toolbar","AddOne");
   ShowToolbar("list_detail_toolbar","AddOne");

   // adapt mode variables
   varNam = "listMode";
   varID = document.getElementById(varNam);
   if (varID != null) varID.value = "AddOne";

   varNam = "listmodetxt";
   varID = document.getElementById(varNam);
   if (varID != null) varID.innerHTML = "AddOne";
  
   // disable data filter
   for(i=1;i<=numFlds;i++)
   {
    varNam = "filter_fld"+i;
    varID = document.getElementById(varNam);
    if (varID != null) varID.disabled = true;
   }

   for(i=1;i<=numFlds;i++)
   {
    curFldModTyp = fldModTypArr[i];

    varNam = "curfldval"+i+"_1";
    varID = (document.getElementById(varNam));
    if ((i>1) && (varID == null)) break;
    
    if (curFldModTyp == "listbox")
    {
     // empty contact's listbox items (adding new contact!)
     varNam = "curfldval"+i+"_1";
     varID = document.getElementById(varNam);
     varID.length = 0;
     // show list box add & remove buttons    
     srcVarNam = "curmodbtnltr"+i+"_1";
     srcVarID = document.getElementById(srcVarNam);
     if (srcVarID != null) srcVarID.className = 'detaileditshow';
     srcVarNam = "curmodbtnrtl"+i+"_1";
     srcVarID = document.getElementById(srcVarNam);
     if (srcVarID != null) srcVarID.className = 'detaileditshow';
     // prepare disbled elements string
     daStr = '';
     varNam = "daStr"+i;
     varID = document.getElementById(varNam);
     if (varID != null) daStr = varID.value;
     // populate list box 
     srcVarNam = "curtmpval"+i+"_1";
     srcVarID = document.getElementById(srcVarNam);
     numItems = srcVarID.length;
       // get mod listbox; empty and add all temporary items 
     tarVarNam = "curmodval"+i+"_1";
     tarVarID = document.getElementById(tarVarNam);
     tarVarID.length = 0;
     k = 0;
     for (j=1;j<=numItems;j++)
     {
      tarVarID.options[k] = new Option(srcVarID.options[j-1].text,srcVarID.options[j-1].value);
      tmpIdx = ','+srcVarID.options[j-1].value+',';
      if (daStr.indexOf(tmpIdx) > -1)
      {
       tarVarID.options[k].disabled = true;
      }
      k++;
     }
    }

    // hide all read only fields - show editable fields and set value to empty
    for(j=1;j<=50;j++)
    {
     srcVarNam = "curfldval"+i+"_"+j;
     srcVarID = document.getElementById(srcVarNam);
     if (srcVarID != null)
     {
      if (curFldModTyp != 'listbox') srcVarID.className = 'detailviewhide';
     }
      else 
     {
      break;
     }
     tarVarNam = "curmodval"+i+"_"+j;
     tarVarID = document.getElementById(tarVarNam);
     if (tarVarID != null)
     {
      tarVarID.className = 'detaileditshow';
     }
     else
     {
      break;
     }
     
     // set edit values to empty
     switch (curFldModTyp)
     {
      case "yn":
      case "chilist_text_dd":
      case "chilist_ddlist":
      case "chilist_tree":
       // set the modify index to empty choice
       tarIdxNam = "curmodidx"+i+"_"+j;
       tarIdxID = document.getElementById(tarIdxNam);
       if (tarIdxID != null) tarIdxID.value = -1;
       
       // select the correct drop down item
       tmpIdx = -1;
       listID = tarVarID;
       var listNumItems = listID.length;
       for (idx=0; idx <= listNumItems-1; idx++)
       {
        if (listID.options[idx].value == tmpIdx)
        {
         listID.options[idx].selected = true;
         break;
        }
       }
       break;
       
      default:
       if (tarVarID != null) tarVarID.value = '';
       break;
     }
    }
   }
   return false;
   break;


  case 'ModOne':

   // init toolbars for this action
   ShowToolbar("list_main_toolbar","ModOne");
   ShowToolbar("list_detail_toolbar","ModOne");

   // adapt mode variables
   varNam = "listMode";
   varID = document.getElementById(varNam);
   if (varID != null) varID.value = "ModifyOne";

   varNam = "listmodetxt";
   varID = document.getElementById(varNam);
   if (varID != null) varID.innerHTML = "ModifyOne";
  
   // hide data filter
   for(i=1;i<=numFlds;i++)
   {
    varNam = "filter_fld"+i;
    varID = document.getElementById(varNam);
    if (varID != null) varID.disabled = true;
   }

   //  hide all read only fields - show editable fields and pass values
   for(i=1;i<=numFlds;i++)
   {
    curFldModTyp = fldModTypArr[i];

    varNam = "curfldval"+i+"_1";
    varID = (document.getElementById(varNam));
    if ((i>1) && (varID == null)) break;
    
    if (curFldModTyp == "listbox")
    {
     srcVarNam = "curmodbtnltr"+i+"_1";
     srcVarID = document.getElementById(srcVarNam);
     if (srcVarID != null) srcVarID.className = 'detaileditshow';
     srcVarNam = "curmodbtnrtl"+i+"_1";
     srcVarID = document.getElementById(srcVarNam);
     if (srcVarID != null) srcVarID.className = 'detaileditshow';
    }

    for(j=1;j<=50;j++)
    {
     srcVarNam = "curfldval"+i+"_"+j;
     srcVarID = document.getElementById(srcVarNam);
     if (srcVarID != null)
     {
      //alert("var: "+srcVarNam+" = of type "+curFldModTyp);
      if (curFldModTyp != 'listbox') srcVarID.className = 'detailviewhide';
     }
      else 
     {
      break;
     }
     tarVarNam = "curmodval"+i+"_"+j;
     tarVarID = document.getElementById(tarVarNam);
     if (tarVarID != null)
     {
      tarVarID.className = 'detaileditshow';
     }
     else
     {
      break;
     }
     
     // copy values from view vars to edit vars
     switch (curFldModTyp)
     {
      case "yn":
      case "chilist_text_dd":
      case "chilist_ddlist":
      case "chilist_tree":
       // copy the view index to the modify index hidden fields
       srcIdxNam = "curfldidx"+i+"_"+j;
       tarIdxNam = "curmodidx"+i+"_"+j;
       srcIdxID = document.getElementById(srcIdxNam);
       tarIdxID = document.getElementById(tarIdxNam);
       if ((srcIdxID != null) && (tarIdxID != null)) tarIdxID.value = srcIdxID.value;
       
       // select the correct drop down item
       tmpIdx = srcIdxID.value;
       listID = tarVarID;
       var listNumItems = listID.length;
       for (idx=0; idx <= listNumItems-1; idx++)
       {
        if (listID.options[idx].value == tmpIdx)
        {
         listID.options[idx].selected = true;
         break;
        }
       }
       srcIdxNam = "curfldidx"+i+"_"+j;
       tarIdxNam = "curfldval"+i+"_"+j;
       srcIdxID = document.getElementById(srcIdxNam);
       tarIdxID = document.getElementById(tarIdxNam);
       //if ((srcIdxID != null) && (tarIdxID != null)) tarIdxID.value = srcIdxID.value;
       break;
       
      default:
       if ((srcVarID != null) && (tarVarID != null)) tarVarID.value = srcVarID.value;
       break;
     }
    }
   }
   return false;
   break;
 
  case 'CancelOne':

   // adapt mode variables
   varNam = "listMode";
   varID = (document.getElementById(varNam));
   if (varID != null) preListMode = varID.value;
   
   // init toolbars for this action
   ShowToolbar("list_main_toolbar","Init");
   if (preListMode == 'AddOne')
   {
    ShowToolbar("list_detail_toolbar","Init");
   }
   else
   {
    ShowToolbar("list_detail_toolbar","CancelOne");
   }

   // reset detail record description
   varNam = "detrecdes";
   varID = (document.getElementById(varNam));
   if (varID != null) varID.value = "";
   

   // adapt mode variables
   varNam = "listMode";
   varID = (document.getElementById(varNam));
   if (varID != null) varID.value = "ViewList";

   varNam = "listmodetxt";
   varID = (document.getElementById(varNam));
   if (varID != null) varID.innerHTML = "ViewList";
  
   // show data filter
   for(i=1;i<=numFlds;i++)
   {
    varNam = "filter_fld"+i;
    varID = document.getElementById(varNam);
    if (varID != null) varID.disabled = false;
   }
   
  
   // reset all detail variables values to original
   for(i=1;i<=numFlds;i++)
   {
    // check if variable exists
    varNam = "curfldval"+i+"_1";
    varID = (document.getElementById(varNam));
    if ((i>1) && (varID == null)) break;
    
    switch (fldModTypArr[i])
    {
     case 'listbox':
      daStr = '';
      varNam = "daStr"+i;
      varID = document.getElementById(varNam);
      if (varID != null) daStr = varID.value;
     
      // Hide buttons 
      srcVarNam = "curmodbtnltr"+i+"_1";
      srcVarID = document.getElementById(srcVarNam);
      if (srcVarID != null)
      {
       srcVarID.className = 'detailviewhide';
       srcVarNam = "curmodbtnrtl"+i+"_1";
       srcVarID = document.getElementById(srcVarNam);
       if (srcVarID != null) srcVarID.className = 'detailviewhide';
     
       // EMPTY LISTBOX ELEMENTS related to this contact
       //alert("in listbox");
       tarVarNam = "curfldval"+i+"_1";
       tarVarID = document.getElementById(tarVarNam);
       tarVarID.length = 0;
//       numItems = numValsPerFldArrVal[i];
//       itemsIdxStr = '';
//       for (j=1;j<=numItems;j++)
//       {
//        srcVarNam = "fldval"+recNum+"_"+i+"_"+j;
//        if (document.getElementById(srcVarNam) != null)
//        {
//         tmpIdxVal = document.getElementById(srcVarNam).value;
//         tmpSepPos = tmpIdxVal.indexOf(",");
//         tmpIdx = tmpIdxVal.substr(0,tmpSepPos);
//         itemsIdxStr = itemsIdxStr+';'+tmpIdx;
//         tmpVal = tmpIdxVal.substr(tmpSepPos+1);
//         addOption = new Option(tmpVal,tmpIdx);
//         tarVarID.options[j-1] = addOption;
//         tmpIdx = ','+tmpIdx+',';
//         //alert("daStr = "+daStr+" TmpIdx = "+tmpIdx);
//         if (daStr.indexOf(tmpIdx) > -1)
//         {
//          //alert("Option "+tmpVal+" is disabled");
//          tarVarID.options[j-1].disabled = true;
//         }
//        }
//        else
//        {
//         alert("source hidden variable ("+srcVarNam+") not found...");
//        }
//       }
//       itemsIdxStr = itemsIdxStr+';';
       // FILL mod select with original data;
       // get temporary listbox ID and length
       srcVarNam = "curtmpval"+i+"_1";
       srcVarID = document.getElementById(srcVarNam);
       numItems = srcVarID.length;
       // get mod listbox; empty and add all temporary items except for the contact's ones
       tarVarNam = "curmodval"+i+"_1";
       tarVarID = document.getElementById(tarVarNam);
       tarVarID.length = 0;
//       k = 0;
       for (j=0;j<numItems;j++)
       {
//        findStr = ';'+srcVarID.options[j-1].value+';';
//        if (itemsIdxStr.match(findStr) != findStr)
//        {
        tarVarID.options[j] = new Option(srcVarID.options[j].text,srcVarID.options[j].value);
        tmpIdx = ','+srcVarID.options[j].value+',';
        if (daStr.indexOf(tmpIdx) > -1)
        {
         //alert("Option "+srcVarID.options[j-1].text+" is disabled");
         tarVarID.options[j].disabled = true;
        }
//        k++;
//        }
       }
      }
      break;
      
     case "yn":
     case "chilist_text_dd":
     case "chilist_ddlist":
     case "chilist_tree":
      // 
      for(j=1;j<=50;j++)
      {
//       srcVarNam = "curmodval"+i+"_"+j;
//       srcVarID = (document.getElementById(srcVarNam));
//       if (srcVarID == null) break;
       tarVarNam = "curfldval"+i+"_"+j;
       tarVarID = (document.getElementById(tarVarNam));
       if (tarVarID != null) tarVarID.value = '';
      }
      break;
     
    }
    // while there are variables show / hide 
    for(j=1;j<=50;j++)
    {
     srcVarNam = "curfldval"+i+"_"+j;
     srcVarID = (document.getElementById(srcVarNam));
     if (srcVarID != null)
     {
      srcVarID.className = 'detailviewshow';
     }
      else 
     {
      break;
     }
     tarVarNam = "curmodval"+i+"_"+j;
     tarVarID = (document.getElementById(tarVarNam));
     if (tarVarID != null)
     {
      tarVarID.className = 'detailedithide';
     }
     else
     {
      break;
     }
     if ((srcVarID != null) && (tarVarID != null)) srcVarID.value = '';
    }
   }
   return false;
   break;

  case 'SaveOne':
   for(i=1;i<=numFlds;i++)
   {
    // check if variable exists
    varNam = "curfldval"+i+"_1";
    varID = (document.getElementById(varNam));
    if ((i>1) && (varID == null)) break;
    
    switch (fldModTypArr[i])
    {
     case 'listbox':
      //create idxString of items in listbox
      varNam = "curfldval"+i+"_1";
      varID = (document.getElementById(varNam));
      if (varID != null)
      {
       idxStr = ',';
       numListItems = varID.length;
       //alert("Number of list box items "+numListItems);
       for (j=0;j<numListItems;j++)
       {
        if (varID.options[j].disabled == false) idxStr = idxStr+varID.options[j].value+',';
       }
       if (idxStr == ',') idxStr = '';
       varNam = "curidxstr"+i+"_1";
       varID = (document.getElementById(varNam));
       if (varID != null) varID.value = idxStr;
      }
      break;
    }
   }
   break;

  case 'DetailLtR':
   i = param1;
   leftVarNam = "curfldval"+i+"_1";
   rightVarNam = "curmodval"+i+"_1";
   ProcessScrollListItem('add',leftVarNam,rightVarNam,'');
   break;

  case 'DetailRtL':
   i = param1;
   leftVarNam = "curfldval"+i+"_1";
   rightVarNam = "curmodval"+i+"_1";
   ProcessScrollListItem('del',leftVarNam,rightVarNam,'');
   break;

  case 'show_hide_field':
   formRef = param1;
   //varNam = "form_name";
   //formName = document.getElementById(varNam).value;
   ValidateListSubmit(formRef);
   break;
 }
 return false;
}
  


function ValidateListSubmit(formRef)
{
 //alert("In ValidateListSubmit");
 elementID = document.getElementById("pageAction");
 if (elementID != null) action = elementID.value;
 elementID = document.getElementById("listAction");
 if (elementID != null) action = elementID.value;
 //alert("Action = "+action);
 var disabledMsg = "This feature is disabled during the modification of list data";

 var varNam = "listMode";
 var varID = (document.getElementById(varNam));
 if (varID != null) listMode = varID.value;
 
 switch (action)
 {
  case 'DelOne':
   var recDes = document.getElementById("currecdes").value;
   var listNam = document.getElementById("listName").value;
   var answer=confirm("Are you sure you want to delete\r\n" + recDes + " from the " + listNam + "?");
   if (answer)
   {
    return true;
   }
   else
   {
    return false;
   }
   break;

  // all actions that are dealt with in SetAction and need NO form submit
  case 'CancelOne':
  case 'AddOne':
  case 'ModOne':
   return false;
   break;

  case 'SaveOne':
   //alert('Saving changes!');
   break;

   case 'show_new_page':
   case 'show_hide_field':
    //alert("Forcing form submit "+formRef);
   //return true;
   formRef.submit();
   break;
   
  case 'DoBold':
   return false;
   break;
 }
 return true;
}
  

function xaddslashes(str)
{
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Ates Goral (http://magnetiq.com)
    // +   improved by: marrtins
    // *     example 1: addslashes("kevin's birthday");
    // *     returns 1: "kevin\'s birthday"
 
    return str.replace('/(["\'\])/g', "\\$1").replace('/\0/g', "\\0");
}

function addslashes(str) {
str=str.replace(/\'/g,'\\\'');
str=str.replace(/\"/g,'\\"');
str=str.replace(/\\/g,'\\\\');
str=str.replace(/\0/g,'\\0');
return str;
}

function stripslashes(str) {
str=str.replace(/\\'/g,'\'');
str=str.replace(/\\"/g,'"');
str=str.replace(/\\\\/g,'\\');
str=str.replace(/\\0/g,'\0');
return str;
}

function ValidateFormSubmit(pageRef,formRef)
{
 //alert("In ValidateFormSubmit: Page: "+pageRef+" Form: "+formRef);
 action = '';
 elementID = document.getElementById("pageAction");
 if (elementID != null) action = elementID.value;
 //alert("Action ="+action);
 if (pageRef == 'docadd')
 {
  if (formRef == 'TocAdd')
  {
   elementID = document.getElementById("formaction");
   if (elementID != null) action = elementID.value;
   //alert(action);
   switch (action)
   {
    case 'save_content':
      return true;
      break;
    case 'toc_select_item':
    case 'toc_move_up':
    case 'toc_move_dn':
    case 'toc_promote':
    case 'toc_demote':
    case 'toc_insert_above':
    case 'toc_insert_below':
    case 'toc_edit_one':
    case 'toc_delete_current':
    case 'toc_save_one':
    case 'toc_cancel_one':
     return false;
     break;
   }
  }
 }
 return true;
}


function ShowImage(objID, imagePath)
{
 if (document.getElementById(objID) != null)
 {
  var image = document.getElementById(objID);
  image.src = imagePath;
 }
}


function SubmitForm(formID, fldID)
{
 varNam = "listMode";
 varID = (document.getElementById(varNam));
 if (varID != null) action = varID.value;
 
 if (action != "ModifyOne")
 {
  var fld = document.getElementById(fldID);
  fld.value = "set";
  var form = document.getElementById(formID);
  form.submit();
 }
}

