/* $Id: module-eadeac-basket.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. */
var tbls = new Array();// Les YUI DataTable

var _tblId = null;
//Il ne faut pas avoir une variable globale nommée _base ici, elle prend le dessus
//sur celle de module-ead-xslt.js
var _bbase = null;
var _isSortable = null;
var _sort_field = null;
var _sort_dir = null;

/**
 * Fonction gerant l'ajout de documents dans le porte-documents
 *
 * @param params {String} Les parametres qui seront passes avec l'URL.
 * @param target {String} L'objet HTML/DOM sur lequel on agira pour suivre le
 *                        processus.
 * @param base {String} L'identifiant de la base de documents. (optionel).
 */
function addToBasket( params, target, base, disables ) {
  if ( !params || !target ) return false;
  Element.extend( target );
  if (disables==null){
    disables = new Array();
    disables[0] = target;
  }
  var oInnerHTML = target.innerHTML;
  var url = 'functions/' + ((!base)?"ead/":base+"/") + 'addToBasket.json?';
  var ajax = new Ajax.Request( url, {
                               parameters: params,
                               onCreate: function(){
                                 target.innerHTML = "<span class=\"access\">"+ _usersMessagesBasket.basket_msg_adding +"</span>";
                                 target.addClassName('pl-bskt-bttn-loading');
                               },
                               onFailure: function(){
                                 target.innerHTML = "<span class=\"access\">" + _usersMessagesBasket.basket_msg_addToBasket_ko + "</span>";
                                 target.removeClassName('pl-bskt-bttn-loading');
                               },
                               onSuccess: function(xhr){
                                 target.innerHTML = oInnerHTML;
                                 target.removeClassName('pl-bskt-bttn-loading');
                                 var success=false;
                                 var msgCode = "";
                                 if(xhr.responseText){
                                   var oJson = xhr.responseText.evalJSON();
                                   success = oJson.success;
                                   if(oJson.msgCode){
                                     msgCode = oJson.msgCode;
                                   }
                                 }
                                 if(success){
                                   if(disables){
                                     disables.each(function(o){
                                       if(o){
                                         o.disabled = true;
                                         o.addClassName("disabled");
                                       }
                                     });
                                   }
                                 }
                                 else{
                                   if(!msgCode) msgCode = "basket_msg_addToBasket_ko";
                                 }

                                 var msg = eval( "_usersMessagesBasket."+msgCode );
                                 if(msg) {
                                  alert(msg);
                                 }
                                 else if(msg){
                                   alert(msg);
                                 }

                               }
                            });
}
/**
 * Fonction gerant l'ajout d'une page complete de documents dans le porte-
 * documents.
 *
 * @param params {String} Les parametres qui seront passes avec l'URL.
 * @param target {String} L'objet HTML/DOM sur lequel on agira pour suivre le
 *                        processus.
 * @param base {String} L'identifiant de la base de documents. (optionel).
 */
function addPageToBasket(params, target, base){
  return addToBasket(params, target, base);
  // TODO (MP) : Trouver moyen de desactiver les boutons d'une page de resultat.
}
/**
 * Fonction gerant l'ajout d'un resultat de recherche dans le porte-
 * documents.
 *
 * @param params {String} Les parametres qui seront passes avec l'URL.
 * @param target {String} L'objet HTML/DOM sur lequel on agira pour suivre le
 *                        processus.
 * @param base {String} L'identifiant de la base de documents. (optionel).
 */
function addResultsToBasket(params, target, base){
  return addToBasket(params, target, base/* , $$('button.pl-bskt-bttn') */);
  // TODO (MP) : Trouver moyen de desactiver les boutons d'un resultat.
}
/**
 * Fonction gerant l'ajout d'un document dans le porte-documents.
 *
 * @param params {String} Les parametres qui seront passes avec l'URL.
 * @param target {String} L'objet HTML/DOM sur lequel on agira pour suivre le
 *                        processus.
 * @param base {String} L'identifiant de la base de documents. (optionel).
 */
function addDocToBasket(params, target, base){
  return addToBasket(params, target, base);
}

/**
 * Fonction pour retirer des documents du panier
 *
 * @param mode {String} Le mode choisi : 'all' ou l'ensemble des input sélectionnés
 * @param target {Node} L'objet XHTML/DOM a mettre a jour pour suivre
 *                      l'evolution du processus.
 * @param base {String} L'identifiant de la base de document (optionel)
 * @param fct {function()} La fonction utilisee en fin de processus. Si null, on
 *                         recharge la page.
 */
function deleteFromBasket( mode, target, base, fct ) {
	if ( !mode || !target ) return false;
	//DEBUG console.log('mode: ' + mode + ' | target: ' + target + ' | base: ' + base + ' | fct: ' + fct);

	var _origHtml = target.innerHTML;

	var _params = "";
	if( mode == 'all' ){
		_params = 'id=all';
	} else {
		mode.each(function(o){
			_params += '&id=' + $F(o);
		});
	}

  var _url = 'functions/' + ((!base)?"ead/":base+"/") + 'deleteFromBasket.json?';

  var _ajax = new Ajax.Request(  _url, {
		parameters: _params,
		onCreate: function(){
			target.innerHTML = "Traitement en cours...";
	 },
	 onFailure: function(){
		 target.innerHTML = "Echec...";
	 },
	 onSuccess: function(xhr){
		 target.innerHTML = _origHtml;
		 var success = false;
		 var msg = "Echec...";
		 if(xhr.responseText){
			 var oJson = xhr.responseText.evalJSON();
			 success = oJson.success;
			 msg = oJson.description;
		 }
		 if(msg) alert(msg);
		 if(fct) {
			 fct();
		 } else if(mode == 'all') {
			 //si mode vaut 'all', on a vidé le panier, on ne cherche pas à charger en Ajax
			 window.location.reload();
		 } else {
			 var _url = String(window.location).gsub('basket\.html.*', 'functions/' + base + '/getBasket.ajax');
			 ajaxBasketLoad(_url, base);
		 }
	 }
 });
}

/**
 * Fonction d'initialisation de la TabView YUI
 * @param tabSelector {String} La classe CSS utilisee pour selectionner les onglets
 * @param tabsSelector {String} L'identifiant ou l'objet HTML contenant la TabView
 * @param isSortable {String} Chaine indiquant que la DataTable est triable ou
 *                            non
 * @param sort_field {String} Nom du champ sur lequel le tri doit être fait au
 *														chargement de la page
 * @param sort_dir {String} Ordre du tri au chargement de la page
 */
function initBasketTabs(tabSelector, tabsSelector, isSortable, sort_field, sort_dir){
	_isSortable = isSortable;
	_sort_field = sort_field;
	_sort_dir = sort_dir;
  if(tabSelector==null || tabSelector.blank()){
    tabSelector = "div.tab";
  }
  if(tabsSelector==null || tabsSelector.blank()){
    tabsSelector = "pl-pg-tabs";
  }
  var mTabs = new YAHOO.widget.TabView(tabsSelector);
  initBasketTab();
  mTabs.on('activeTabChange', function(ev) {
    return initBasketTab();
  });
}

/**
 * Fonction d'initialisation d'un onglet du porte-documents
 * @param tabSelector {String} La classe CSS utilisee pour selectionner les onglets
 */
function initBasketTab(tabSelector){
  if(tabSelector==null || tabSelector.blank()){
    tabSelector = "div.tab";
  }
  $$(tabSelector).each(function(o,i){
    if(o!=null && o.id!=null & o.visible()){
			var _base = o.id;
			//boutons d'action
			var _btn_flush = new YAHOO.widget.Button('btn_flush-' + _base, {type: 'push'});
			var _btn_update = new YAHOO.widget.Button('btn_update-' + _base, {type: 'push'});
			$('btn_flush-' + _base + '-button').stopObserving('click');
			$('btn_update-' + _base + '-button').stopObserving('click');
			$('btn_flush-' + _base + '-button').observe(
				'click',
				function(event){
					if(confirm(_usersMessagesBasket.basket_flush_basket_confirm))
						deleteFromBasket( 'all', this, _base );
					Event.stop(event);
				}
			);
			$('btn_update-' + _base + '-button').observe(
				'click',
				function(event){
					var _selecteds = $$('input:checked');
					if( _selecteds == null || _selecteds.length == 0 ){
						alert(_usersMessagesBasket.basket_delete_from_basket_no_selected);
					} else {
						deleteFromBasket(_selecteds, this, _base);
					}
					Event.stop(event);
				}
			);

			_bindBasketPagination();
    }
  });
}

function _bindBasketPagination(){
	//pagination en ajax
	if( $('basket_pagination') ) {
		$$('#basket_pagination a').each(function(n){
			$(n).observe('click', ajaxBasketPagination);
		});
	}
}

/**
* Intercepte les liens de la pagination pour les envoyer en Ajax plutôt que
* de recharger toute la page
*/
function ajaxBasketPagination(e){
	var _myBase = this.up('div.tab').id;
	var _url = this.href.gsub('basket\.html', 'functions/'+ _myBase +'/getBasket.ajax');
	ajaxBasketLoad(_url, _myBase);
	Event.stop(e);
}

function ajaxBasketLoad(_url, _currentBase){
	startFragmentLoading();
	new Ajax.Updater(
		_currentBase + '_basket_content',
		_url,
		{
			onComplete: basketLoaded
		}
	);
}

/**
* Évènements qui surviennent une fois le panier rechargé via ajax
*/
function basketLoaded(){
	_bindBasketPagination();
	stopFragmentLoading();
}

