/*global-block-begin*/


barrique.base.artifact.domain.RootDomain.prototype.getTreeChildren = function() {
    var list = [];
    barrique.array.each(this.getSubDomains(), function(r) {
        if (r.getName()[0] != '.') {
            list.push(r);
        }
    }); 
    return list; 
}
barrique.base.artifact.domain.RootDomain.prototype.getTreeIcon = function() { return barrique.base.getIconHref('filesystems/folder');}
barrique.base.artifact.domain.RootDomain.prototype.getTreeLabel = function() { return 'Root'; }


/*global-block-end*/
/*function-begin (getHeadHtml1w) */
function getHeadHtml1w() {
    var html = '';
    html += '\n\n\n\n';
    return html;
}
/*function-end (getHeadHtml1w) */
/*function-begin (getBodyHtml1w) */
function getBodyHtml1w() {
    var html = '';
    html += '\n';
    return html;
}
/*function-end (getBodyHtml1w) */
/*global-block-begin*/

barrique.module.tag.TagCategory.prototype.getTreeChildren = function() { return this.getSubCategories(); }
barrique.module.tag.TagCategory.prototype.getTreeLabel = function() { return getHtmlArtifactTreeDefaultTitle(this, this.getHref(), this.getTitle()); }

/*global-block-end*/
/*function-begin (getHeadHtml1g) */
function getHeadHtml1g() {
    var html = '';
    html += '\n\n\n\n';
    return html;
}
/*function-end (getHeadHtml1g) */
/*function-begin (getBodyHtml1g) */
function getBodyHtml1g() {
    var html = '';
    html += '\n';
    return html;
}
/*function-end (getBodyHtml1g) */
/*global-block-begin*/


barrique.base.security.Group.prototype.getTreeChildren = function() { return this.getSubGroups(); }
barrique.base.security.Group.prototype.getTreeIcon = function() { return barrique.base.getIconHref('filesystems/folder'); }
barrique.base.security.Group.prototype.getTreeLabel = function() { return getHtmlArtifactTreeDefaultTitle(this, this.getHref(), this.getCommonName()); }

barrique.base.security.DirectoryDomain.prototype.getTreeChildren = function() { return this.getGroups(); }
barrique.base.security.DirectoryDomain.prototype.getTreeIcon = function() { return barrique.base.getIconHref('filesystems/folder'); }
barrique.base.security.DirectoryDomain.prototype.getTreeLabel = function() { return getHtmlArtifactTreeDefaultTitle(this, this.getHref(), 'Users & Groups'); }


/*global-block-end*/
/*function-begin (getHeadHtml2c) */
function getHeadHtml2c() {
    var html = '';
    html += '\n\n\n\n\n';
    return html;
}
/*function-end (getHeadHtml2c) */
/*function-begin (getBodyHtml2c) */
function getBodyHtml2c() {
    var html = '';
    html += '\n';
    return html;
}
/*function-end (getBodyHtml2c) */
/*global-block-begin*/


barrique.base.syndication.SyndicateDomain.prototype.getTreeChildren = function() { return this.getServers(); }
barrique.base.syndication.SyndicateDomain.prototype.getTreeIcon = function() { return barrique.base.getIconHref('filesystems/folder'); }
barrique.base.syndication.SyndicateDomain.prototype.getTreeLabel = function() { return getHtmlArtifactTreeDefaultTitle(this, this.getHref(), this.getTitle()); }

barrique.base.syndication.SyndicatedServer.prototype.getTreeChildren = function() { return this.getSubDomains(); }
barrique.base.syndication.SyndicatedServer.prototype.getTreeIcon = function() { return barrique.base.getIconHref('filesystems/folder'); }
barrique.base.syndication.SyndicatedServer.prototype.getTreeLabel = function() { return getHtmlArtifactTreeDefaultTitle(this, this.getHref(), this.getTitle()); }


/*global-block-end*/
/*function-begin (getHeadHtml2k) */
function getHeadHtml2k() {
    var html = '';
    html += '\n\n\n\n';
    return html;
}
/*function-end (getHeadHtml2k) */
/*function-begin (getBodyHtml2k) */
function getBodyHtml2k() {
    var html = '';
    html += '\n';
    return html;
}
/*function-end (getBodyHtml2k) */
/*global-block-begin*/

barrique.module.docs.DocumentCategory.prototype.getTreeChildren = function() { return this.getSubCategories(); }
barrique.module.docs.DocumentCategory.prototype.getTreeLabel = function() { return getHtmlArtifactTreeDefaultTitle(this, this.getHref(), this.getTitle()); }

/*global-block-end*/
/*function-begin (getHeadHtml1l) */
function getHeadHtml1l() {
    var html = '';
    html += '\n\n\n\n';
    return html;
}
/*function-end (getHeadHtml1l) */
/*function-begin (getBodyHtml1l) */
function getBodyHtml1l() {
    var html = '';
    html += '\n';
    return html;
}
/*function-end (getBodyHtml1l) */
/*global-block-begin*/


artifacttree = { 

    artifactList:[],
    
    getHtmlArtifactTree: function(treeId, rootArtifact, showRootArtifact) {
        var html = '<div>';
        html += this.getHtmlArtifactTreeNode(null, null, rootArtifact, showRootArtifact);
        html += '</div>';
        return html;
    },
    
    getHtmlArtifactTreeNode: function(source, relation, target, showArtifact) {
        //console.debug('getHtmlArtifactTreeNode', source, relation, target, showArtifact);
        var artifact = target ? target : relation;
        if (typeof(artifact.getTreeLabel) == 'undefined') { return ''; }
    
        var iconSrc = artifact.getTreeIcon(),
            label = artifact.getTreeLabel(),
            children = artifact.getTreeChildren(),
            href = artifact.getHref();
            
        if (!href && source) {
            href = typeof(source.getTreeChildHref) != 'undefined' ? source.getTreeChildHref(relation) : this.getDefaultChildHref(relation, source);
            //console.debug('artifacttree.getHtmlArtifactTreeNode', href, artifact.getArtifactId());
            if (href) { artifactManager.setHref(artifact, href); }
        }
        
        var treeNodeId = this.artifactList.length;
        this.artifactList.push(artifact);
        var html = showArtifact ? '<div><img src="'+iconSrc+'" width="22" height="22" '+
                'style="vertical-align:middle;"/>'+label : '';
        if (children !== null) {
        	var relations = [].concat(children);
        	relations.sort(function(a, b) {
                var t1 = a.getTarget(), t2 = b.getTarget();
       			var n1 = '', n2 = '';
                if (t1 && t1.getTitle && t1.getTitle()) { n1 = t1.getTitle().toString(); }
                else { n1 = a.getName(); }  
                if (t2 && t2.getTitle && t2.getTitle()) { n2 = t2.getTitle().toString(); } 
                else { n2 = a.getName(); }
       			if (n1 == n2) { return 0; }
        		return n1 > n2 ? +1 : -1; 
        	});
        	var childCount = Math.min(100, relations.length);  
            for (var i = 0; i < childCount; i++) {
                html += this.getHtmlArtifactTreeNode(target, relations[i], relations[i].getTarget(), true);
            }
        }
        html += showArtifact ? '</div>' : '';
        return html;
    },
    
    getDefaultChildHref: function(relation, source) {
        if (typeof(relation.getName) == 'undefined') { return null; }
        if (!source) { source = relation.getSource(); }
        if (!source) { return null; }
        var sourceHref = artifactManager.getHref(source),
            href = null;
        if (sourceHref) {
            href = sourceHref;
            if (href.length > 0 && href[href.length-1] != '/') { href += '/'; }
            href += relation.getName();
        }
        return href;
    },
    
    getShortName: function(artifact) {
        var javaClass = artifact.getJavaClass();
        return javaClass.substring(javaClass.lastIndexOf('.')+1, javaClass.length);
    }
    

};

function tagArtifactTree(args, nestedHtmlGetter) {
    var rootArtifact = args.rootArtifact,
        rootId = typeof args.id != 'undefined' ? args.id : 'ArtifactTree',
        showRootArtifact = typeof args.showRootArtifact != 'undefined' ? args.showRootArtifact=='true' : true,
        alt = typeof(args.alt) != 'undefined' ? args.alt : '';
    
    if (!showRootArtifact && rootArtifact.getTreeChildren().length === 0) {
        return '<div class="artifacttree-alt">'+alt+'</div>';
    }
    return artifacttree.getHtmlArtifactTree(rootId, rootArtifact);
}

barrique.base.artifact.HasNamedSubItem.prototype.getTreeChildren = function() { return null; };
barrique.base.artifact.HasNamedSubItem.prototype.getTreeIcon = function() {
	var target = this.getTarget();
	if (target && target.getIcon) {
		var icon = target.getIcon();
		if (icon) {
			return icon.getUrl();
		}
	}  
	return barrique.base.getIconHref('filesystems/folder');
};
barrique.base.artifact.HasNamedSubItem.prototype.getTreeLabel = function() {
    var href = this.getHref();
    if (!href) { href = serverManager.getRelativeUrl(this.getName()); } 
    else { href = barrique.contextPath+'/'+href; }
    return '<a href="'+href+'">'+this.getName()+'</a>'; 
};

barrique.base.artifact.Item.prototype.getTreeIcon = function() {
	if (this.getIcon) {
		var icon = this.getIcon();
		if (icon) {
			return icon.getUrl();
		}
	}  
	return barrique.base.getIconHref('filesystems/folder');
};

/*global-block-end*/
/*function-begin (getHeadHtmly) */
function getHeadHtmly() {
    var html = '';
    return html;
}
/*function-end (getHeadHtmly) */
/*function-begin (getBodyHtmly) */
function getBodyHtmly() {
    var html = '';
    html += '\n\n';
    html += '\n\n';
    html += '\n\n\n';
    return html;
}
/*function-end (getBodyHtmly) */
/*function-begin (getHtmlArtifactTreeDefaultTitle) */
function getHtmlArtifactTreeDefaultTitle(artifact, href, title) {
    var html = '';
    html += '\n    ';
    var tagargs0 = new Object();
    tagargs0['artifact'] = artifact;
    html += tagContextMenu(tagargs0, function() {
    var html = '';
    html += '\<a href=\"';
    var scriptlet = href; if (scriptlet != null) html += scriptlet;
    html += '\"\>';
    scriptlet = title; if (scriptlet != null) html += scriptlet;
    html += '\<\/a\>';
    return html;
}
    );
    html += '\n';
    return html;
}
/*function-end (getHtmlArtifactTreeDefaultTitle) */
/*function-begin (getHtmlArtifactTreeDiv) */
function getHtmlArtifactTreeDiv() {
    var html = '';
    html += '\n    \<div class=\"\"\>\n        \n    \<\/div\>\n';
    return html;
}
/*function-end (getHtmlArtifactTreeDiv) */
