/**
 * TreeNodeAdaptor.js - an adaptor for a simple TreeNode/TreeParentNode hierarchy 
 */

/**
 * Create a TreeNodeAdaptor
 * If JavaScript had abstract classes or interfaces, I would use them in here and in XmlAdaptor
 */
function TreeNodeAdaptor()
{
	/* a do-nothing constructor */
}

/**
 * Fetch the value of the given node
 * @return {number} node value
 */
TreeNodeAdaptor.prototype.getValue = function( node )
{
	return node.getValue(); // Important for polymorphism
};

/**
 * Fetch the value of the given node
 * @return {number} node value
 */
TreeNodeAdaptor.prototype.getChildren = function( node )
{
	return node.children;
};

/**
 * Fetch the name of the given node
 * @return {string} node name
 */
TreeNodeAdaptor.prototype.getName = function( node )
{
	return node.name;
};

TreeNodeAdaptor.prototype.getDate = function(node) {
	return node.date;
};

TreeNodeAdaptor.prototype.getCategory = function(node) {
	return node.category;
};

TreeNodeAdaptor.prototype.getInfo = function(node) {
	return node.info;
}

TreeNodeAdaptor.prototype.getUrl = function(node) {
	return node.url;
}

TreeNodeAdaptor.prototype.getImageurl = function(node){
	return node.imageurl;
}

TreeNodeAdaptor.prototype.getId = function (node) {
	return node.id;
}

TreeNodeAdaptor.prototype.getRelated = function(node) {
	return node.related;
}

TreeNodeAdaptor.prototype.colorOne = function(node) {
	return node.color_one;
}

TreeNodeAdaptor.prototype.colorTwo = function(node) {
	return node.color_two;
}

TreeNodeAdaptor.prototype.colorThree = function(node) {
	return node.color_three;
}

TreeNodeAdaptor.prototype.timeOne = function(node) {
	return node.time_one;
}

TreeNodeAdaptor.prototype.timeTwo = function(node) {
	return node.time_two;
}

TreeNodeAdaptor.prototype.timeThree = function(node) {
	return node.time_three;
}

TreeNodeAdaptor.prototype.showRelated = function(node) {
	return node.showrelated;
}

TreeNodeAdaptor.prototype.showBookmark = function(node) {
	return node.showbookmark;
}

TreeNodeAdaptor.prototype.hour = function(node) {
	return node.hour;
}

TreeNodeAdaptor.prototype.minute = function(node) {
	return node.minute;
}

TreeNodeAdaptor.prototype.day = function(node) {
	return node.day;
}

TreeNodeAdaptor.prototype.month = function(node) {
	return node.month;
}

TreeNodeAdaptor.prototype.year = function(node) {
	return node.year;
}

/**
 * Predicate: is the given node a leaf node?
 * @return {boolean} 
 */
TreeNodeAdaptor.prototype.isLeaf = function( node )
{
	return !( node instanceof TreeParentNode );
};

/**
 * Fetch the level of the given node in the overall model
 * @return {number} the depth of the given node the model
 */
TreeNodeAdaptor.prototype.getLevel = function( node )
{
	if(node.parent === null ) return 0;
	return 1 + this.getLevel( node.parent );
};

