// VC-OBJECT
/*

PROJECT:	JDM (Java Dynamic Machine)
PROGRAMMER:	G. Patnude
FILE:		vc-common/vc-object.js
PURPOSE:	OBJECT METHODS & UTILITY FUNCTIONS...

Includes functions for:

	-- SETTING AN OBJECT PROPERTY
	-- RETRIEVING AN OBJECT PROPERTY

*/

function dejaobject(name) {

	this.name = name.toUpperCase();
	this.id = ++objid;
	this.uid = this.name + "_" + this.id;
	this.draggable = false;
	this.visible = false;
	this.x = 0;
	this.y = 99;
	this.className = "CONTENT";
	
	// OBJECT DESTRUCTOR METHOD...
	this.destroy = function () {
	
		this = null;
		return this;
		
	};
	
	this.getid  = function () { 
	
		return this.id; 
		
	};
	
	// AND RETURN THIS OBJECT...	
	return this;

}

// OBJECT PROPERTIES...
var OBJECT = {

	// CLASS VARIABLES...
	version : "0.01a",
	name: "OBJECT",
	data: {},
	uid : 0,
	

	// PUBLICLY - GLOBAL METHOD TO GET & SET A PROPERTY OF AN OBJECT...
	setobject: function setobject(obj, key, val, data) {

		// UTIL.trace("setmenu::get the menu for: " + val + " using key:" + key);
		for (var p in obj) {
	
			if (typeof(obj[p]) == 'object') { // IF THIS IS AN OBJECT...
			
				// UTIL.trace("OBJ[P] = " + p);
				if (p == val) { // IF THE OBJECT KEY [obj[p] == val
				
					// UTIL.trace("I located menuobject: " + p);
					// UTIL.oWatch(obj[p]);
					// UTIL.oWatch(rec.toString());
					obj[p][data.id] = data;
					return obj[p];
					
				}
			
				// RECURSION --> !!!
				var x = this.setobject(obj[p], key, val, data);
			
			} 
	
		}
	
		// RETURN SOMETHING...
		return x;	
	
	},

	getobject: function getobject(obj, key, val) {

		UTIL.trace(this.name + "::getobject():: looking for : " + val + " where the key:" + key);
		// UTIL.trace("OBJ: " + obj.toString());
		
		for (var p in obj) { // FOR EACH ITEM IN THE OBJECT...
		
			// UTIL.trace("P:" + p);		
			if (typeof(obj[p]) == 'object') {  // IF THIS ITEM IS AN OBJECT OR A NESTED OBJECT...
			
				UTIL.trace("CHECKING OBJECT:" + p);			
				if ((p == val) && (obj[p][key] == val)) { // IS THIS THE OBJECT WE SEEK ???
			
					// UTIL.trace(this.name + "::returning object with title:" + obj[p].menutitle);					
					return obj[p];
				
				} else {
					
					// RECURSION...		
					var x = this.getobject(obj[p], key, val);
				
				}
								
			}			
		
		}
		
		return x;
	
	},
	
	// UTILITY METHOD -- PASSED AN ASSOCIATIVE ARRAY OR OBJECT -- RETURNS AN ARRAY OF VALUES FOR THE SPECIFIED KEY...
	getvals: function getvals(obj, key) {
	
		UTIL.warn(this.name + "getvals(I) --> Called...");
		
		var vals = new Array();
		
		// FOR EVERY RECORD...
		for (o in obj) {
		
			vals.push(obj[o][key]);
		
		}
		
		// AND RETURN...
		return vals;
	
	}
	
// EOF...	

};

var OBJT = OBJECT;




