/* $Id: module-img-viewer.js 16503 2009-10-01 08:48:43Z jcwiklinski $ */
/**
Copyright (C) 2003-2009 AJLSM, Anaphore
Voir le fichier LICENCE
**/
/* Ce fichier de configuration fait partie de la distribution standard
de Pleade. Vous pouvez le modifier à votre guise. */

// Fonction principale d'initialisation
function pivInit() {
	if(_pivSeries==null){ //TODO (MP) : Affficher la boite de dialogue indiquant qu'il n'y a pas d'images ; ce message doit etre i18n
		_pivViewer.init();
		if(_pivViewer.pnlNoImg){
			_pivViewer.pnlNoImg.show();
		}
		pivSetStatus("Aucune image disponible"); // TODO (MP): i18n
	}else{
		_pivSeries.init();
		_pivViewer.init();
		_pivViewer.initSeries(_pivSeries);
		_pivViewer.gotoImage(_pivSeries.getCurrentImage());
	}
}

function pivCreateTooltip(ttId, contextId, text) {
	if (ttId && contextId && $(contextId)) {
		if (!text) return new YAHOO.widget.Tooltip(ttId, { context: contextId });
		else return new YAHOO.widget.Tooltip(ttId, {context: contextId, text: text});
	}
}

function pivGetMessage(key, data) {
	if (!data) return _pivMessages[key] ? _pivMessages[key] : "";
	else return _pivMessages[key] ? new Template(_pivMessages[key]).evaluate(data) : "";
}

function pivDoDownload(format, first, last, title, id) {
	if ( !format || !first || !last ) return;
	var f, l, sf, sl;
	f = first;
	sf =_pivSeries.getFirst();
	sl =_pivSeries.getLast();
	if(sf!=-1){
		if( first == 1 ) f = sf;
		else f += (sf - 1);
	}
	l = last;
	if(sl!=-1){
		if( last == _pivSeries.getSize() ) l = sl;
		else l += (sl + 1);
	}
	if(_pivSeries.getLast()!=-1){}
	var _url = "dir."+format+"?p="+f+"&d="+l+ ((title)?("&t="+title):"") + ((id)?("&c="+id):"");
	window.open( _url );
}

function pivCenterOnScreen(div) {
	if ( div ) {
		div.setStyle({top: ((YAHOO.util.Dom.getClientHeight() - getHeight(div) ) / 2) + "px"});
		div.setStyle({left: ((YAHOO.util.Dom.getClientWidth() - getWidth(div) ) / 2) + "px"});
	}
}

function pivSetStatus(message) {
	if (message) {
		$("pnl-status").update(message);
	}
}

/**
*	Retourne un rectangle qui détermine les pixels de l'image qui sont compris
*	dans le rectangle d'écran r.
*	@param {Object} r Un rectangle, en coordonnées écran (viewport)
*	@param {Object} o Un point x,y où se situe l'origine de l'image, en coordonnées écran
*	@param {Object} d Les dimensions (width, height) de l'image
*	@param {float}  z Le facteur de zoom actuel de l'image
*	@return Un rectangle en coordonnées image.
*	@type {Object}
*/
function pivScreenToImage(r, o, d, z) {
	var ret = {};
	// Pour la largeur et la hauteur, on commence par appliquer le zoom
	ret.width = Math.floor(Math.min(r.width, (r.x + r.width - o.x)) / z);
	ret.height = Math.floor(Math.min(r.height, (r.y + r.height - o.y)) / z);
	// Pour le coin supérieur gauche, il faut tenir compte de la translation aussi
	ret.x = Math.max(Math.floor((r.x - o.x) / z), 0);
	ret.y = Math.max(Math.floor((r.y - o.y) / z), 0);
	// On doit ajuster la hauteur et la largeur de manière à ne prendre que des parties d'image
	if (ret.x + ret.width > d.width) ret.width = d.width - ret.x;
	if (ret.y + ret.height > d.height) ret.height = d.height - ret.y;

	pivSetStatus("z: " + z + "; x: " + ret.x + "; y: " + ret.y + "; w: " + ret.width + "; height: " + ret.height);

	return ret;
}
