/**
 * @version		1.0.11 - 2 februari 2010
 * 
 * @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) {
	if (typeof(a_sObjectId) == "string") var 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;
	}
	var sClassName = oObject.className;
	var 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 het source object van een event
 * 
 * @param Event	a_oEvent		het event
 * @return DOM					het source object
 * @since 1.0.1 - 5 februari 2008
 */
function oGetEventSrc(a_oEvent) {
	if (a_oEvent.srcElement) return a_oEvent.srcElement;
	return a_oEvent.target;
}

/**
 * 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];
}

/**
 * Check of de browser binnen de criteria valt
 *
 * @param string a_sName			de naam van de browser
 * @param float	a_fMinVersion		de minimale versie (optioneel, null om niet te checken)
 * @param float a_fMaxVersion		de maximale versie (optioneel)
 * @return boolean					true als de browser, browser a_sName is en tussen of op versie a_fMinVersion en a_fMaxVersion zit
 * @since 1.0.3 - 4 juli
 */
function bCheckBrowser(a_sName, a_fMinVersion, a_fMaxVersion) {
	var sBrowserName = navigator.appName;
	var fVersion = parseFloat(navigator.appVersion);
	if (sBrowserName != a_sName) return false;
	if (sBrowserName == "Microsoft Internet Explorer") {
		aMS = navigator.appVersion.split(/MSIE/);
		fVersion = parseFloat(aMS[1]);
	}
	if (bIsDefined(a_fMinVersion) && !!bIsNull(a_fMinVersion) && fVersion < a_fMinVersion) return false;
	if (bIsDefined(a_fMaxVersion) && fVersion > a_fMaxVersion) return false;
	return true;
}

/**
 * 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 hoogte van de pagina
 * 
 * @return integer			de hoogte in pixels
 * @since 1.0.3 - 4 juli
 */
function iGetPageHeight(){
	if (document.body.parentNode.scrollHeight > document.body.parentNode.clientHeight) return document.body.parentNode.scrollHeight;
	else return document.body.parentNode.clientHeight;
}

/**
 * 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();
}