/*
 * updated 2004-12-07 13:02:16
 */


//return boolean
function isUserAgent() {
   return document.getElementById && (window.attachEvent || window.addEventListener);
}
//global function
function getObj(x) {
    if (document.getElementById)
    	return document.getElementById(x);
    else if (document.all && document.all(x) )
    	return document.all(x);
    else if (document.layers && document.layers[x])
    	return document.layers[x];
    else
    	return false;
}


function getNextSiblingByNodeName(element, nodeName) {
	do element = element.nextSibling;
	while (element && (element.nodeName.toLowerCase() != nodeName.toLowerCase()));
	return element;
}

function getPreviousSiblingByNodeName(element, nodeName) {
	do element = element.previousSibling;
	while (element && (element.nodeName.toLowerCase() != nodeName.toLowerCase()));
	return element;
}

function getFirstChildByNodeName(element, nodeName) {
	element = element.firstChild;
	if (element && (element.nodeName.toLowerCase() != nodeName.toLowerCase()))
		return getNextSiblingByNodeName(element, nodeName);
	else
		return element;
}

function getParentNodeByName(element, nodeName) {
  if(!isUserAgent) return; //cut off
	do element = element.parentNode;
	while (element && (element.nodeName.toLowerCase() != nodeName.toLowerCase()));
	return element;
}


//swap all checkboxes by the element ID
function invertAllCheckbox(id) {
    var root = getObj(id);
  var boxes = root.getElementsByTagName("input");
  for(i=0; i<boxes.length; i++) {
    if(boxes[i].type.toLowerCase() == "checkbox") {
      if(boxes[i].checked == true){
        boxes[i].checked = false;
      }//end: if - checked boxes
      else if(boxes[i].checked == false){
        boxes[i].checked = true;
      }//end: if - NONchecked boxes
    }
  }//end: for
  return false;
}

function resetAllCheckbox(id) {
    swapAllCheckbox(getCheckboxes(getObj(id)));
    return false;
}

function getCheckboxes(element)
{
    var resultBoxes = [];
    var inputs = element.getElementsByTagName("input");
    for(i=0; i<inputs.length; i++) {
        if(inputs[i].type.toLowerCase() == "checkbox") {
            resultBoxes.push(inputs[i])
        }
    }//end: for
    return resultBoxes;
}


//boxes: array
function swapAllCheckbox(boxes)
{
    var swapmode = true;
    for(i=0; i<boxes.length; i++) {
        if(boxes[i].checked == true){
            swapmode = false;
        }
    }//end: for
    for(i=0; i<boxes.length; i++) {
        boxes[i].checked = swapmode;
    }//end: for
    return false;
}



function chnChk(element) {
 var row = this.getParentNodeByName(element, "tr")
 var chkBox = row.getElementsByTagName("input")[0];
 row.style.backgroundColor = "#DADBEA";
 chkBox.checked = "checked";
 return false;
}

function setChangeStatusActions(id) {
  var root = getObj(id);
  var elements = root.getElementsByTagName("input");
  for(i=0; i<elements.length; i++) {
   if(elements[i].type.toLowerCase() != "checkbox")  continue;
   if(elements[i].type.toLowerCase() != "submit")  continue;
    elements[i].onblur = chnChk(this);
  }
}

function initTableRows(id, hoverColor) {
    var root = getObj(id);
    var rows = root.getElementsByTagName("tr");
    for (j=0; j<rows.length; j++){
    var row = rows[j];
        row.origBackgroundColor = row.style.backgroundColor;
        row.origBorder = row.style.border;
        row.onmouseover = function(){
            setCellsBackground(this, hoverColor)
        }
    }
}

function setCellsBackground(row, color){
    row.origCellBackg = [];
    var cells = row.getElementsByTagName("td");
    for (var j=0; j<cells.length; j++){
        row.origCellBackg.push(cells[j].style.backgroundColor)
        cells[j].style.backgroundColor = color;
    }
    row.onmouseout = function() {
        for (var j=0; j<cells.length; j++){
            cells[j].style.backgroundColor = this.origCellBackg[j];
        }
    }
}

//returns true || false
function isInArray(item, arr) {
    for(var x in arr) {
       if(item == arr[x])
       return true;
    }
    return false;
}

function confirmAction(mode){
    var msg = [];
    msg["process"] = "Really mark this user as PROCESSED ?";
    msg["unprocess"] = "Really mark this user as UNPROCESSED ?";
    msg["del"] = "Wirklich löschen ?";
    if(!mode) mode = "del";
    return window.confirm(msg[mode]);
}

function confirmMsg(msg){
    return window.confirm(msg);
}

//prototypes
Array.prototype.in_array = function (needle) {
    for (var x in this) {
        if (x == 0 && needle == 0) return false;
        if(this[x] == needle) {
            return true;
        }
    }
    return false;
}
//removes an item which equals the value
Array.prototype.deleteValue = function deleteFromArray(val) {
    for (var x in this) {
        if(this[x] == val) {
            this.splice(x, 1)
        }
    }
}


/**
 * Sets a Cookie with the given name and value.
 *
 * name       Name of the cookie
 * value      Value of the cookie
 * [expires]  Expiration date of the cookie (default: end of current session)
 * [path]     Path where the cookie is valid (default: path of calling document)
 * [domain]   Domain where the cookie is valid
 *              (default: domain of calling document)
 * [secure]   Boolean value indicating if the cookie transmission requires a
 *              secure transmission
 */
function setCookie(name, value, expires, path, domain, secure)
{
    document.cookie= name + "=" + escape(value) +
        ((expires) ? "; expires=" + expires.toGMTString() : "") +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain=" + domain : "") +
        ((secure) ? "; secure" : "");
}

/**
 * Gets the value of the specified cookie.
 *
 * name  Name of the desired cookie.
 *
 * Returns a string containing value of specified cookie,
 *   or null if cookie does not exist.
 */
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));
}

/**
 * Deletes the specified cookie.
 *
 * name      name of the cookie
 * [path]    path of the cookie (must be same as path used to create cookie)
 * [domain]  domain of the cookie (must be same as domain used to create cookie)
 */
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";
    }
}/**
 *  updated 2004-12-07 13:07:55
 *  TT Tree: Javascript
 *
 */


//constructor
function TTTree(treeId) {
    this.root = getObj(treeId);
    this._cookieName = 'ttui_tree[' + treeId + ']';
    this._openedElements_arr = this.getOpened();
    //alert (this._openedElements_arr)
    //this._openedElements_arr = new Array(); //reset
    //start app
    this.init();
}

//alert(getCookie('ttui_tree'));
function TTTree_getOpened() {
    var res = new Array();
    var str = getCookie(this._cookieName);
    if (str != null) {
        res = str.split(',');
    }
    return res;
}

function TTTree_initTree() {
    var TTTree = this;
    var root = this.root;
    //init plus/minus
    for (var i = 0, x = 1; (span = root.getElementsByTagName("span")[i]); i++, x++ ) {
        if (span.className.indexOf('sw') == -1) continue; //skip invalid span
        span.__ID = x;
        var kids = getNextSiblingByNodeName(span, 'ul');
        if (kids == null) {
            span.className = 'sw sw-blank';
        } else if (this._openedElements_arr.in_array(x) ) {
            kids.style.display = 'block';
            span.className = 'sw sw-minus';
        } else {
            kids.style.display = 'none';
        }
        var parentLi = getParentNodeByName(span, 'li');
        var link = getNextSiblingByNodeName(span, 'a');
        //clickable non blank
        if (span.className.indexOf('sw-blank') == -1) {
            link.onclick = span.onclick = span.ondblclick = function () {
               return TTTree.onBranchClick(this);
            };
        }
            //alert (span.firstChild.nodeValue)
            //span.firstChild.nodeValue = "&nbsp;&nbsp;&nbsp;&nbsp;";
    }

    //alert(root);
    var i = 1; do {
      //alert(i);
    }
    while (--i);

}


function TTTree_onClick(el) {
    //if (el.className == 'sw-blank') return false;
    var parent = getParentNodeByName(el, 'li');
    var kids = getNextSiblingByNodeName(el, 'ul');
    var ul = kids;
    var swaper = (el.className == 'span') ? el : getFirstChildByNodeName(parent, 'span');
    var elementId = swaper.__ID;

    //alert(kids.currentStyle.display)
    //alert(kids.style.display)
    if(ul) {
        var mode = (ul.style.display == "block" ||  ul.style.display == "") ? "none" : "block";
        ul.style.display = mode;
        if (mode == 'block') {
            swaper.className = 'sw sw-minus';
            this.openB(elementId);
        } else {
            swaper.className = 'sw sw-plus';
            this.hideB(elementId);
        }
        var headers = ul.getElementsByTagName("h4");
        if(headers){
            for(var i=0; i< headers.length; i++) {
                headers[i].style.display = mode;
            }
        }
    }
    return false;
}




function TTTree_addOpened(id) {
    if (this._openedElements_arr.in_array(id) ) return;
    //alert(_openedElements_arr)
    this._openedElements_arr.push(id);
     setCookie(this._cookieName, this._openedElements_arr)
}

function TTTree_removeOpened(id) {
    //alert(_openedElements_arr)
    this._openedElements_arr.deleteValue(id);
     setCookie(this._cookieName, this._openedElements_arr)
}


TTTree.prototype.init = TTTree_initTree;
TTTree.prototype.openB = TTTree_addOpened;
TTTree.prototype.hideB = TTTree_removeOpened;
TTTree.prototype.onBranchClick = TTTree_onClick;
TTTree.prototype.getOpened = TTTree_getOpened;



