/*
 * common.js
 * requiert jQuery - http://jquery.com
 */

// Langue du document
var lang = $('html').attr('lang');

$(document).ready(function() {
	
	// Hauteur du bloc contenu
	var navHeight = $('#nav').height();
	if (navHeight > $('#main').height()) {
		$('#main').height(navHeight + 100);
	}

	// Article : sections dépliantes
	$('div.togglable').not('.shown').hide();
	$('span.toggle').addClass('JSon').bind('click', function() {
		$(this).toggleClass('active').parent().next('.togglable').toggle();
		return false;
	});
	
	// Article : résumés
	$('#abstract div[@id^=abstract]:not(:eq(0))').hide();
	$('#abstract a:first-child').addClass('active');
	$('#abstract a').bind('click', function() {
		var lg = $(this).attr('id').substr(7);
		$('#abstract div[@lang=' + lg + ']').show().siblings('div[@id^=abstract]').hide();
		$(this).addClass('active').siblings('a').removeClass();
		return false;
	});
	
	// Article : raccourcis
	$('#docShortcuts > a.toggle').bind('click', function() {
		$($(this).attr('href') + ' > div.togglable').show().prev('h2').children('span.toggle').addClass('active');
	});
	
	// Article : comportement des titres (retour au plan)
	$('a[@href^=#tocfrom]').bind('click', function() {
		$('#toc > div.togglable').show().prev('h2').children('span.toggle').addClass('active');
	});
	
	// Article : notes marginales (fix superpositions)
	var prevNoteBottom = 0;
	$('.sidenotes').each(function() {
		var thisTop = findPosY($(this).get(0));
		var diffPos = prevNoteBottom - thisTop;
		prevNoteBottom = thisTop + $(this).height();
		if (diffPos > 0) {
			$(this).css({'top': diffPos});
			prevNoteBottom += diffPos;
		}
	});
	
	// Suppression des mises en forme locales
	var tagsToCleanUp = ['img'];
	for (var tag in tagsToCleanUp) {
		$(tagsToCleanUp[tag]).removeAttr('style');
	}
	$('a[@class$=notecall]//sup').css('top', 'auto');
	$('a[@class$=notecall]').parents('sup').css('top', 'auto');
	$('a[@class$=notecall]//span').removeAttr('style');
	$('a[@class$=notecall]').parents('span').removeAttr('style');
	
});

// http://blog.firetree.net/2005/07/04/javascript-find-position/
function findPosX(obj) {
	var curleft = 0;
	if (obj.offsetParent)
		while(1) {
			curleft += obj.offsetLeft;
			if (!obj.offsetParent)
				break;
			obj = obj.offsetParent;
		}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj) {
	var curtop = 0;
	if (obj.offsetParent)
		while(1) {
			curtop += obj.offsetTop;
			if (!obj.offsetParent)
			break;
			obj = obj.offsetParent;
		}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}
