/**
* JS per a la gestió dels elements i visualització de les planes
* de test de l'applet... 
* author: albciff
**/
$( document ).ready(function() {

    // d'inici mostrem el modal de carrega de l'applet
	var modalLoading = $('#carregaApplet').modal({ backdrop : 'static' , keyboard : false});
	modalLoading.modal('show');
	
	// fem un fake per a que sembli que es va carregant...
	var progressBar = $('#barraProgresApplet');
	var steps = 0;
	var timer = setInterval(function(){
		if (steps <= 100) {
			progressBar.width(steps + "%");
			progressBar.attr('aria-valuenow',steps);
			steps++;
		} else {
			clearInterval(timer);
			// comprovem si encara s'esta mostrant el panell
			if(modalLoading.data('bs.modal').isShown){
				modalLoading.find('.progress').remove();
				modalLoading.find('.modal-title').text("BAD NEWS... :´(");
				var msgErrorLoad = $('<p/>').html("No carrega? Comprova que el navegador no bloqueja els plugins... i recarrega la plana!");
				modalLoading.find('.modal-body').html(msgErrorLoad);
			}
		}
	}, 50);
	
});

// applet alert... encapsula totes les crides als alerts
// el timeout es per problemes amb els callbacks java i les ultimes 
// versions de chrome
var appletAlert = {
	alert : function(msg){ setTimeout(function(){ alert(msg)},200);},
}

// constructor... s'ha d'iniciar només desprès del callback
// per assegurar-nos que s'inicialitza tot correctament
function AppletJS(){
    // propietats
	var applet = document.appletcatcert;
	var modal = $('#carregaApplet');
	
	var executaOperacioAmbModal = function (fn,opMsg){
		modal.find('.modal-title').text(opMsg);
		var ajax_load = $('<center><img src="../images/ajax-loader.gif"/></center>');
		modal.find('.modal-body').html(ajax_load);
		modal.modal('show');
		
		// cridem la signatura amb retard pq no es fregeixi el navegador i ens
		// mostri el modal... fake modal
		setTimeout(function(){ 
			// excutem
			fn();
			// amaguem el modal
			modal.modal('hide');
		},300);
		
	};
	
	var invokeAppletMethodWithoutParams = function (method){
		try{
			//var extraArgs = Array.prototype.slice.call(arguments,1);
			// no podem fer un .apply pq amb explorer no tracta els metodes de l'applet
			// com a instancies de Function... :( aleshores de moment ens hem de conformar
			// en invocar de forma comuna només les crides sense parametres
			applet[method]();
		}catch(e){
			applet[1][method]();
		}
	};
	
	// metodes *********************** // 
	this.setParameter = function(name,value){
		try{
			applet.set(name,value);
		}catch(e){
			applet[1].set(name,value);
		}
	};
	
	this.signa = function (alias) {
		executaOperacioAmbModal(function(){
			try{
				alias ? applet.signFromJS(alias) : applet.signFromJS();
			}catch(e){
				alias ? applet[1].signFromJS(alias) : applet[1].signFromJS();					
			}
		}, "Applet Signing... :-P");
	};
	
	this.obreSeleccioFitxer = function(){
		invokeAppletMethodWithoutParams('openFileDialog');
	};
	
	this.obreSeleccioCarpeta = function(){
		invokeAppletMethodWithoutParams('openFolderDialog');
	};
	
	this.exportaCertificat = function (alias){
		executaOperacioAmbModal(function(){
			try{
				alias ? applet.exportCertFromJS(alias) : applet.exportCertFromJS();
			}catch(e){
				alias ? applet[1].exportCertFromJS(alias) : applet[1].exportCertFromJS();
			}
		}, "Applet exporting certificate... :-)");
	};
	
	this.exportaCertificatSignant = function (){
		invokeAppletMethodWithoutParams('getSignCertificate');
	};
	
	// metodes *********************** //
}