// File: catalogue_portlets.js
// entièrement réécrit pour passer de prototype.js à jQuery
//
/*****************************************************************************/
/** Constantes ***************************************************************/
/*****************************************************************************/
var EMPTY_IMG = icone('empty.gif', 'empty');
var PLUS_IMG = icone('descripteur_plus.gif', 'plus');
var MOINS_IMG = icone('descripteur_moins.gif', 'moins');
var UNCHECKED_BOX_IMG = icone('box_vide.gif', '');
var CHECKED_BOX_IMG = icone('box_ok.gif', '');

/*****************************************************************************/
/** Gestion des descripteurs *************************************************/
/*****************************************************************************/
var LIST_OK = {
	'niveau':false,
	'discipline':false,
	'public':false,
	'editeur':false,
	'format':false
};

function showAll(globalUl, descripteur) {
	var ulElt = globalUl.find('.links_' + descripteur);
	var aElt = globalUl.find('.sh_' + descripteur);
	ulElt.removeClass('hidden');
	aElt.attr({title:'Cliquez pour cacher les mots clefs'})
		.addClass('opened').removeClass('closed');

	// Traitement de la liste du descripteur
	// "à la demande" à la première ouverture
	if (LIST_OK[descripteur] == false) {
		// Cas des listes hiérarchiques
		if (descripteur == 'niveau' || descripteur == 'discipline') {
			initTreeDescripteur(globalUl.attr('id'), descripteur);
		// Cas classique
		} else {
			ulElt.find('a').each(function() {
				var selected = jQuery(this).attr('class').indexOf('selected') != -1;
				var boxImg = selected ? CHECKED_BOX_IMG : UNCHECKED_BOX_IMG;
				jQuery(this).prepend(boxImg + ' ');
			});
		}

		// Traité une fois, pas besoin de le faire la prochaine fois
		LIST_OK[descripteur] = true;
	}
	return false;
}

function hideAll(globalUl, descripteur) {
	var ulElt = globalUl.find('.links_' + descripteur);
	var aElt = globalUl.find('.sh_' + descripteur);
	ulElt.addClass('hidden');
	aElt.attr({title:'Cliquez pour afficher tous les mots clefs'})
		.addClass('closed').removeClass('opened');
}

function showHideAll(globalUl, descripteur, show) {
	var aElt = globalUl.find('.sh_' + descripteur);
	if (show) {
		showAll(globalUl, descripteur);
		aElt.toggle(
			function() { hideAll(globalUl, descripteur); },
			function() { showAll(globalUl, descripteur); }
		);
	} else {
		hideAll(globalUl, descripteur);
		aElt.toggle(
			function() { showAll(globalUl, descripteur); },
			function() { hideAll(globalUl, descripteur); }
		);
	}
}

function extractDescriptorName(elt) {
	var classNames = elt.attr('class');
	var idx = classNames.indexOf(' ');
	return classNames.substr(idx+1);
}

function initSolrLinks(ulId) {
	var globalUl = jQuery('#' + ulId);
	if (globalUl == undefined) {
		return;
	}
	globalUl.find('.descripteur').each(function() {
		var descripteur = extractDescriptorName(jQuery(this));
		var ulId = globalUl.find('ul.links_' + descripteur);
		var hideBool = ulId.attr('class').indexOf('hidden') != -1;
		showHideAll(globalUl, descripteur, !hideBool);
	});
}

/*****************************************************************************/
/** Gestion de l'arbre des niveaux et des disciplines ************************/
/*****************************************************************************/
function imgUrl(fileName) {
	return '/catalogue/styles/portlets/images/' + fileName;
}

function icone(fileName, className) {
	return '<img src="' + imgUrl(fileName)
		+ '" alt="" class="' + className + '" />';
}

function initTree(ulId) {
	initTreeDescripteur(ulId, 'niveau');
	initTreeDescripteur(ulId, 'discipline');
}

function initTreeDescripteur(ulId, descripteur) {
	var ulDesc = jQuery('#' + ulId + ' .links_' + descripteur);
	if (ulDesc == undefined) {
		return;
	}

	var first = 0;
	var second = 0;
	var third = 0;

	var str = '';

	// Pour l'arbre des niveaux et des disciplines
	ulDesc.find('li').each(function(){
		var liElt = jQuery(this);
		var aElt = liElt.children('a.keyword:first');
		var childUl = aElt.next();
		if (childUl.is('ul')) {
			var plusMoinsImg = childUl.is('.hidden') ?
				PLUS_IMG : MOINS_IMG;
			liElt.prepend(plusMoinsImg + ' ');
		} else {
			liElt.prepend(EMPTY_IMG + ' ');
		}
		var boxImg = aElt.is('.selected') ? CHECKED_BOX_IMG : UNCHECKED_BOX_IMG;
		aElt.prepend(boxImg + ' ');
	});

	ulDesc.find('img.plus').add('img.moins').each(function(){
		var img = this;
		jQuery(img).click(function() { openClose(img); });
		jQuery(img).hover(function() { rollOver(img, false); },
				   function() { rollOver(img, true); });
	});

}

function rollOver(img, over) {
	var dotIdx = img.src.lastIndexOf('.');

	// On rajoute "_rollover"
	if (over) {
		img.src = img.src.substring(0, dotIdx) + '_rollover.gif';
	// On le retire
	} else {
		if (img.src.indexOf('_rollover') != -1) {
			img.src = img.src.substring(0, dotIdx - 9) + '.gif';
		}
	}
}

function openClose(img) {
	var liElt = img.parentNode;
	var ulElt = jQuery(liElt).find('ul')[0];

	// +
	if (jQuery(img).attr('class').indexOf('plus') != -1) {
		// Transformation du bouton
		img.src = imgUrl('descripteur_moins.gif');
		img.className = 'moins';

		// Apparition des enfants
		jQuery(ulElt).removeClass('hidden');

	// -
	} else {
		// Transformation du bouton
		img.src = imgUrl('descripteur_plus.gif');
		img.className = 'plus';

		// On cache les enfants
		jQuery(ulElt).addClass('hidden');
	}
}

/*****************************************************************************/
/** Interdiction de toucher au login *****************************************/
/*****************************************************************************/
function disableLoginField() {
	var loginId = '_2_screenName';
	var loginField = jQuery('#' + loginId);
	if (loginField == undefined) {
		return;
	}
	loginField.attr({'disabled':'disabled'})
	loginField.after('<input type="hidden" name="' + loginId + '" value="'
		+ loginField.val() + '" />');
}

/*****************************************************************************/
/** Montrer/cacher le panneau de préférences *********************************/
/*****************************************************************************/
function initPreferencesPanel(fconfId) {
	var divElt = jQuery('#' + fconfId);
	if (divElt == undefined) {
		return;
	}
	var aElt = divElt.find('.configuration_panel_link');
	var panelElt = divElt.find('.configuration_panel');
	aElt.toggle(function() { panelElt.show('slow'); },
		function() { panelElt.hide('slow'); });
}

/*****************************************************************************/
/** Montrer/cacher la légende ************************************************/
/*****************************************************************************/
function initLegend(legendId) {
	var divElt = jQuery('#' + legendId);
	if (divElt == undefined) {
		return;
	}
	var aElt = divElt.find('a');
	var imgElt = aElt.find('img');
	var panelElt = divElt.find('div');
	panelElt.hide();
	aElt.toggle(
		function() {
			panelElt.show('slow');
			imgElt.attr({'src':imgUrl('descripteur_moins.gif')});
		},
		function() {
			panelElt.hide('slow');
			imgElt.attr({'src':imgUrl('descripteur_plus.gif')});
		});
}
/*****************************************************************************/
/** Montrer/cacher la liste des titres en attente ****************************/
/*****************************************************************************/
function initWaitingTitles(jspId) {
	var divElt = jQuery('#' + jspId + '_div');
	var aElt = jQuery('#' + jspId + '_link');
	if (divElt == undefined || aElt == undefined) {
		return;
	}
	divElt.hide();
	aElt.toggle(
		function() {
			divElt.show('slow');
			aElt.html('cacher').attr({title:'cacher'});
		},
		function() {
			divElt.hide('slow');
			aElt.html('montrer').attr({title:'montrer'});
		});
}

/*****************************************************************************/
/** Fiche descriptive dans le context du catalogue ***************************/
/*****************************************************************************/
function initModeLink() {
	if (jQuery('#use_conditions_link') != undefined) {
		jQuery('#use_conditions_link').toggle(
			function(){ jQuery('#use_conditions_panel').show('slow'); },
			function(){ jQuery('#use_conditions_panel').hide('slow'); }
		);
	}
	jQuery('.modelink').click(function() {
		var aElt = jQuery(this);
		jQuery("div.popup-message").load(aElt.attr('href'), {}, initModeLink);
		aElt.attr({disabled : 'disabled'});
		return false;
	});
}

function workOnPagingLinks(divId) {
	jQuery('div#' + divId + ' div.pagination a').click(function() {
		var aElt = jQuery(this);
		var url = aElt.attr('href');

		// on travaille sur l'URL
		// Retire doublon cert et brief
		url = url.replace(/&cert=(true|false)(&cert=\1)+/, '&cert=$1');
		url = url.replace(/&brief=(true|false)(&brief=\1)+/, '&brief=$1');
		// et q
		url = url.replace(/&q=([^&]+)(&q=\1)+/, '&q=$1');

		// et on la réinjecte
		aElt.attr({'href':url});
		
		return true;
	});
}

function workOnResourceList(divId, publicAccess) {
	workOnPagingLinks(divId);
	initNoticeLinks(divId);
	/*
	jQuery(document).ready(function() {
		initTitleLinks(divId, publicAccess);
	});
	*/
}

function initNoticeLinks(divId) {
	var links = jQuery('#' + divId + ' span.btn2 a');
	if (links == undefined || links.length == 0) {
		return;
	}

	links.each(function() {
		var link = jQuery(this);
		link.click(function() {
			var params = Liferay.Popup({
				width: 800,
				height: 500,
				modal: true,
				title: 'Notice LOMFR'
			});
			jQuery('.popup-close').attr({'src': imgUrl('close.png')});
			var url = link.attr('href').replace('viewResource', 'notice');
			AjaxUtil.update(url, params, { onComplete: function() {
					jQuery('div.popup-message').addClass('notice');
					initModeLink();
					Liferay.Popup.center();
				}
			});
			return false;
		});
	});
}

function extractOAIIdFromTD(tdElt) {
	var imgElt = tdElt.find('div.logo a.access img');
	var freeTitle = imgElt.size() != 0;
	if (!freeTitle) {
		imgElt = tdElt.find('div.logo img');
	}
	var src = imgElt.get(0).src;
	var idx = src.indexOf('OAIIdentifier=');
	var idx2 = src.indexOf('&', idx);
	var oaiId = src.substring(idx + 14, idx2);
	return new Array(oaiId, freeTitle);
}

function initTitleLinks(divId, publicAccess) {
	// Si accès public, on ne fait rien !
	if (publicAccess) {
		return;
	}

	// Sinon, on change les liens pour accéder au log
	// On compte le nombre de titres
	var resIds = new Array();
	jQuery('#' + divId + ' td').each(function() {
		var tab = extractOAIIdFromTD(jQuery(this));
		var oaiId = tab[0];
		var freeTitle = tab[1];

		if (freeTitle) {
			var url = computeResourceUrl(oaiId);
			jQuery(this).find('div.' + oaiIdToClass(oaiId) + ' a')
				.attr('href', url);
		} else {
			resIds.push(oaiId);
		}
	});

	// S'il y a des ressources payantes, on les traite
	if (resIds.length != 0) {

		var url = "/catalogue/authorizedTitles.html?";
		var sep = '';
		for (var i=0; i<resIds.length; i++) {
			url += sep + 'resId=' + resIds[i];
			sep = '&';
		}

		jQuery.ajax({
			type: 'GET',
			url: url,
			dataType: 'json',
			error: function(req, msg, ex) { alert("Not connected! => " + msg + " " + req.responseText); },
			success: function(jsonObj) { workOnPayingTitles(jsonObj, divId); }
		});
	}
}

function workOnPayingTitles(jsonObj, divId) {
	for (id in jsonObj) {
		if (jsonObj[id]) {
		//if (true) {
			activePayingLink(divId, id);
		} else {
			activeOrderLink(divId, id);
		}
	}
}

function activePayingLink(divId, id) {
	var jstr = '#' + divId + ' div.' + oaiIdToClass(id);
	var divs = jQuery(jstr);
	if (divs.size() != 2) {
		alert("Error");
		return;
	}

	var logoDiv = jQuery(divs.get(0));
	var resultDiv = jQuery(divs.get(1));
	logoDiv.html(computeResourceLink(logoDiv.html(), id));
	var h2 = jQuery(resultDiv.find('h2').get(0));
	h2.html(computeResourceLink(h2.html(), id));
}

function activeOrderLink(divId, id) {
	var jstr = '#' + divId + ' div.' + oaiIdToClass(id) + ' div.notice span.payant';
	var span = jQuery(jstr);
	var label = "S'abonner à la ressource";
	var img = span.find('img').attr({'alt':label,'title':label});
	span.html(computeOrderLink(span.html(), id, label));
}

function computeResourceUrl(id) {
	return '/catalogue/resourceAccess.html?resourceId=' + id;
}
function computeOrderUrl(id) {
	return '/catalogue/createIndividualOrder.html?OAIIdentifier=' + id;
}

function computeLink(url, content, title) {
	var link = '<a href="' + url + '"';
	if (title != undefined) {
		link += ' title="' + title + '"';
	}
	link += '>' + content + '</a>';
	return link;
}

function computeResourceLink(content, id) {
	return computeLink(computeResourceUrl(id), content);
}

function computeOrderLink(content, id, title) {
	return computeLink(computeOrderUrl(id), content, title);
}

function oaiIdToClass(oaiId) {
	return oaiId.replace(/[\.:]/g, '-');
}

/*****************************************************************************/
/** Programme principal ******************************************************/
/*****************************************************************************/
jQuery(document).ready(function() {
	disableLoginField();
});
