
/**
 * @version		1.0.12 - 23 oktober 2011
 * 
 * @copyright	1.0.12,	23 oktober 2011,	Rob Ruigrok,			JSLint compatible
 * @copyright	1.0.11,	2 februari 2010,	Jan Niemantsverdriet,	vSetFormFieldFocus toegevoegd
 * @copyright	1.0.10,	15 oktober 2008,	Jan Niemantsverdriet,	aFindScreenPos werkt nu ook in IE6 als de pagina gescrolled is
 * @copyright	1.0.9,	6 oktober 2008,		Jan Niemantsverdriet,	Code voor aFindPos netter gemaakt
 * @copyright	1.0.8,	25 september 2008,	Jan Niemantsverdriet,	Linker marge is nu ook opvraagbaar
 * @copyright	1.0.7,	22 september 2008,	Jan Niemantsverdriet,	aGetViewPortDimensions is nu ook IE6 compatible
 * @copyright	1.0.6,	17 juli 2008,		Rob Ruigrok,			Functie om opacity op te vragen van een specifiek id, en opacity aan te passen
 * @copyright	1.0.5,	14 juli 2008,		Jan Niemantsverdriet,	oGetParentByTagName toegevoegd
 * @copyright	1.0.4,	7 juli 2008,		Jan Niemantsverdriet,	aFindScreenPos houdt nu ook rekening met scrolling
 * @copyright	1.0.3,	4 juli 2008,		Jan Niemantsverdriet,	Functies voor het bepalen van de browser en maten en posities toegevoegd
 * @copyright	1.0.2,	3 juli 2008,		Jan Niemantsverdriet,	iFindScreenPos toegevoegd
 * @copyright	1.0.1,	5 februari 2008,	Jan Niemantsverdriet,	Mogelijkheid om de source van een event op te vragen
 * @copyright	1.0.1,	5 februari 2008,	Jan Niemantsverdriet,	Mogelijkheid om de positie van een element op te vragen
 * @copyright	1.0.0,	?,					Jan Niemantsverdriet,	Gemaakt
 * 
 * @copyright	afhankelijkheid:	BB/JSDivers/check.js
 */

/**
 * Verwijderd een css klasse bij een object
 * 
 * @param string|DOM a_sObjectId			het id van het object, of het object zelf
 * @param string a_sClassName				de naam van de klasse die verwijderd moet worden
 * @return boolean							true als er daadwerkelijk iets verwijderd is
 */
function bRemoveCssClass(a_sObjectId, a_sClassName) {
	"use strict";
	var oObject, sClassName, sNewClassName;
	if (typeof (a_sObjectId) === "string") {
		oObject = document.getElementById(a_sObjectId);
	} else {
		oObject = a_sObjectId;
	}
	if (!bIsDefined(oObject)) {
		hErrorFunction(2, 2, "bRemoveClass kan object niet vinden", "object id: " + a_sObjectId);
		return false;
	}
	sClassName = oObject.className;
	sNewClassName = sClassName.replace(a_sClassName, '');
	oObject.className = sNewClassName;
	return (sClassName !== sNewClassName);
}

/**
 * Voegt een css klasse toe aan een object
 * 
 * @param string a_sObjectId			de id van het object
 * @param string a_sClassName			de klasse die moet worden toegevoegd
 * @return boolean						true als de css klasse is toegevoegd
 */
function bAddCssClass(a_sObjectId, a_sClassName) {
	if (typeof(a_sObjectId) == "string") var oObject = document.getElementById(a_sObjectId);
	else var oObject = a_sObjectId;
	if (!bIsDefined(oObject)) {
		hErrorFunction(2, 2, "bAddClass kan object niet vinden", "object id: " + a_sObjectId);
		return false;
	}
	bRemoveCssClass(a_sObjectId, a_sClassName);
	var sClassName = oObject.className;
	var sNewClassName = sClassName + " " + a_sClassName;
	oObject.className = sNewClassName;
	return true;
}

/**
 * Geeft de positie van het element
 * 
 * @param DOM a_oElement			het element
 * @return Array					de positie van het element in pixels (links, boven)
 * @since 1.0.1 - 5 februari 2008
 */
function aFindPos(a_oElement) {
	var iCurleft = 0;
	var iCurtop = 0;
	if (a_oElement.offsetParent) {
		do {
			iCurleft += a_oElement.offsetLeft;
			iCurtop += a_oElement.offsetTop;
			a_oElement = a_oElement.offsetParent;
		} while (!bIsNull(a_oElement));
	}
	return [iCurleft,iCurtop];
}

/**
 * Geeft de positie van het element op het scherm
 * 
 * @param DOM a_oElement			het element
 * @return Array					de positie van het element in pixels (links, boven)
 * @since 1.0.2 - 3 juli 2008
 */
function aFindScreenPos(a_oElement) {
	var aPos = aFindPos(a_oElement);
	var iCurleft = aPos[0];
	var iCurtop = aPos[1];
	if (a_oElement.offsetParent) {
		do {
			iCurleft -= a_oElement.scrollLeft;
			iCurtop -= a_oElement.scrollTop;
			a_oElement = a_oElement.parentNode;
		} while(a_oElement.tagName != 'BODY');
	}
	return [iCurleft,iCurtop];
}

/**
 * Geeft de dimensies van de viewport
 *
 * @return Array			de dimensies (breedte, hoogte)
 * @since 1.0.3 - 4 juli 2008
 */
function aGetViewPortDimensions() {
	if (bIsDefined(window.innerWidth)) return [window.innerWidth, window.innerHeight];
	return [document.body.clientWidth, document.body.clientHeight];
}

/**
 * Geeft de pagina offset
 *
 * @return integer				de horizontale scroll van de pagina
 * @since 1.0.3 - 4 juli
 */
function iGetBodyScrollPosition() {
	if( typeof( window.pageYOffset ) == 'number' ) return window.pageYOffset;
	else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) return document.body.scrollTop;
	else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) return document.documentElement.scrollTop;
	return 0;
}

/**
 * Geeft de eerste parent die gevonden wordt met de opgegeven tagname
 *
 * @param DOM a_oElement			het element waarvan de ouder wordt gezocht
 * @param string a_sTagName			de tagnaam die gezocht wordt
 * @return DOM						de ouder (of NULL als deze niet wordt gevonden)
 * @since 1.0.5 - 14 juli 2008
 */
function oGetParentByTagName(a_oElement, a_sTagName) {
	if (a_oElement.tagName == a_sTagName) return a_oElement;
	if (a_oElement.parentNode) return oGetParentByTagName(a_oElement.parentNode, a_sTagName);
	return null;
}



/**
 * Functie om opacity voor een specifiek id voor alle browsers aan te passen.
 * 
 * @param a_iOpacity 	int			de nieuwe opacitywaarde 
 * @param a_sId			string		id van object waar nieuwe opacity toegepast moet worden
 * @return				void
 * @author - Rob
 * @since 1.0.6 - 16 juli 2008
 */
function vChangeOpac(a_iOpacity, a_sId) {
	if (bIsNull(document.getElementById(a_sId))) return;
	var object = document.getElementById(a_sId).style;
	object.opacity = (a_iOpacity / 100);
	object.MozOpacity = (a_iOpacity / 100);
	object.KhtmlOpacity = (a_iOpacity / 100);
	object.filter = "alpha(opacity=" + a_iOpacity + ")";
} 

/**
 * Retourneert de huidige opacity. Als deze niet is geset, is opacity 100. 
 * @param a_sId			string		Id van object waarvan opacity opgevraagd wordt
 * @return				int			opacity
 * @author - Rob
 * @since 1.0.6 - 17 juli 2008
 */
function iGetOpacity(a_sId) {
	if (bIsNull(document.getElementById(a_sId))) return 0;
	if (!bIsDefined(document.getElementById(a_sId).style.opacity)) return 100;
	return document.getElementById(a_sId).style.opacity;
}

/**
 * Geeft de marge aan de linkerkant van een element
 * 
 * @param string a_sId			het id van het element
 * @since 1.0.8 - 25 september 2008
 */
function iGetLeftMargin(a_sId) {
	var oElement = document.getElementById(a_sId);
	return (oElement.style.marginLeft == '') ? 0 : parseInt(oElement.style.marginLeft,10);
}

/**
 * Zet de focus op een bepaald formulier veld
 *
 * @param Object|string a_mField		het veld of het id van het veld
 * @since 1.0.11 - 2 februeri 2010
 * @author Jan Niemantsverdriet
 */
function vSetFormFieldFocus(a_mField) {
	var oField = (bIsString(a_mField) ? document.getElementById(a_mField) : a_mField);
	oField.focus();
}
/**
 * Toont de opgegeven select (reageerd alleen in IE 6)
 * 
 * @param string a_sSelectId		het id van de select
 * @since 1.0.6 - 8 april 2010
 * @author Jan Niemantsverdriet
 */
function vLayersShowSingleSelect(a_sSelectId) {
	if (bCheckBrowser("Microsoft Internet Explorer", null, "6.0")) {
		var oSelect = document.getElementById(a_sSelectId);
		if (oSelect) oSelect.style.display = "inline";
	}
}

