Source: traccia-lib.js

/* 
© 1980 - 2016 Copyright by Traccia - hi tech for life. All rights reserved.
libreria jQuery per Apex
realizzata da: Simone Bruno
data creazione: 15/01/2014
comando per generare la documentazione: 
~/jsdoc/jsdoc ~/Desktop/"progetti Traccia"/traccia-lib/traccia-lib.js ~/Desktop/"progetti Traccia"/traccia-lib/README.md -t ~/docstrap/template -c ~/docstrap/template/jsdoc.conf.json -d  ~/Desktop/"progetti Traccia"/traccia-lib/doc/
*/


/*************** utility *********************/

	/**	restituisce un numero decimale, partendo dal valore dell'elemento, convertendo la virgole in punti 
		@param {string} id - id dell'elemento da convertire
	*/
	function getFloatFromValId(id) {
		return $v(id) == '' ? 0 : parseFloat($v(id).replace(',','.'));  
	}

	/**	restituisce un numero decimale, partendo dal testo dell'elemento, convertendo la virgole in punti 
		@param {string} id - id dell'elemento da convertire
	*/
	function getFloatFromTextId(id) {
		return $('#'+id).text() == '' ? 0 : parseFloat($('#'+id).text().replace(',','.'));  
	}

	/**	restituisce un numero decimale, partendo dal testo dell'elemento, convertendo la virgole in punti 
		@param {element} obj - elemento
	*/
	function getFloatFromTextObj(obj) {
		return $(obj).text() == '' ? 0 : parseFloat($(obj).text().replace(',','.'));  
	}

	/**	pads left
		@param {string} padString - stringa da riempire
		@param {integer} length - lunghezza desiderata
	*/
	String.prototype.lpad = function(padString, length) {
	  var str = this;
	  while (str.length < length)
	      str = padString + str;
	  return str;
	}

	/**	pads right
		@param {string} padString - stringa da riempire
		@param {integer} length - lunghezza desiderata
	*/	
	String.prototype.rpad = function(padString, length) {
		var str = this;
	    while (str.length < length)
	        str = str + padString;
	    return str;
	}

	/**	trimming space from both side of the string	*/
	String.prototype.trim = function() {
		return this.replace(/^\s+|\s+$/g,"");
	}

	/**	trimming space from left side of the string	*/
	String.prototype.ltrim = function() {
		return this.replace(/^\s+/,"");
	}

	/**	trimming space from right side of the string */
	String.prototype.rtrim = function() {
		return this.replace(/\s+$/,"");
	}

/*************** utility *********************/


/*************** navigazione *********************/

	/**	vai alla pagina passando i valori 
		@param {string} pagina - numero di pagina chiamata
		@param {string} parametri - elenco di item da settare nella pagina chiamata, separati da virgola
		@param {string} valori - valori degli item da settare nella pagina chiamata, separati da virgola. Attenzione: devono avere lo stesso ordine dei parametri
	*/
	function goTo(pagina,parametri,valori) {
		//var parametri=parametri.split("|");
		//var valori=valori.split("|");
		var url='f?p=&APP_ID.:'+pagina+':&SESSION.::NO:'+pagina+':'+parametri+':'+valori;
		window.location.href=url;
	}	

	/**	apre un Popup
		@param {string} url - url pagina chiamata
		@param {integer} width - larghezza popup
		@param {integer} height - altezza popup
	*/
	function Popup(url,width,height) {
		w = open(url,"winLov","Scrollbars=1,resizable=0,width="+width+",height="+height);
		if (w.opener == null)
		w.opener = self;
		w.focus();
	}

	/** impedisce la navigazione di default di un link */
	function noNavigare(event) {
	   event.preventDefault();
	}    

/*************** navigazione *********************/


/*************** interfaccia *********************/

	/**	apre un div a fisarmonica contenente un iframe ed effettua il toggle dei pulsanti di apertura/chiusura con id=btnApri/btnChiudi_"id del div da contenitore"
		@param {string} div - id del div contenitore
		@param {string} url - url della pagina da caricare
	*/
	function apri(div,url) {
		if (url!=null) {
		    $('#'+div).html('<iframe src="'+url+'" style="border:none;width:100%;height:350px;" frameborder="0" framespacing="0" marginheight="0" marginwidth="0"></iframe>');
	 	}
		$('#'+div).show('slow');
		$('#btnApri'+div).hide();
		$('#btnChiudi'+div).show();
	}

	/**	chiude il div a fisarmonica contenente un iframe ed effettua il toggle dei pulsanti di apertura/chiusura con id=btnApri/btnChiudi_"id del div da contenitore"
		@param {string} div - id del div contenitore
	*/	
	function chiudi(div) {
		$('#'+div).hide('slow');
		$('#btnApri'+div).show();
		$('#btnChiudi'+div).hide();
	}

	/**	intercetta i click sulle voci di menù non linkabili e ne espande/chiude il contenuto */
	function apriEChiudiMenu() {
		idPadre = $("#menu-principale .clicked").parent().attr("id");
		classPadre = $("#"+idPadre).attr("class");
		if(classPadre == "closed"){
			$("#"+idPadre).removeClass("closed");
			$("#"+idPadre).addClass("open");
		}
		else if (classPadre == "open"){
			$("#"+idPadre).removeClass("open");
			$("#"+idPadre).addClass("closed");
		}
		else if (classPadre == "last closed"){
			$("#"+idPadre).removeClass("last closed");
			$("#"+idPadre).addClass("last open");
		}
		else if (classPadre == "last open"){
			$("#"+idPadre).removeClass("last open");
			$("#"+idPadre).addClass("last closed");
		}
	}	

	/**	evidenzia tutte le righe di un report se la colonna con classe "search" ha valore uguale a "val"
		@param {string} search - classe della colonna da confrontare
		@param {string} val - valore del rigo da evidenziare
		@param {string} colore - colore evidenziazione ammesso in CSS (red, yellow, cian, orange, ...)
	*/
	function evidenziaRighe(search,val, color) {
		$("."+search).each(function(index,element) {
		  if ($(element).text() == val || $(element).val() == val)
		    $(element).parent().parent().children().css({"background-color":color, "font-weight":"bold"});
		});
	}

	/** mostra avanzamento sottomissione pagina */
	function caricaPagina(){
		$('#wwvFlowForm').submit(function() {
			$('#apex_wait_popup').show();
			$('#apex_wait_overlay').show();
		});
	}

	/** nascondi avanzamento sottomissione pagina */
	function paginaCaricata(){
		$('#apex_wait_popup').hide();
		$('#apex_wait_overlay').hide();
	}

	function apriMenuLaterale() {
		$('#apriMenu').click(function(){
			// se si tratta del menù regione
			if ($('#right').size()>0) {
				$('#right').css('margin-left', '300px');	
				$('#left').show('slow');
			} else {
				$('#uMidCol').removeClass('apex_cols apex_span_12');
				$('#uMidCol').addClass('apex_cols apex_span_9');
				$('#uLeftCol').show('slow');			
			}
			$('#apriMenu').hide();
			$('#chiudiMenu').show();
			setSessionValue('P0_MENU_LATERALE', 'S');
		});
	}
	
	function chiudiMenuLaterale() {
		// funziona sul nuovo tema
		$("h1:contains('Menù principale')").append('<a href="javascript:void(0)" title="Chiudi menù laterale" class="apri-chiudi-menu" id="chiudiMenu"><</a>').css('padding','5px 0 5px 10px');
		$('#chiudiMenu').click(function(){
			// se si tratta del menù regione
			if ($('#right').size()>0) {
				$('#left').hide();
				$('#right').css('margin-left', '30px');
				$('#apriBarra').show();				
			}
			else {
				$('#uLeftCol').hide();
				$('#uMidCol').removeClass('apex_cols apex_span_9');
				$('#uMidCol').addClass('apex_cols apex_span_12');
			}
			$('#apriMenu').show();	
			$('#chiudiMenu').hide();
			setSessionValue('P0_MENU_LATERALE', 'N');
		});
		// chiudi automaticamente il menù laterale se l'utente ha scelto di non vederlo
		if ($v('P0_MENU_LATERALE') == 'N') $('#chiudiMenu').click();
	}

	(function($) {
	   $.fn.fixMe = function() {
	      return this.each(function() {
	         var $this = $(this), $t_fixed;
	         function init() {
	            $this.wrap('<div class="container" />');
	            $t_fixed = $this.clone();
	            $t_fixed.find("tbody").hide().end().css({"top":0, "position":"fixed", "width":"auto", "display":"none", "border":"none" }).insertBefore($this);
	            resizeFixed();
	         }
	         function resizeFixed() {
	            $t_fixed.find("th").each(function(index) {
	            	console.log($this.find("th").eq(index).width());
	               $(this).css("width",$this.find("th").eq(index).width()+"px");
	            });
	         }
	         function scrollFixed() {
	            var offset = $(this).scrollTop(),
	            tableOffsetTop = $this.offset().top,
	            tableOffsetBottom = tableOffsetTop + $this.height() - $this.find("thead").height();
	            if(offset < tableOffsetTop || offset > tableOffsetBottom)
	               $t_fixed.hide();
	            else if(offset >= tableOffsetTop && offset <= tableOffsetBottom && $t_fixed.is(":hidden"))
	               $t_fixed.show();
	           	resizeFixed();
	         }
	         $(window).resize(resizeFixed);
	         $(window).scroll(scrollFixed);
	         init();
	      });
	   };
	})(jQuery);	
	/** blocca in automatico la testata delle tabelle con la classe testatafissa. 
	*/	
	function bloccaTestateTabelle() {
		$(".testatafissa table").fixMe();
	}

/*************** interfaccia *********************/


/*************** form *********************/

	/** imposta lunghezza di 2 caratteri agli elementi con classe: sigla2. 
		@deprecated
	*/ 
	function impostaLunghezzaSigle() {
		$('.sigla2').attr('maxlength',2);
	}

	/**	impedisce l'iserimento di numeri */
	function controlloLettere() {
		if(event.keyCode < 65 || event.keyCode > 122) 
	 		event.preventDefault(); 
		else if(event.which < 65 || event.keyCode > 122) 
			return false;
	}

	/**	impedisce l'iserimento di lettere */
	function controlloSoloNumeri () {
		if(event.keyCode < 42 || event.keyCode > 57) 
			event.preventDefault();
		else if(event.which < 42 || event.which > 57) 
			return false;
	}

	/** popola campi automaticamente. NOTA: Da apex 4.1 è possibile usare un'azione dinamica di tipo pl/sql
		@param {string} idParametro - id dell'item contenente il parametro da passare
		@param {string} idRisultato - id dell'item che conterrà il risultato
		@param {string} processo - processo su richiesta da chiamare
	*/
	function autocompleteForm(idParametro, idRisultato, processo) {
	    var get = new htmldb_Get( null, '&APP_ID.','APPLICATION_PROCESS='+processo,0);    
  		get.add('T_VALUE', $('#'+idParametro).val());
    	gReturn = get.get();  
    	$('#'+idRisultato).val(gReturn);
	}  

	/** Verifica che il campo sia in formato ora hh.mm 
	*/
	function oraValida(obj,avvisi) {
		avvisi = typeof avvisi !== 'undefined' ? avvisi : false;		
		var str = $(obj).val().replace('.','');
		if (str.length > 4 || isNaN(str) || parseInt(str)<0 || parseInt(str)>2400) {
			if(avvisi) alert('Errore: Ora non corretta!');
			$(obj).addClass('errore');
			return false;
		}		
		str = str.lpad('0',4);
		if (parseInt(str.substring(2,4)) > 59) {
			if(avvisi) alert('Errore: Ora non corretta!');
			$(obj).addClass('errore');
			return false;
		}
		$(obj).removeClass('errore');
		return true;
	}

	/** Applica il formato ora hh.mm a tutti gli elementi con classe formatOra
	*/
	function applicaFormatOra() {
		$('.formatOra').each(function (index,element) {
			if (oraValida(element,false)) {
				var str = $(this).val();
				str = str.lpad('0',4);
				var ore = str.substring(0,2);
				var minuti = str.substring(2,4);
				$(element).val(ore+':'+minuti);
			}
		});
	}

	/** Classe formatoOra applicata a una casella di testo => formatta automaticamento il campo in formato ora hh.mm 
	*/
	function formatOra() {
		$('.formatOra').change(function(){
		if (oraValida(this,true)) {
			var str = $(this).val();
			str = str.lpad('0',4);
			var ore = str.substring(0,2);
			var minuti = str.substring(2,4);
			$(this).val(ore+':'+minuti);
		}
		});
	}

	/** Elimina la formattazione dell'ora per poterla salvare come numerico 
	*/
	function eliminaFormatOra() {
		$('.formatOra').each(function (index,element) {
			$(element).val(element.value.replace(':',''));
		});
	}	

	/** Applica il formato ora hh(n).mm a tutti gli elementi con classe formatoOreMinuti
	*/
	function applicaFormatOreMinuti() {
		$('.formatOreMinuti').each(function (index,element) {
			var str = $(this).val();
			str = str.lpad('0',4);
			l = str.length;
			var ore = str.substring(0,l-2);
			var minuti = str.substring(l-2);
			$(this).val(ore+':'+minuti);
		});
	}

	/** Classe formatoOreMinuti applicata a una casella di testo => formatta automaticamento il campo in formato ora hh(n):mm 
	*/
	function formatOreMinuti() {
		$('.formatOreMinuti').change(function(){
			var str = $(this).val();
			str = str.lpad('0',4);
			l = str.length;
			var ore = str.substring(0,l-2);
			var minuti = str.substring(l-2);
			$(this).val(ore+':'+minuti);
		});
	}	

	/** Elimina la formattazione ore:minuti per poterla salvare come numerico 
	*/
	function eliminaFormatOreMinuti() {
		$('.formatOreMinuti').each(function (index,element) {
			$(element).val(element.value.replace(':',''));
		});
	}	

	/** Classe valuta applicata a una casella di testo => formatta automaticamente il campo in formato valuta
		Richiede: module:plugin/jshashtable-2.1.js, plugin/jquery.numberformatter-1.2.3.js	
	*/
	function formatValuta() {
	    $('.valuta').change(function(){
	        $(this).parseNumber({format:"#,##0.00", locale:"de"});
	        $(this).formatNumber({format:"#,##0.00", locale:"de"});
	    });		
	}

	/** Imposta il valore dell'item nella pagina e in session 
		@param {string} idItem - id dell'item da settare
		@param {string} valore - valore da assegnare
	*/
	function setSessionValue(idItem, valore) {
		var get = new htmldb_Get( null, APP_ID,'APPLICATION_PROCESS=dummy', 0);
	  	// setta valore nella pagina
	  	$x_Value(idItem, valore);
	  	// setta valore in sessione
	  	get.add(idItem,valore);
	  	gReturn = get.get();
  		get = null;
	}
/*************** form *********************/


/*************** plugin *********************/

	/** Converte il contenuto di item o elementi testuali (in base al tipo passato) in codici a barre code39.
		Richiede: module:plugin/jquery-barcode.min.js	
		@param {string} classe - id dell'item contenente il parametro da passare
		@param {string} tipo - T: Testo per elementi testuali (es. div, span, ...), V: Valore per elementi di form (testo, liste di selezione, ...)
	*/
	function creaCodiciABarre(classe,tipo) {
		// impostazioni
		var btype = 'code39';
		var renderer = 'css';  
		var quietZone = false;

		var settings = {
			output:renderer,
			bgColor: '#FFFFFF',
			color: '#000000',
			barWidth: 3,
			barHeight: 100
		};	

		$('.'+classe).each(function (index,element) {
			if (tipo == 'T') 
		  		$(element).barcode($(element).text(), btype, settings);
		  	else if (tipo == 'V') 
		  		$(element).barcode($v(element.id), btype, settings);
		  	else 
		  		return;
		});	
	}

	/** aggiunge in automatico un pulsante per tornare in testa alla pagina.
		Richiede: plugin/jquery.scrollTo.min.js, css/custom_apex.css, css/images/scrollTop.png
		@param {integer} altezzaLimite - altezza in pixel, oltre la quale apparirà il pulsante Torna Su		
	*/	
	function creaTornaSu(altezzaLimite) {
		$("body").prepend( '<div id="scrollTop" style="display: block;"><a href="#top"></a></div>' );
		$(window).scroll( function() {
			var position=$("#scrollTop").position();
			if(position.top<altezzaLimite){
				$("#scrollTop").fadeOut(600);
			} else {
				$("#scrollTop").fadeIn(600);
			}
		});
		$("#scrollTop").hide().click(function(){$.scrollTo(0,800);});	
	}

/*************** plugin *********************/

/*************** esegui al caricamento della pagina *********************/
$(function() {
  formatOra();
  formatOreMinuti();
  formatValuta();
  paginaCaricata();
  caricaPagina();
  creaTornaSu(1000);
  chiudiMenuLaterale();
  apriMenuLaterale();
  bloccaTestateTabelle();
});
/*************** esegui al caricamento della pagina *********************/
DocStrap Copyright © 2012-2013 The contributors to the JSDoc3 and DocStrap projects.
Documentation generated by JSDoc 3.2.2 on Mon May 23 2016 13:27:47 GMT+0200 (CEST) using the DocStrap template.