__listeners = [];
function addHandler(el, ev, h) {
	__listeners.push(h);
	if (el.addEventListener) el.addEventListener(ev, h, false);
	else {
		ev = 'on'+ev;
		if (el.attachEvent) el.attachEvent(ev, h);
		else if (el[ev]) {
			var old = el[ev];
			el[ev] = function() { old(); h(); };
		} else el[ev] = h;
	}
}

$find = function(id) { return document.getElementById(id); };
$first = function(el, tag) { var t = el.getElementsByTagName(tag); return t.length ? t[0] : null; };
$children = function(el, tag) {
	tag = tag.toUpperCase();
	var a = [];
	for (var i = 0; i < el.childNodes.length; i++)
		if (el.childNodes[i].nodeName.toUpperCase() == tag) a.push(el.childNodes[i]);
	return a;
};
$show = function(el) { if (el) el.style.display = 'block'; };
$hide = function(el) { if (el) el.style.display = 'none'; };
$toggle = function(el) { if (el) el.style.display = (el.style.display == 'block') ? 'none' : 'block'; };
$bind = function() { // usage: $bind(obj, function, param1, param2, ...)
  var args = [];
  for (var i = 0; i < arguments.length; i++) args.push(arguments[i]);
  var object = args.shift(), __method = args.shift();
  return function() {
    return __method.apply(object, args);
  }
};

function urlDecode(s) {
    var c, r = /(%[^%]{2})/;
    while ((match = r.exec(s)) != null && match.length > 1 && match[1] != '') {
        c = String.fromCharCode(parseInt(match[1].substr(1),16));
        s = s.replace(match[1], c);
    }
    return s;
};

function fixThumbnails() {
/*	var divs = document.getElementsByTagName('div');
	var regex = new RegExp("(^|\\s)thumbnail(\\s|$)");
	var k = 0;
	var maxLine = ((typeof __ICONS_PER_LINE != 'undefined') ? __ICONS_PER_LINE : 4)+1;
	for (var i = 0; i < divs.length; i++) {
		if (divs[i].className && divs[i].className == 'holder') k = 0;
		if (divs[i].className && (divs[i].className == 'thumbnail' || divs[i].className.match(regex))) {
			var img = divs[i].getElementsByTagName('img');
//			if (img.length) divs[i].style.width = (img[0].clientWidth - 10) + 'px';
			if (k % maxLine == 0) {
				//divs[i].style.clear = 'left';
				var d = document.createElement('div');
				d.className = 'clear';
				divs[i].parentNode.insertBefore(d, divs[i]);
			}
            k++;
		}
	}*/
}

function addLevel3Handlers(t) {
	if (!t) t = $find('l3menu');
	if (!t) return;
	var tags = $children(t, 'li');
	for (var i = 0; i < tags.length; i++) {
		var ul = $first(tags[i], 'ul');
		if (!ul) continue;
		//tags[i].insertBefore(document.createElement('br'), ul);
		addHandler(tags[i], 'mouseover', $bind(this, $show, ul));
		addHandler(tags[i], 'mouseout',  $bind(this, $hide, ul));
	}
}

function addBarHandlers() {
	addLevel3Handlers($find('barmenu'));
}

function expandoHandler(ev) {
	ev = ev || window.event;
	var target = ev.target || ev.srcElement;
	var div = $find(target.id.substr(5));
	$toggle(div);
	target.className = (target.className == 'expando') ? 'expanded' : 'expando';
}

function addExpandoHandlers() {
	addDOMLoadEvent(function() {
		var h4s = document.getElementsByTagName('h4');
		for (var i = 0; i < h4s.length; i++) {
			var e = h4s[i];
			if (e.className.indexOf('expando') >= 0) {
				addHandler(e, 'click', expandoHandler);
				$hide($find(e.id.substr(5)));
			}
		}
	});
}

function showCopyPopup(url) {
	new Ajax.Updater($('share_space'), url, {
		onComplete: function() {
			Effect.Appear($('copy-popup'), {
				afterFinish: function() {
					var a = $('copy_url');
					if (!a) return;
					a.focus();
					a.select();
				}
			})
		}
	});
}

function closeMessagePopup() {
	var target = $('message-popup');
	if (arguments.length) {
		target = $(arguments[0]);
		if (!target.hasClassName('message-popup')) target = target.up('.message-popup');
	}
	try {
		new Effect.DropOut(target);
	} catch (err) {
		target.hide();
	}
	return false;
};

function attachAgeFilter() {
	if (!$('agefilter')) return;
	var handler = function(evt) {
		var el = Event.element(evt);
		if (el.id == 'apply_agefilter') {
			$('set_agefilter_form').submit();
			return;
		}

		var allFilters = $$('#agefilter .filter');
		var count = 0;
		allFilters.each(function(e) { if (e.hasClassName('selected')) count++; });

		if (count == allFilters.length) allFilters.invoke('removeClassName', 'selected');
		if (count == 1) {
			if (el.hasClassName('selected')) {
				allFilters.invoke('addClassName', 'selected');
			} else {
				el.toggleClassName('selected');
			}
		} else {
			el.toggleClassName('selected');
		}

		var ids = '';
		allFilters.each(function(e) { if (e.hasClassName('selected')) ids += ' ' + e.id.replace('age_', ''); });
		$('age_selection').value = ids;
        $('set_agefilter_form').submit();
	};
	$$('#agefilter .filter').each(function(e) { Event.observe(e, 'click', handler); });
}

addHandler(window, 'load', fixThumbnails);
addDOMLoadEvent(addLevel3Handlers);
addDOMLoadEvent(addBarHandlers);
addDOMLoadEvent(attachAgeFilter);
