/**
 * Cross browser functions
 *
 * @author OMax
 */

/**
 * Returns element by ID. If multiple arguments is specified, returns array of elements.
 * 
 * @todo Use prototype library or any other standard.
 */
function $() {
	var elements = new Array();
		for (var i = 0; i < arguments.length; i++) {
			var id = arguments[i];

			if (typeof id == 'string') {
				// document.layers ? document.layers[id] : document.all[id];
				var element = document.getElementById(id);
			}

			if (arguments.length == 1) {
				return element;
			}

			elements.push(element);
		}

	return elements;
}

/**
 * Returns an object by it's id
 */
function getElementById(id) {
	var result = null;
	
	if (document.all != null) {
		result = document.all[id];
	} else if (document.getElementById != null) {
		result = document.getElementById(id);
	} else if (document.layers) {
		result = document.layers[id];
	}
	
	if (result != null && result.length != null) {
		result = result[0];
	}
	
	return result;
}

/**
 * Returns an array of objects by theirs id
 */
function getElementsById(id) {
	var tagName = null;
	var result = getElementById(id);
	
	if (result == null) {
		return result;
	} else if (document.all != null) {
		result = document.all[id];
		
		if (result.length == null) {
			result = new Array(result);
		}
	} else {
		if (tagName == null) {
			tagName = result.tagName;
		}
		
		result = null;
		
		if (tagName != null && document.getElementsByTagName != null) {
			var elems = document.getElementsByTagName(tagName);
	
			for (var i = 0; elems != null && i < elems.length; i++) {
				var elem = elems[i];
				
			    if (elem.id == id) {
			    	if (result == null) {
						result = new Array();
					}
					
					result[result.length] = elem;
			    }
			}
		}
	}
	
	return result;
}

/**
 * Attaches an event to an existing event
 * attachToEvent(window, "onload", _init);
 */
function attachToEvent(obj, name, func) {
	name = name.toLowerCase();
	
	// Add the hookup for the event.
	if (typeof(obj.addEventListener) != "undefined") {
		if (name.length > 2 && name.indexOf("on") == 0) {
			name = name.substring(2, name.length);
		}
		
		obj.addEventListener(name, func, false);
	} else if (typeof(obj.attachEvent) != "undefined") {
		obj.attachEvent(name, func);
	} else {
		if (eval("obj." + name) != null) {
			// Save whatever defined in the event
			var oldOnEvents = eval("obj." + name);
			
			eval("obj." + name) = function(e) {
				try {
					func(e);
					eval(oldOnEvents);
				} catch (e) {
				}
			};
		} else {
			eval("obj." + name) = func;
		}
	}
}