      /*
       *
       */
function tID(ele, id) {
	while (ele.getAttribute("tID")!="mainTable") {
		ele = ele.parentNode;
		if (ele.nodeType!=1) {
			return null;
		}
	}
	if (id =="mainTable") return ele;
	var table = ele.getElementsByTagName("*");
	for (var i=0;i<table.length;i++) {
		if (table[i].getAttribute("tID") == id) return table[i];
	}
	return null;
}
      
      /*
       *
       */
      function toggleNewEntryForm(obj, editValues, errors) {
        if (tID(obj,'newEntry').style.display=='none') { 
          turnEditOff(obj);
 
          if (tID(obj,'filter').style.display!='none') {
            toggleFilterForm(obj);
          }
          if (errors) {
             var infotext = tID(obj,"infotext");
          }
          tdI = 0;
          row = tID(obj,'newEntry');
          for (i=0; i<row.childNodes.length; i++) {
            td = row.childNodes.item(i);
            if (td.nodeType==1) {
              for (j=0; j<td.childNodes.length; j++) {
                inp = td.childNodes.item(j);
                if (inp.nodeType==1 && inp.type!="submit") {
                  if (editValues && editValues[tdI]) {
                    inp.value = editValues[tdI];
                  }
                  if (errors && errors[tdI]!=null) {
                    inp.className = "error";
                    addHint(td,"FIELD ERROR: " + errors[tdI],infotext);
                  }
                }
              }                
              tdI++;
            }
          }
          
          tID(obj,'newEntry').style.display='';
          tID(obj,'newEntryHint').style.display='';
        }else {
          tID(obj,'newEntry').style.display='none';
          tID(obj,'newEntryHint').style.display='none';
        }
      }
      
      
      /*
       *
       */
      function toggleFilterForm(obj) {
        if (tID(obj,'filter').style.display=='none') {        
          turnEditOff(obj);
          
          if (tID(obj,'newEntry').style.display!='none') {
            toggleNewEntryForm(obj);
          }
          
          tID(obj,'filter').style.display='';
          tID(obj,'filterHint').style.display='';
        } else {
          tID(obj,'filter').style.display='none';
          tID(obj,'filterHint').style.display='none';
        }
      }
      
      
      /*
       *
       */
      function getEditClassNames(obj) {
        var c = new Array();
        var tdI = 0;
        var row = tID(obj,'newEntry');
        var td,i,j,inp;
        for (i=0; i<row.childNodes.length; i++) {
          td = row.childNodes.item(i);
          if (td.nodeType==1) {
            for (j=0; j<td.childNodes.length; j++) {
              inp = td.childNodes.item(j);
              if (inp.nodeType==1 && (inp.type!="submit" || inp.name != "cancel")) {
                c[tdI] = inp.className;
                if (c[tdI]=="") {
                  c[tdI] = inp.src;
                }
                tdI++;
              }
            }
          }
        }
        
        return c;
      }
      
      
      /*
       *
       */
      function dateFieldAttributes(obj) {
        var c = new Array();
        var tdI = 0;
        var row = tID(obj,'newEntry');
        var i,j,td,inp;
        for (i=0; i<row.childNodes.length; i++) {
          td = row.childNodes.item(i);
          if (td.nodeType==1) {
            for (j=0; j<td.childNodes.length; j++) {
              inp = td.childNodes.item(j);
              if (inp.nodeType==1 && (inp.type!="submit" || inp.name != "cancel")) {
                c[tdI] = inp.getAttribute("isDate");
                tdI++;
              }
            }
          }
        }
        
        return c;
      }
      
      
      /*
       *
       */
      function doEdit(obj, editValues, errors) {
        var infotext=tID(obj,"infotext");
        turnEditOff(obj);
        x = tID(obj,'filter');
        //alert(" $ "+x);
        if (x.style.display!='none') {
          toggleFilterForm(obj);
        }
 
        if (tID(obj,'newEntry').style.display!='none') {
          toggleNewEntryForm(obj);
        }
        
        trow = obj;
        while (trow.nodeName!="TR") {
          trow = trow.parentNode;
        }
        
        tds = trow.childNodes;
        
        trow.setAttribute("tID", "editedRow");
        
        tds2 = new Array();
        count=0;
        for (i=0; i<tds.length; i++) {
          if (tds[i].nodeType==1) {
            tds2[count++] = tds[i];
          }
        }

        editClasses = getEditClassNames(obj);
        editAttr = dateFieldAttributes(obj);
        //alert(editClasses);
        for (i=0; i<tds2.length-1; i++) {
          tds2[i].setAttribute("oldHTML", tds2[i].innerHTML);
          val = tds2[i].innerHTML;
          cls = editClasses[i];
          
          
          //TODO: WORKAROUND
          //TODO: WORKAROUND
          //TODO: WORKAROUND
          
          if (cls=="error") {
            cls="mandatory";
          }
          
          //TODO: WORKAROUND
          //TODO: WORKAROUND
          //TODO: WORKAROUND
          
          
          if (editValues) {
            val = editValues[i];
            if (errors[i]!=null) {
              cls = "error";
              addHint(tds2[i],"FIELD ERROR: " + errors[i],infotext);
            }
          }
          
          if (tds2[i].childNodes.length==0 
               || tds2[i].childNodes.length==1 
               && tds2[i].childNodes[0].nodeType!=1) {
            
            if (cls=="readonly") {
              tds2[i].innerHTML = "<input type='text' name='"+ i +"' class='"+ cls +"' value='"+ val +"'>" + val;
            } else {
              if (editAttr[i]=="true") {
                tds2[i].innerHTML = "<input type='text' onfocus='showCalendarControl(this);' name='"+ i +"' class='"+ cls +"' value='"+ val +"'>";
              } else {
                tds2[i].innerHTML = "<input type='text' name='"+ i +"' class='"+ cls +"' value='"+ val +"'>";
              }
            }
            tds2[i].className = "input";
            
          } else {
            for (k=0; k<tds2[i].childNodes.length; k++) {
              if (tds2[i].childNodes[k].nodeName=="TEXTAREA") {
                  if (cls=="readonly") {
  		              tds2[i].childNodes[k].className = cls;
		              tds2[i].childNodes[k].readOnly = true;
		            } else {
  		              tds2[i].childNodes[k].className = cls;
		              tds2[i].childNodes[k].readOnly = false;
		            }
		            tds2[i].childNodes[k].name = ""+i;
	               break;
	              
              } else if (tds2[i].childNodes[k].nodeName=="IMG") {
                  if (cls.indexOf(".gif")>=0) {
                    cls="readonly";
                    tds2[i].innerHTML += "<input class='"+ cls +"' type='checkbox' name='"+ i +"' "+ (tds2[i].childNodes[k].src.indexOf("checkbox_off.gif")<0?"checked":"") +">";
	               } else {
                    tds2[i].innerHTML = "<input class='"+ cls +"' type='checkbox' name='"+ i +"' "+ (tds2[i].childNodes[k].src.indexOf("checkbox_off.gif")<0?"checked":"") +">";
                  }
                  tds2[i].className = "input";
	               break;
              }
            }
            
          }
        }
        
        tds2[i].setAttribute("oldHTML", tds2[i].innerHTML);
        tds2[i].className = "controls";
        tds2[i].innerHTML = 
          " <input type='hidden' name='index' value='"+ trow.getAttribute("rowIndex") +"'> " + 
          " <input type='hidden' name='pushed' value='save'> " +
          " <input type='button' onClick=' submitEditEntryForm(this)' class='submit' style='width:54%;' value='Save' name='save'> " +
          " <input type='button' onClick=' turnEditOff(this)' class='submit' style='width:40%;' value='Cancel' name='cancel'> ";
}
      
      
      /*
       *
       */
function submitEditEntryForm(obj) {
	var form = tID(obj,'editEntryForm');
	var row = tID(obj,'editedRow').getElementsByTagName("input");
	var ele;
	for (i=0; i<row.length; i++) {
		if (row[i].checked || (row[i].type != "radio" && row[i].type != "checkbox")) {
			ele = document.createElement("input");
			ele.type = "hidden";
			ele.name = row[i].name;
			row[i].name = "";
			ele.value = row[i].value;
			form.appendChild(ele);
		}
	}
	form.submit();
} 
      
      
      /*
       *
       */
      function turnEditOff(obj){
        row = tID(obj, "editedRow");
        if (row==null) return;
        
        if (row.rowIndex%2==0) {
          tdClass = "row1";
        } else {
          tdClass = "row2";
        }
 
        for (i=0; i<row.childNodes.length; i++) {
          td = row.childNodes.item(i);
          if (td.nodeType==1) {
            td.innerHTML = td.getAttribute("oldHTML");
            if (td.className.indexOf("textarea")<0) {
              td.className = tdClass;
            }
          }
        }
        
        row.setAttribute("tID", null);
      }
      

      /*
       *
       */
      function sortMover(im){
        lastImSrc=null;        
        // alert(im.src + " / "+im.src.indexOf("sort_asc_i.gif") + " / "+im.src.substring(0, im.src.indexOf("sort_asc_i.gif")));
		
        if (im.src.indexOf("sort_asc_i.gif")>=0) {
          lastImSrc = im.src;
          im.src = (im.src.substring(0, im.src.indexOf("sort_asc_i.gif")) + "sort_asc.gif");
        }
        
        if (im.src.indexOf("sort_desc_i.gif")>=0) {
          lastImSrc = im.src;
          im.src = (im.src.substring(0, im.src.indexOf("sort_desc_i.gif")) + "sort_desc.gif");
        }
      }
      
      
      /*
       *
       */
      function sortMout(im){
        if (lastImSrc!=null) {
          im.src=lastImSrc;
        }
      }
      
      
      /*
       *
       */
      function toggleCheckboxes(obj) {
        var maintable = tID(obj, "mainTable");
        check = tID(obj, "checkbox0");
        for (var i=0,check = tID(obj, "checkbox0");check!=null;check = tID(obj, "checkbox"+(++i))) {
           check.checked = obj.checked;
        }
      }
	  
	  /*
       *
       */

      function clickZKbutton(obj){
        obj.setAttribute("href", "javascript:;");
         	d = (obj.getAttribute("customAction"));
	        obj.setAttribute("href", d);
      }

      function multiLink(obj, message, isIndexInfo, minRows) { 
        obj.setAttribute("href", "javascript:;");
        
        if (!isIndexInfo) {
          deleteString = "/indexes/";
          i=0; 
          count=0;         
          check = tID(obj, "checkbox"+i);
        
          while (check!=null) {
            if (check.checked) {
              deleteString += (i+",");
              count++;
            }

            i++;
            check = tID(obj, "checkbox"+i);
          }
          deleteString = deleteString.substring(0, deleteString.length-1);
          
          if (count<minRows) {
	        alert("You must select at least "+minRows+" entry(s) to perform this action!");
	      } else if (message=="" || confirm(message + " ("+ count +" entries)")) {
	        d = (obj.getAttribute("customAction")+deleteString);
	        obj.setAttribute("href", d);
	      } 
          
        } else {
	      if (message=="" || confirm(message)) {
         	d = (obj.getAttribute("customAction"));
	        obj.setAttribute("href", d);
	      }
        }
        
      }
            
      
      /*
       *
       * Parameters: 
       *    tableId, 
       *    rowIndex,
       *    editedValues [Array], 
       *    invalidFields [Array]
       */
      function showValidationErrors(tableId, rowIndex, editValues, errorMessages) {
        table = document.getElementById(tableId);
      
        /*
         * New entry.
         */
        if (rowIndex==-1) {
          row = tID(table, "newEntry");
          toggleNewEntryForm(table, editValues, errorMessages);
        
        /*
         * Row edit.
         */
        } else {
          row = tID(table, "row"+rowIndex);
          doEdit(row, editValues, errorMessages);
        }
      }
      
      
      /*
       *
       */
      

      var firstCE = null;
      
      function collapseOrExpand() {
        firstCE = null;
        walkCE(document.body);
      }
      
      var cookieName = "collapse_all";

      function walkCE(ob2) {
        if (ob2.nodeType!=1) {
          return;
        }
        
        if (ob2.className=="MsoNormal") {
          if (firstCE==null) {
            firstCE=ob2.style.display;
          }
          if (firstCE==null || firstCE=="") {
            ob2.style.display= "none";
            b = true;
          } else {
            ob2.style.display= "";
            b = false;
          }
		  setCookie(cookieName,b,350);	
        }
        
        var oob2=ob2;
        var i2=0;        
        var rr2;
        for (i2=0; i2<oob2.childNodes.length; i2++) {
          rr2 = walkCE(oob2.childNodes.item(i2));
          if (rr2!=null) return;
        }
      }
      
function setCookie(NameOfCookie, value, expiredays) 
{
	var ExpireDate = new Date ();
	ExpireDate.setTime(ExpireDate.getTime() + (expiredays * 24 * 3600 * 1000));
	document.cookie = NameOfCookie + "=" + escape(value) + 
	((expiredays == null) ? "" : "; expires=" + ExpireDate.toGMTString());
}

function getCookie(name)
{
    var dc = document.cookie;
    var prefix = name + "=";
    var begin = dc.indexOf("; " + prefix);
    if (begin == -1)
    {
        begin = dc.indexOf(prefix);
        if (begin != 0) return null;
    }
    else
    {
        begin += 2;
    }
    var end = document.cookie.indexOf(";", begin);
    if (end == -1)
    {
        end = dc.length;
    }
    return unescape(dc.substring(begin + prefix.length, end));
}

function deleteCookie(name, path, domain)
{
    if (getCookie(name))
    {
        document.cookie = name + "=" + 
            ((path) ? "; path=" + path : "") +
            ((domain) ? "; domain=" + domain : "") +
            "; expires=Thu, 01-Jan-70 00:00:01 GMT";
    }
}
      
      
      