/* ATTENTION 1 : NE PAS FAIRE DE PROTOTYPE POUR L INSTANT DANS CE JS PAR MESURE DE COMPATIBILITE AVEC LES PAGE COMPORTANT TJS DU PSEUDOJS
   ATTENTION 2 : <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> est obligatoire sur la pages incluant ce js */
document.write('<script type="text/javascript" src="/scripts-v58/dwr/engine.js"></script>');
document.write('<script type="text/javascript" src="/scripts-v58/dwr/interface/RemoteView.js"></script>');

var jsonrpc;
var preventCall=false;
var beans;
var beanToLoad;
var dummyElement;
var codeLang;
var viewBeans;

/*Initialisation des beans par leurs noms declares*/
function initBeanList(beanNames){
	if (beanNames){
		beanToLoad="beans="+beanNames;
		var tabBean = beanNames.split(";");
		beans = new Array;

		for(var num=0;num<tabBean.length;num++)
			beans.unshift(new Bean(tabBean[num]));
	} else
		 alert("Attention: Pas de beans declares!");
}

/*Decalaration de l objet bean*/
function Bean(nomBean){
	this.nom = nomBean;
	this.bean= null;
}

/*Initialisation de la vue*/
function initView(viewBeans) {
	for( var num=0;num<beans.length; num++)
		beans[num].bean = viewBeans[beans[num].nom];
}

function updateView(actionName, viewName, parameters){
	try {
		if (preventCall==false) {
			preventCall=true;

			if (!codeLang)
				codeLang = getDirLangFromHtmlAttrib();			
			
      RemoteView.getViewBeans(actionName, viewName, parameters, codeLang, { callback:function(data) {
          viewBeans = data;           
          initView(viewBeans); 
        }, async:false
        , errorHandler:function(errorString, exception) {
                 
            if (errorString && errorString.startsWith("Erreur de session")){
              document.location='/'+ codeLang + '/session/expired.html';
            }
                
            throw exception;            
          }
        }, document.referrer      
      );			
			rewriteView();
		}
	} catch(e) {
		if (e.name == "JSONRpcClientException" ) {
			/* Redirection vers page err tech
			if (!codeLang || codeLang=="")
				var errPage = "/gb/error/error.shtml";
			else
				var errPage = "/" + codeLang + "/error/error.shtml";

			if (parent.location.href == self.location.href)
				 document.location.href = errPage;
			else
				 parent.location.href = errPage;
			alert("UpdateView failed: " + e);
			*/
		} else
			throw e;

	} finally {
		preventCall=false;
	}
}

/* Permet de recuperer la langue de la page. Meta OBLIGATOIRE sur les pages incluant ce js !
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
 */
function getDirLangFromHtmlAttrib() {
	var htmlTag = document.getElementsByTagName("html")[0];
	var langue = "";
	if(htmlTag.attributes["xml:lang"] && htmlTag.attributes["xml:lang"].value)
		langue = htmlTag.attributes["xml:lang"].value;
	else if(htmlTag.attributes["lang"] && htmlTag.attributes["lang"].value)
		langue = htmlTag.attributes["lang"].value;
	return convertEn2Gb(langue);
}

function convertEn2Gb(langue) {
	if (langue && langue.toUpperCase()=="EN")
		langue = "gb";
  return langue;
}

function fillSelect(selectId, values, selectedValue, blankValue){
	// si l element n est pas present, on sort
	if (!document.getElementById(selectId)) return;
	var selectElement = document.getElementById(selectId);
	//On force le nettoyage du select
	selectElement.options.length=0;
	selectElement.innerHTML="";

	var index = 0;
	var selectIndex = -1;
	if(blankValue!=null)
		selectElement[index++]=new Option(blankValue, "");

	for(var mapKey in values){
		//On regarde si c est une option ou un groupe d ptions
		//Cas groupe d options
		if(values[mapKey]!=null && typeof(values[mapKey]) == 'object'){
			var oGroup = document.createElement('optgroup');
			oGroup.label = mapKey;
			selectElement.appendChild(oGroup);
			var options = values[mapKey];
			for(var optionKey in options){
				var oOption = document.createElement('option');
				oOption.value = optionKey;
				oOption.innerHTML = options[optionKey];
				oGroup.appendChild(oOption);
			}
		}
		//Cas option seule
		else {
			//BUG IE : bug sur innerHTML dans un select et pb constrinction select en DOM + selection valeur pas defaut
			selectElement.options[index] = new Option(values[mapKey],mapKey);
		}
		if(selectedValue!= null && mapKey==selectedValue){

			selectIndex=index;
		}
		index++;
	}

	if(selectIndex!=-1){
	 //alert(selectIndex);
		selectElement.selectedIndex=selectIndex;
	}else
		selectElement.selectedIndex=0;
}

function fillSelectWithKeys(selectId, values, selectedValue, blankValue){
	// si l element n est pas present, on sort
	if (!document.getElementById(selectId)) return;
	var selectElement = document.getElementById(selectId);
	selectElement.options.length=0;
	var index = 0;
	var selectIndex = -1;
	if(blankValue && blankValue!=null)
		selectElement[index++]=new Option(blankValue, "");
	for(var mapKey in values){
		selectElement[index]=new Option(mapKey, mapKey);
		if(selectedValue!= null && mapKey==selectedValue){
			selectIndex=index;
		}
		index++;

		if(selectIndex!=-1)
			selectElement.selectedIndex=selectIndex;
		else
			selectElement.selectedIndex=0;
	}
}

function updateCheckBoxStatus(checkBoxId){
	// si l element n est pas present, on sort
	if (!document.getElementById(checkBoxId)) return;

	var checkBoxElement = document.getElementById(checkBoxId);
	if(checkBoxElement.checked)
		checkBoxElement.value="ON";
	else
		checkBoxElement.value="";
}

function selectOption(selectid, selectedValue){
	// si l element n est pas present, on sort
	if (!document.getElementById(selectid)) return;

	var selectElement = document.getElementById(selectid);
	if(selectElement && selectElement.options){
		for(var i=0; i<selectElement.options.length; i++){
			if(selectElement.options[i].value==selectedValue)
				selectElement.selectedIndex=i;
		}
	}
}

function checkRadio(radioElement, selectedValue){
	// si l element n est pas present, on sort
	if (!radioElement) return;

	for(var i=0; i<radioElement.length; i++){
		if(radioElement[i].value==selectedValue)
			radioElement[i].checked=true;
	}
}

// fonction qui retourne un element s il existe, sinon retourne un element dummy qui n est jamais ecrit dans la page
// mais qui permet de faire fonctionner le js meme si l element cherche n existe pas
function getElementByIdIfExists(id){
	if (document.getElementById(id)){
		return document.getElementById(id);
	} else {
		// creation d un element dummy s il n existe pas
		if (!dummyElement)
			dummyElement = document.createElement('dummy_json_rpc');
		return dummyElement;
	}
}

