// IE6 and lower don't define Node constants
var Node = Node || {
	ELEMENT_NODE: 1,
	ATTRIBUTE_NODE: 2,
	TEXT_NODE: 3,
	CDATA_SECTION_NODE: 4,
	ENTITY_REFERENCE_NODE: 5,
	ENTITY_NODE: 6,
	PROCESSING_INSTRUCTION_NODE: 7,
	COMMENT_NODE: 8,
	DOCUMENT_NODE: 9,
	DOCUMENT_TYPE_NODE: 10,
	DOCUMENT_FRAGMENT_NODE: 11,
	NOTATION_NODE: 12
};


// EXT shortcuts
if (window.Ext) {
//	var YUE = YAHOO.util.Event;
	var $ = Ext.get;
}


var ONEHAT = {
	browser: {
		isIE: false, 
		version: false,
		debug: false
	},
	util: {},
	widget: {}
};

/**
 * Clones an object
 */
ONEHAT.util.cloneObject = function(A) {
	// if it's a primitive, return it
	if (typeof(A) != 'object') { return A; }
	if (A === null) { return A; }
	
	// otherwise loop through properties
	var B = {};
	for (var i in A) {
	    if (A.hasOwnProperty(i)) { // don't grab everything from inheritance chain
		    B[i] = ONEHAT.util.cloneObject(A[i]);
	    }
	}
	
	// restore inheritance chain
	B.prototype = A.prototype;
	return B;
};




/**
 * getURLdata
 * Enables JS to work with short URLs relative to some baseURL.
 */
ONEHAT.util.getURLdata = ONEHAT.util.getURLdata || function() {
	if (!ONEHAT.util.getURLdata.URLdata) {
		ONEHAT.util.getURLdata.URLdata = {
			section: null,
			page: null,
			action: null,
			extra: null
		};

		var URLdata = ONEHAT.util.getURLdata.URLdata; // alias
		if (!document.baseURI) { document.baseURI = document.getElementsByTagName('base')[0].href; }

		var pathParts = (location.protocol + '//' + location.hostname + location.pathname).split(document.baseURI)[1].split('/').reverse(); // doesn't take port into account
		
		// pull out the 3 main parts (section, page, action)
		if (!!pathParts[pathParts.length -1]) {
			URLdata.section = pathParts.pop();
		}
		if (!!pathParts[pathParts.length -1]) {
			URLdata.page = pathParts.pop();
		}
		if (!!pathParts[pathParts.length -1]) {
			URLdata.action = pathParts.pop();
		}
		
		// Tack everything else onto extra
		if (!!pathParts[pathParts.length -1]) {
			URLdata.extra = pathParts.join('/');
		}
	
		// Build the query string pairs
		var query = location.search.substring(1);
		var pairs = query.split("&");
		for(var i = 0; i < pairs.length; i++) {
			var pos = pairs[i].indexOf('=');          // Look for "name=value".
			if (pos == -1) { continue; }                  // If not found, skip.
			var argname = pairs[i].substring(0,pos);  // Extract the name.
			var value = pairs[i].substring(pos+1);    // Extract the value.
			URLdata[argname] = decodeURIComponent(value);          // Store as a property.
			// In < JavaScript 1.5, use unescape() instead of decodeURIComponent()
		}
	}
	return ONEHAT.util.getURLdata.URLdata;
};
