/*
 * common.js
 * requiert jQuery - http://jquery.com
 */

// Langue du document
var lang = $('html').attr('lang');

// Traductions
var strLoading = {
	'fr': 'Chargement...',
	'en': 'Loading...',
	'es': 'Cargando...',
	'it': 'Caricamento...',
	'de': 'Ladend...',
	'pt': 'A carregar...'
	};

$(document).ready(function() {
	
	// Article : sections dépliantes
	$('#docBody div.togglable')
		.not('.shown').hide().end()
		.prev('h2').addClass('toggle').hover(function() {
			$(this).addClass('hover');}, function() {
			$(this).removeClass('hover');
		}).click(function() {
			$(this).toggleClass('active').next('div.togglable').toggle();
			return false;
		});
	
	$('#shortcuts > a.toggle').click(function() {
		return toggleSection($(this).attr('href'));
	});
	
	$('#text a[@href^=#tocfrom]').click(function() {
		return toggleSection('#toc');
	});
	
	// Article : résumés
	$('#abstract div[@id^=abstract]:not(:eq(0))').hide();
	$('#navAbstracts a:first-child').addClass('active');
	$('#navAbstracts a').click(function() {
		var lg = $(this).attr('id').substr(7);
		$('#abstract div[@lang=' + lg + ']').siblings('div[@id^=abstract]').hide().end().show();
		$(this).addClass('active').siblings('a').removeClass();
		return false;
	});
	
	// Article : notes marginales (fix superpositions)
	var prevNoteBottom = 0;
	$('.sidenotes').each(function() {
		// Alignement avec le premier paragraphe,
		// si le premier frère est un niveau de titre
		var heading = $(this).siblings('*[@id^=heading]:first-child');
		if (heading.length) {
			$(this).css('top', heading.height() + parseInt(heading.css('margin-bottom')));
		}
		// Correction des positions verticales
		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');
	}
	
	// Cleobarre
	$('#cleo form').bind('submit', function() {
		window.location.href = $(this).find(':selected').val();
		return false;
	});
	$('#cleo select').bind('change', function() {
		$(this).parents('form').submit();
		return false;
	});
	
	// Fil d'Ariane
	$('#breadcrumb select').bind('change', function() {
		var opt = $(this).children(':selected');
		opt.text(strLoading[opt.val()]);
		$(this).parents('form').submit();
		return false;
	});
	
	// Accès restreint
	var loginError = $('#loginbox div.error');
	var loginBlock = $('#loginbox div.togglable');
	if (loginError.is('div') === false && $('#loginbox').hasClass('log-out') === false) {
		loginBlock.hide();
	}
	$('#loginbox.log-in legend > span')
		.hover(function() {
			$(this).addClass('hover');
		}, function() {
			$(this).removeClass('hover');
		})
		.click(function() {
			loginBlock.toggle();
			return false;
		});
	$('#loginbox.log-in img.cancel').click(function() {
		loginBlock.hide();
		loginError.remove();
	});
	
	// Rollover boutons
	$('#wrapper form *[@src]').hover(function() {
		$(this).attr('src', $(this).attr('src').replace(/\.(png|gif)$/, '-hover.$1'));
	}, function() {
		$(this).attr('src', $(this).attr('src').replace('-hover', ''));
	});
	
	// Signaler : vérifications
	var mail  = /^[\w\-]+(\.[\w\-]+)*@[\w\-]+(\.[\w\-]+)*\.[\w\-]{2,}$/;
	$('#sendTo').bind('submit', function() {
		var error = new Array();
		$(this).find('label').removeClass('error');
		if (mail.test($('#to').val()) === false) { error[0] = 'to'; }
		if (mail.test($('#from').val()) === false) { error[1] = 'from'; }
		if (error.length > 0) {
			for (e in error) {
				$('label[@for='+error[e]+']').addClass('error');
				//$('<br /><strong></strong>').addClass('error').text(strError[error[e]][lang]).appendTo('#sendTo p');
			}
			return false;
		}
	});
	
});

// 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;
}

function toggleSection(id) {
	$(id + ' > div.togglable').show().prev('h2.toggle').addClass('active');
	return true;
}
