/****
 * Fade in elements (content, menus, ...) in the same way
 * 	(easy to change the fade behaviour for all stuff at one point)
 * @param elements	jQuery array of elemnts
 */
function fadeInContent(elements, _speed) {
	speed = _speed || fadeInSpeed; // if speed parameter is empty
	elements.stop(true, false);
	elements.filter('.submenu').css('display', 'block'); /* submenu was hidden in fadeOutContent */
	elements.animate({
				opacity: 1.0
		}, { 
				duration: speed,
				easing: 'easeInQuad',
				queue: true
			}
	);
}



/****
 * Fade out elements (content, menus, ...) in the same way
 * 	(easy to change the fade behaviour for all stuff at one point)
 * @param elements	jQuery array of elemnts
 */
function fadeOutContent(elements, _speed) {
	speed = _speed || fadeOutSpeed;
	elements.stop(true, true);
	elements.animate({
				opacity: 0.0
		}, { 
				duration: speed,
				easing: 'easeOutQuad',
				queue: true,
				/* hide submenu, so is not clickable */
				complete: function() { 
					elements.filter('.submenu').css('display', 'none'); 
				}
			}
	);
}


/****
 * Preload all images on page
 */
function preLoadImages() {
	imageArray = $.makeArray($('img').attr('src'));
	$({}).imageLoader({
	images: imageArray,
	async: true,
	// give feedback to complete event of loadContent function (ajax)
		// TODO: Don't know, if this works
	allcomplete: function() { 
		return true; 
		}
	});	
}


/****
 * Calculates offset between to given elements
 *
 ****/
function calculateDistance(element, target) {
	var offset = {left: 0, top: 0};
	var o1 = element.offset(),
			o2 = target.offset();
	offset.left = o1.left - o2.left;
	offset.top 	= o1.top - o2.top;
	return offset;
}


/****
 * Returns the target element which triggered the event
 */
function getEventTarget(e) {
	var target;
	if (!e) var e = window.event;
	if (e.target) target = e.target;
	else if (e.srcElement) target = e.srcElement;
	if (target.nodeType == 3) // defeat Safari bug
		target = target.parentNode;
	return target;
}


/****
 * Checks, if the user uses a mobile device (browser)
 */
function browserCheck() {
	
	if ($.browser.mobile) {
		return true;
	}
	else {
		var dbg = '';
		for (var k in $.browser) {
			if (typeof($.browser[k]) == 'function') {
				continue;
			}
			if (typeof($.browser[k]) !== 'object') {
				dbg += k+'\t: '+$.browser[k]+'\n';
			} else {
				dbg += k+': '+(($.browser[k])?true:false)+'\n';
				for (var kk in $.browser[k]) {
					dbg += '\t  '+k+ '.'+kk+'\t= '+$.browser[k][kk]+'\n';
				}
			}
		}
		alert(dbg);
	}
	return false;
}

/****
 * Checks, if the browser is Internet Explorer
 */
function isIE() {
	//return $.browser.msie;
	if ($.browser.msie) { return true; }
	else { return false; }
}
