/**
 * @author Arian Stolwijk <http://www.aryweb.nl>
 */

(function(){

var addListener = window.addEventListener ? function(el, type, fn){
	el.addEventListener(type, fn, false);
} : (window.attachEvent) ? function(el, type, fn){
	el.attachEvent('on' + type, fn);
} : function(){};

var addListeners = function(el, listeners){
	for (var type in listeners) addListener(el, type, listeners[type]);
};

var each = function(object, fn){
	if (object.forEach){ object.forEach(fn); return; }
	var i = 0, l = object.length;
	if (l) while (i < l) fn(object[i], i++);
	else for (i in object) fn(object[i], i);
};

var trim = String.prototype.trim ? function(str){
	return String.prototype.trim.call(str);
} : function(str){
	return str.replace(/^\s+|\s+$/g, '');
};

var swappClass = function(el, add, remove){
	el.className = trim((el.className.replace(remove, '') + ' ' + add).replace(/(\s{2,})/g, ' '));
};

var pass = function(fn, args, bind){
	return function (){
		return fn.apply(bind, args);
	};
};

var loaded = false;

var makeMenu = pass(function(wrapper, openClass, closeClass){
	if (loaded) return;
	loaded = true;

	var menu = document.getElementById(wrapper).getElementsByTagName('ul')[0];

	each(menu.getElementsByTagName('li'), function(li, i){
		var sub = li.getElementsByTagName('ul')[0];
		if (!sub) return;

		var close = pass(swappClass, [sub, closeClass, openClass]);
		close();

		addListeners(li, {
			mouseover: pass(swappClass, [sub, openClass, closeClass]),
			mouseout: close
		});

	});

}, ['navigation', 'open', 'close']);

// let's see which event is first
addListeners(window, {
	load: makeMenu,
	DOMContentLoaded: makeMenu
});

})();

