var addEvent = function(){
	if (window.addEventListener){
		return function(el, type, fn){
			el.addEventListener(type, fn, false)
		}
	}
	else if (window.attachEvent){
		return function(el, type, fn){
			var f = function() {
				fn.call(el, window.event)
			};
			el.attachEvent('on' + type, f)
		}
	}
	else{
		return function(el, type, fn){
			var of = el['on' + type];
			if (typeof of != 'function') el['on' + type] = fn.apply(this, arguments);
			else el['on' + type] = function(){
				of.apply(this, arguments);
				fn.apply(this, arguments)
			}
		}
	}
}();

var forEach = function(arr, func){
	if(typeof(arr) == 'Array')
		for(var i=0; i<arr.length; i++)
			func.call(this, arr[i], i);
	else if(typeof(arr) == 'object')
		for(var i in arr)	// pourrait etre là tout seul ?
			func.call(this, arr[i], i);
}
var setStyles = function(el, oCss){
	for(var i in oCss)
		el.style[i] = oCss[i];
}
var addClass = function(el, classes){
	classes = classes.split(/\s*,\s*/);
	for(var i in classes)
		if(el.className != undefined && el.className.search(new RegExp('(^|\s)' + classes[i] + '(\s|$)', 'ig')) == -1)
			el.className += (el.className != "" ? " " : "") + classes[i];
}
var removeClass = function(el, classes){
	classes = classes.split(/\s*,\s*/);
	for(var i in classes)
		if(el.className != undefined && el.className.search(new RegExp('(^|\s)' + classes[i] + '(\s|$)', 'ig')) != -1)
			el.className = el.className.replace(new RegExp('(^|\s)' + classes[i] + '(\s|$)', 'ig'),'');
}

var $$ = function(selector, parent) {
	if(!selector) return;
	if(!parent) var parent = document;
	var selectors = selector.split(/\s*,\s*/);
	var elements = [];
	for(var i = 0; i < selectors.length; i++)
	{
		var mask = selectors[i].match(/^([^\.#]*)(\.|#)*(.*)$/); //string: [tag][.|#][nom classe|id]
		if((mask[2] == "#") && (matched = parent.getElementById(mask[3]))) // ? id
			addEl(matched);
		else if(mask[1] || mask[2]) // ? tag ou class
		{
			var body = parent.getElementsByTagName(mask[1] ? mask[1] : "*");
			for(var j = 0; j < body.length; j++)
			{
				if(mask[2] == ".") // tag avec une classe
				{
					if(body[j].className && body[j].className.search(new RegExp('(^|\\s)' + mask[3] + '($|\\s)', 'ig')) != -1)
						addEl(body[j]);
				}
				else // juste un tag
					addEl(body[j]);
			}
		}
	}
	return ((elements.length == 1) ? elements[0] : elements); //renvoi Array ou l'element unique
	function addEl(el){ // verifie avant d'ajouter
		for(var l=0;l<elements.length;l++) if(el == elements[l]) return;
		elements.push(el);
	}
}
