/*===========================================================================
	Library (Global)
	
	This JavaScript executes dynamic behaviors such as:
	* Patching missing JavaScript features for certain browser versions.
	* Defines commonly used functions and variables.
===========================================================================*/

/* Namespacing
===========================================================================*/

if (YAHOO.lang.isUndefined(DBeer)) {
	var DBeer = YAHOO.namespace("DBeer");
}

YAHOO.namespace("DBeer.presentational", "DBeer.actions", "DBeer.util", "DBeer.lang");

/* Fix Array Object for IE 5.0
===========================================================================*/

/*
	Based on code from sIFR
	http://www.mikeindustries.com/sifr/
*/

if (Array.prototype.push == null) {
	Array.prototype.push = function() {
		var i = 0, index = this.length, limit = arguments.length;
		
		while (i < limit) {
			this[index++] = arguments[i++];
		};
		
		return this.length;
	};
};

/* Preload Images method
===========================================================================*/

DBeer.util.preloadImages = function(urls) {
	if (document.images) {
		if (DBeer.lang.respondsAsArray(urls)) {
			var preloads = [];
			
			for (var i = urls.length - 1; i >= 0; i--) {
				preloads.push(DBeer.util.preloadImages(urls[i])); // recursive, allows arrays of arrays
			}
			
			return preloads;
		} else {
			var preload = new Image();
			preload.onload = function() { YAHOO.log("Loaded " + urls, "info", "DBeer::util::preloadImages"); };
			preload.src = urls;
			return preload;
		}
	} else {
		YAHOO.log("Images are disabled.", "warn", "DBeer::util::preloadImages");
		return false;
	}
};


/* Duck Typing
===========================================================================*/

// Returns true for iterable objects
DBeer.lang.respondsAsArray = function(obj) {
	return (YAHOO.lang.isNumber(obj.length) && !YAHOO.lang.isString(obj));
};

/* Textarea Insertion, borrowed from WordPress
===========================================================================*/

function edInsertContent(myField, myValue) {
	//IE support
	if (document.selection) {
		myField.focus();
		sel = document.selection.createRange();
		sel.text = myValue;
		myField.focus();
	}
	//MOZILLA/NETSCAPE support
	else if (myField.selectionStart || myField.selectionStart == '0') {
		var startPos = myField.selectionStart;
		var endPos = myField.selectionEnd;
		myField.value = myField.value.substring(0, startPos)
		              + myValue 
                      + myField.value.substring(endPos, myField.value.length);
		myField.focus();
		myField.selectionStart = startPos + myValue.length;
		myField.selectionEnd = startPos + myValue.length;
	} else {
		myField.value += myValue;
		myField.focus();
	}
}