var events = [ ];

if(showing_mini_calendar)
{
	events.push(
			minicalendarSetup
		);
}
else
{
	events.push(
		attachRMLToolbar,
		fixBrowserIssues,
		createFooter,
		pulldownAutoSubmits,
		toggleAuthorLinks,
		focusFirstFormField,
		validateForms,
		topicNavigationPulldown,
		attachCalendarSelector,
		rewriteQuoteLinks,
		privateMessagingCopyContact,
		loginForm,
		hideAdvancedOptions,
		doclibInteraction,
		toggleChangeCheckboxTopicAdmin,
		easyTimeInputConverter,
		toggleRepeatDetails,
		scaleImages,
		toggleVisibility,
		makeSmileysClickable,
		enablePreferenceCSS,
		selectAllRows,
		logoutSessions,
		toggleTagcloudOverflow,
		scrollToAnchor,
		closeAndSubmit,
		allPagesNavigation,
		externalLinksInPopup,
		[transparantPNG, ['img.smiley']]
	);

	/* extra extra... read all about it */

	/*
		updateMessagesThruXmlHttp,
		indicateAccesskey,
		searchPopup,
		localAnchors,
		slashdotLinks,
		selectAllRows,
		localAnchors,
		closeAndSubmit,
		logoutSessions,
		allPagesNavigation,
		highlightReferrerQuery,
		externalLinksInPopup,
		indicateSecureLink,
		web20_usericons,
		resolveIP2Hostname,
		stretchTextareas
	*/
}


function ShowHideContent(d,c,o) {
	if(d.length < 1) { return; }
	if(document.getElementById("admindingen_" + d).style.display == 'none') {
		document.getElementById("admindingen_" + d).style.display = "block";
		document.getElementById("adminimg_" + d).src = o;
	} else {
		document.getElementById("admindingen_" + d).style.display = "none";
		document.getElementById("adminimg_" + d).src = c;
	}
}
function user_images(warning)
{
	if (warning) showwarning = true;
	var im = getElementsByClassName('rml', 'img'), i = im.length;
	while (i--)
	{
		if (im[i].naturalWidth || im[i].complete)
			scaleImage(0,im[i]);
		else if (im[i].readyState)
			im[i].onreadystatechange = scaleImage;
		else
			im[i].onload = scaleImage;

		im[i].onerror = scaleImage;
		im[i].onabort = scaleImage;
	}

	if (is.ie && window.attachEvent) window.attachEvent('onload', user_images_ie); 
}

function user_images_ie()
{
	var im = document.images, i = im.length;
	while (i--)
	{
		if (hasClass(im[i], 'rml'))
			scaleImage(0,im[i]);
	}
}

var showwarning = false;
function scaleImage(e, img)
{
	if (!img) img = this;
	var imgwidth = 0, imgheight = 0, el;

	if (img.width || img.complete)
	{
		if (img.naturalWidth)
		{
			imgwidth = img.naturalWidth;
			imgheight = img.naturalHeight;
		}
		else if (img.complete)
		{
			var dum = new Image(); dum.src = img.src;
			imgwidth = dum.width;
			imgheight = dum.height;
		}

		if (imgwidth)
		{
			if (img.onreadystatechange) img.onreadystatechange = null;
			if (img.onload) img.onload = null;
		}

		var contentDiv = img.parentNode, inQuote = false;

		while (contentDiv)
		{
			if (hasClass(contentDiv, 'messagecontent') || (inQuote = hasClass(contentDiv, 'message-quote-div')))
				break;

			contentDiv = contentDiv.parentNode;
		}

		if (contentDiv)
		{
			var maxWidth = contentDiv.offsetWidth - (inQuote ? 4 : 10);

			if (imgwidth > maxWidth)
			{
				maxWidth -= 2;
				if (img.parentNode.nodeName != 'A')
				{
					if (!img.naturalWidth) img.naturalWidth = imgwidth;
					if (!img.naturalHeight) img.naturalHeight = imgheight;
					img.className += ' resized pointer';
					img.onclick = openImage;
					el = img;
				}
				else
				{
					img.className += ' resized2';
					el = img.parentNode;
				}
	
				// create a nice warning when image is in normal post
				if (showwarning && imgwidth > 600 && !inQuote)
				{
					var warning = document.createElement('div');
					warning.className = 'resizewarning';
					warning.style.width = ((img.width < maxWidth ? img.width : maxWidth) + 2) + 'px';
					warning.innerHTML = '<div><small>Deze afbeelding is ' + imgwidth + ' * ' + imgheight + ' pixels' + (img.fileSize && img.fileSize > 0 ? ' en ' + Math.floor(img.fileSize/1024) + 'KB' : '') + ' groot. Hier op Nuttelozetroep.nl verwachten we dat je <em>echte</em> thumbnails maakt.<br>Kijk in de <a href="'+board_script_url+'/faq/" onclick="window.open(this.href);return false">faq</a> als je niet weet hoe dit moet.</small></div>';
					el.parentNode.insertBefore(warning, el.nextSibling);
				}
			}
	
			if (img.width > 400)
			{
				if (img.height) img.height = Math.round(maxWidth / img.width * img.height);
				img.width = maxWidth;
			}
		}
	}
}

function openImage()
{
	var winwidth = (this.naturalWidth < screen.availWidth ? this.naturalWidth : screen.availWidth);
	var winheight = (this.naturalHeight < screen.availHeight ? this.naturalHeight : screen.availHeight);
	winopen(board_default_template_url+'html/showimage.html?'+escape(this.src),'',winwidth,winheight,'scrollbars=no,left=0,top=0');
}

function computedStyle(el, property)
{
	var style = false;
	if (el)
	{
		if (el.currentStyle)
		style = el.currentStyle[property.replace(/-([a-z])/, function($0,$1){ return $1.toUpperCase(); })];
		else if (window.getComputedStyle)
			style = document.defaultView.getComputedStyle(el, '').getPropertyValue(property);
	}	
	return style;
}

// browser detect object
var is = {
	opera: !!window.opera,
	ie: /*@cc_on!@*/false,
	khtml: navigator.userAgent.indexOf('KHTML') > -1,
	gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1,
	webkit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
	mac: navigator.userAgent.indexOf('Macintosh') > -1,
	handheld: computedStyle(document.documentElement, 'z-index') == 1
}

function ieVersion()
{
	var v = navigator.userAgent.indexOf('MSIE');
	return v > -1 ? parseFloat(navigator.userAgent.substr(v+5)) : 0;
}

/**
 * Haalt elements op met dezelfde classname
 * 
 * @param string className
 * @param string nodeName
 * @param string parentElement
 * @param string callback
 * 
 * @return array results
 */
function getElementsByClassName(className, nodeName, parentElement, callback)
{
	if (!nodeName)
		nodeName = '*';

	if (!parentElement)
		parentElement = document;

	var results = [], regexp = /[.|+?()[\]]/.test(className), s, i = 0, element;

	if (parentElement.getElementsByClassName && nodeName == '*' && !regexp)
	{
		// convert to static array
		results = Array.slice(parentElement.getElementsByClassName(className), 0);

		if (callback)
			results.forEach(callback);
	}
	else if (document.evaluate && !regexp)
	{
		s = document.evaluate(
			".//" + nodeName + "[contains(concat(' ', @class, ' '), ' " + className + " ')]",
			parentElement,
			null,
			XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
			null
		);

		while ((element = s.snapshotItem(i++)))
		{
			results.push(element);
			if (callback)
				callback(element);
		}
	}
	else
	{	
		var elementClassName;
		s = parentElement.getElementsByTagName(nodeName);
		var re = getClassRegExp(className), elementClassName;

		while ((element = s[i++]))
		{
			elementClassName = element.className;
			if (	elementClassName.length &&
				(	elementClassName == className ||
					re.test(elementClassName)
				)
			)
			{
				results.push(element);
				if (callback)
					callback(element);
			}
		}
	}

	return results;
}
function addClass(element, className)
{
	if (element.className.length)
	{
		var classes = getClassList(element);
		if (classes.indexOf(className) == -1)
		{
			classes.push(className);
			setClassList(element, classes);
		}
	}
	else
		element.className = className;
}

function removeClass(element, className)
{
	var classes = getClassList(element), index;
	if ((index = classes.indexOf(className)) > -1)
	{
		delete classes[index];
		setClassList(element, classes);
	}
}

function replaceClass(element, oldclass, newclass)
{
	var classes = getClassList(element), index;
	if ((index = classes.indexOf(oldclass)) > -1 && classes.indexOf(newclass) == -1)
	{
		classes[index] = newclass;
		setClassList(element, classes);
	}
}

/*	
 ** Matt Kruse's hasClass, with slight modification	
 ** Determine if an object or class string contains a given class.
  */
function hasClass (obj, className) {
    if (typeof obj == 'undefined' || obj==null || !RegExp) { return false; }
    var re = new RegExp("(^|\\s)" + className + "(\\s|$)");
    if (typeof(obj)=="string") {
      return re.test(obj);
    }
    else if (typeof(obj)=="object" && obj.className) {
      return re.test(obj.className);
    }
    return false;
  }
  
function getClassList(element)
{
	return element.className.length ? element.className.split(/\s+/) : [];
}

function setClassList(element, classes)
{
	element.className = classes.join(' ');
}

var regExpCache = {};
function getClassRegExp(className)
{
	if (!(className in regExpCache))
		regExpCache[className] = new RegExp('(^|\\s)' + className + '(\\s|$)');

	return regExpCache[className];
}


