var is_ie = ( /msie/i.test(navigator.userAgent) &&
              !/opera/i.test(navigator.userAgent) );

function $(value) {
    var ctrl = document.getElementById(value);
    if (!ctrl)
        alert(value + ' is not found!');
    return ctrl;
}

function collapse_expand(div, img) {
    var ex = div.style.display == 'block';
    div.style.display = ex ? 'none' : 'block';
    img.alt = ex ? 'Expand' : 'Collapse';
    img.src = ex ? 'img/expand.gif' : 'img/collapse.gif';
}


/*TREE FUNCTIONS*/

var id = 0;
var nodes = [];

/*
 - sets unique identificator for each node
 - sets parent for each node
 - sets index for each node
 - sets level for each node
*/


function normalize(children, parent, level) {
    for (var i in children) {
        var child = children[i];
        child.id = id++;
        child.parent = parent;
        child.index = i;
        child.level = level;

        child.toString = function() {
            return this.selected ? "<strong>" + this.title + '</strong>' : this.href ? '<a href="' + this.href + '">' + this.title + '</a>' : this.title;
        }
        nodes[child.id] = child;
        if (child.children)
            normalize(child.children, child, level + 1);
    }
}

/*opens those part of tree which is selected*/
function opens(children) {
    for (var i in children) {
        var child = children[i];
        if (child.selected) {
            child.opened = true;
            return true;
        }
        if (child.children && opens(child.children)) {
            child.opened = true;
            return true;
        }
    }
    return false;
}

function tree_img(hasChildren, opened, root, lastItem, firstItem) {
    var filename = hasChildren ? opened ? 'minus' : 'plus' : 'empty';
    if (root)
        filename += firstItem ? '_vb' : lastItem && !(hasChildren && opened) ? '_ve' : '_v';
    return filename;
}

function img_class(level, lastItem, firstItem) {
    return firstItem && level == 0 ? 'class="firstItem"' : lastItem ? 'class="lastItem"' : '';
}


function draw_tree(prefix, children) {
    for (var i in children) {
        var child = children[i];

        document.write('<table class="' + (child.className ? child.className : '') + '" cellspacing="0" cellpadding="0" width="100%" border="0" >');
        var bckrgndstyle = i!=(children.length-1) ? ' style="background:url(img/tree/linebckgrnd_0.gif) left top repeat-y;border-color:red;" ' :'';
        document.write('<tr'+bckrgndstyle+'><td>');

        document.write(prefix);
        var root = child.level == 0;
     

        var img = '<img id="img_' + child.id + '" src="img/tree/' + tree_img(child.children, child.opened, root, i == children.length - 1, i == 0) + '.gif "' + img_class(child.level, i == children.length - 1, i == 0) + ' align="absmiddle"/>';
        document.write(child.children ? "<a href='javascript:tree_click(" + child.id + ")'>" + img + "</a>" : img);
        document.write('<p style="padding-left:2px;">' + child.toString() + "</p>");

        if (child.children) {
           document.write("<div class='children' id='children_" + child.id + "' style='display: " + (child.opened ? 'block' : 'none') + ";padding-left:10px;'>");
            var nextprefix = '';
            draw_tree(nextprefix, child.children);
            document.write('</div>');
        }

        document.write('</td></tr></table>');
    }
}

function draw_tree2(prefix, children) {
    for (var i in children) {
        var child = children[i];

        document.write('<table class="' + (child.className ? child.className : '') + '" cellspacing="0" cellpadding="0" width="100%" border="0" ');
        document.write('style="background:url(img/tree/linebckgrnd_' + child.level + '.gif) left top repeat-y;">');

/*
        if (i!=(children.length-1))
            document.write('style="background:url(img/tree/linebckgrnd_' + child.level + '.gif) left top repeat-y;">');
*/

        document.write('<tr><td>');

        document.write(prefix);
        var root = child.level == 0;
        if (!root)
            if (i != children.length - 1 || child.level == 1 && child.parent.index != child.parent.parent.children.length - 1)
                document.write('<img src="img/tree/tee.gif" align="absmiddle"/>');
            else
                document.write('<img src="img/tree/tee.gif" align="absmiddle"/>');

        var img = '<img id="img_' + child.id + '" src="img/tree/' + tree_img(child.children, child.opened, root, i == children.length - 1, i == 0) + '.gif "' + img_class(child.level, i == children.length - 1, i == 0) + ' align="absmiddle"/>';
        document.write(child.children ? "<a href='javascript:tree_click(" + child.id + ")'>" + img + "</a>" : img);
        document.write('<p style="padding-left:2px;">' + child.toString() + "</p></br/>");

        if (child.children) {
           document.write("<div class='children' id='children_" + child.id + "' style='display: " + (child.opened ? 'block' : 'none') + "'>");
            var nextprefix = prefix;
            if (!root)
                if (i == children.length - 1 && child.level > 1)
                    nextprefix += '<img src="img/tree/zero.gif" align="absmiddle"/>';
                else
                    nextprefix += '<img src="img/tree/tee.gif" align="absmiddle"/>'
            draw_tree(nextprefix, child.children);
            document.write('</div>');
        }

        document.write('</td></tr></table>');
    }
}


function tree(children) {
    opens(children);
    normalize(children, {children : children}, 0);
    draw_tree('', children);
}

function tree_click(id) {
    var child = nodes[id];
    child.opened = !child.opened;

    var div = $('children_' + id);
    div.style.display = child.opened ? 'block' : 'none';

    var img = $('img_' + id);
    img.src = 'img/tree/' + tree_img(child.children, child.opened, child.level == 0, child.index == child.parent.children.length - 1, child.index == 0) + '.gif';
}
