// VC-DOM
/*

PROJECT:	JDM (Java Dynamic Machine)
PROGRAMMER:	G. Patnude
FILE:		vc-dom/vc-dom.js
PURPOSE:	Document Object Model (DOM) MANIPULATION ROUTINES...

Includes functions for:

	--  CREATING A NODE / ELEMENT IN THE DOM...
	--  APPENDING A NODE / ELEMENT TO A PARENT ELEMENT VIA THE DOM...
	--  DELECTION OF A NODE / ELEMENT VIA THE DOM...

*/

var DOM = {

	// CLASS VARIABLES...
	version : "0.000a",
	name: "DOM::",
	id: "DOM",
	owner: "G. Patnude",
	data: new Object(),
	control: new Object(),
	
// CLASS FUNCTIONS * CLASS FUNCTIONS * CLASS FUNCTIONS * CLASS FUNCTIONS * CLASS FUNCTIONS * CLASS FUNCTIONS * CLASS FUNCTIONS *
// CLASS FUNCTIONS * CLASS FUNCTIONS * CLASS FUNCTIONS * CLASS FUNCTIONS * CLASS FUNCTIONS * CLASS FUNCTIONS * CLASS FUNCTIONS *

	// CONSTRUCTOR...
	init:function init(data) {

		this.data = data;
		return;
		
	},
	
	// REMOVES A NODE FROM THE DOM...
	deletenode: function deletenode(node) {
		
		// CAN WE GET A HANDLE ON THE REFERENCED NODE ???
		try {
		
			// if ((n = UTIL.getObject(node)) != null) {
			if ((n = DOM.getnode(node)) != null) {
			
				// REMOVE THIS NODE...
				UTIL.trace("REMOVING NODE:" + node);
				return n.removeNode(true);
			
			}
			
		} catch (e) {
		
		}
		
		return null;
		
	},
	
	// CREATES A NODE ELEMENT IN THE DOM...
	createnode: function createnode(element, id) {
	
		// CREATE THIS ELEMENT USING THE DOM...	
		UTIL.trace(this.name + "CREATING ELEMENT:" + element + " WITH ID:" + id);
		
		var obj = document.createElement(element);
		obj.id = id;
		obj.draggable = false;
		// obj.className = (element.toUpperCase() == "DIV") ? "DRAGGABLE" : "CONTENT";
		return obj;
	
	},
	
	// CREATES A NODE AS A CHILD OF PARENT...
	addnode: function addnode(parent, child) {
	
		// GET A HANDLE...
		// if ((p = UTIL.getObject(parent)) != null) {
		if ((p = DOM.getnode(parent)) != null) {
						
			// APPEND THIS CHILD...
			UTIL.trace(this.name + "APPENDING CHILD:" + child + " TO:" + parent);
			return p.appendChild(child);
							
		} else {
		
			return document.appendChild(child);
		
		}	
	
	},
	
	// RETURNS DRAGGABILITY STATE OF THE NODE...
	isdraggable: function isdraggable(node) {
	
		return this.getnode(node).draggable;
	
	},
	
	// CREATES A NODE AS A CHILD OF PARENT...
	getnode: function getnode(node) {
	

		// RETURNS A REFERENCE TO THE REQUESTED OBJECT...		
		try {
			
			// var o = document.getElementById(str);
			if (document.getElementById) {
			
				var obj = document.getElementById(node);
				// this.style = document.getElementById(str).style;
				
			} else if (document.all) {
			
				var obj = document.all[node];			
				// this.style = document.all[str].style;
			
			} else if (document.layers) {
			
				var obj = document.layers[node];
				// this.style = document.layers[str];
				
			}		
			
		} catch (e) {
			
		}
		
		return (obj == null) ? null : obj;
	
	},	

	setnode: function setnode(obj, content) {
	
		// GET A HANDLE TO THE SPECIFIED DOM OBJECT...
		// if ((o = UTIL.getObject(obj)) != null) {
		if ((o = DOM.getnode(obj)) != null) {
						
			// SET THE OBJECTS INNERHTML AS STATED...
			o.innerHTML = content;
			return;
							
		}
	
	},
	
	// CLEARS (SETS THE NODE'S CONTENT TO NULL) A SPECIFIED NODE
	clear: function clear(obj) {
	
		// GET AND SET THE REQUESTED NODE TO NOTHING...
		return this.setnode(obj, "");
	
	},
	
	set: function set(obj, content) {
	
		UTIL.warn("THIS CALL HAS BEEN REFACTORED INTO {DOM.setnode()} --> PLEASE CORRECT YOUR CODEBASE !");
		return this.setnode(obj, content);
	
	},
	
	// TOGGLES ANY GIVEN NODE's DISPLAY BETWEEN 'block' AND 'none'...
	hidenode: function hidenode(node) {
	
		var n = this.getnode(node);
		n.style.display = (n.style.display != 'none') ? 'none' : 'block';
		return (n.style.display == 'block') ? true : false;
	
	},
	
	//
	isvisible: function isvisible(obj) {
	
		if ((o = this.getnode(obj)) != null) {
		
			return ((o.style.display == 'block') || (o.style.visibility == 'visible')) ? true : false;
		
		}
		
		return false;
	
	}
	
	
// EOF...

};
