/**
* Indicatore di caricamento dei dei messaggi in lingua relativi alla validazione dell'IBAN.
* Vedi template inputText.xsl
*/
var ibanSetLanguageLoaded=0;
/**
* Per nascondere o mostrare un elemento html identificato tramite il suo id
*/
function hideShowElemById(elemId){
var elem = document.getElementById(elemId);
if(elem){
var hide = (elem.style.display=='none');
if (hide){
elem.style.display = '';
} else {
elem.style.display = 'none';
}
}
}
/**
* Per aggiungere o eliminare una classe da un elemento html
* @param 'cls' elementi html sui quali applicare l'add/remove della classe
* @param 'elem' classe di cui fare l'add/remove
*
* hasClass(cls,elem): ritorna true o false a seconda se all'elemento html 'elem' è associata o meno la classe 'cls'
* addClass(cls,elem): associa all'elemento html 'elem' la classe 'cls'
* removeClass(cls,elem): rimuove dall'elemento html 'elem' la classe 'cls'
*/
function hasClass(cls,elem) {
return elem.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
}
function addClass(cls,elem) {
elem.className = elem.className+' '+cls;
}
function removeClass(cls,elem) {
var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
elem.className=elem.className.replace(reg,' ');
}
/**
* Sostituisce una classe dell'elemento html con la corrispontente classe di switch.
* Es. mio link diventa mio link
* e viceversa, dove miaclasse e miaclasse-switch solitamente definiscono comportamenti contrapposti
*
* @param 'elemIdList' lista degli elementi html sui quali applicare lo switch
* @param 'elemClassList' lista delle classi da switch-are
*/
function switchClass(elemIdList, elemClassList) {
var arrElemClass = new Array();
var arrElemId = new Array();
var index = 0;
var elemId;
var elemClass;
var elem = new Array();
arrElemClass= elemClassList.split(',');
if (elemIdList != '') {
arrElemId= elemIdList.split(',');
for (var j=0;jfirstElem){
showElement(elements[prevButton]);
if(useMarker){
showElement(elements[prevButton+1]);
}
} else {
hideElement(elements[prevButton]);
if(useMarker){
hideElement(elements[prevButton+1]);
}
}
if(currElem>=lastElem-numVis+1){
hideElement(elements[nextButton]);
if(useMarker){
hideElement(elements[nextButton-1]);
}
} else {
showElement(elements[nextButton]);
if(useMarker){
showElement(elements[nextButton-1]);
}
}
//si nascondono i nodi fuori dall'intervallo di visualizzazione
for(var i=firstElem;i<=lastElem;i++){
if(i=currElem+numVis){
hideElement(elements[i]);
} else {
showElement(elements[i]);
}
}
}
/*
* Funzione che nasconde un elemento del DOM applicando la classe hiddenElem
*/
function hideElement(element){
if(element.className.indexOf('hiddenElem')<0){
if(element.className==''){
element.className = 'hiddenElem';
} else {
element.className = element.className + ' hiddenElem';
}
}
}
/*
* Funzione che ripristina la visualizzazione un elemento del DOM rimuovendo la classe hiddenElem
*/
function showElement(element){
if(element.className.indexOf('hiddenElem')>=0){
element.className = element.className.replace('hiddenElem',"");
}
}
/**
* Gestione della visualizzazione della gif animata in corrispondenza dell'onChange di una select
*/
function reloadForm(form) {
document.getElementById(form.id + "_loading").style.display='block';
$('#' + form.id).submit();
}
function reloadFormWithRefresh(form, id) {
document.getElementById(form.id + "_loading").style.display='block';
var el = document.createElement("input");
el.type = "hidden";
el.name = "_fw_refresh-form.x";
el.value = id;
form.appendChild(el);
$('#' + form.id).submit();
}
/**
* Gestione del caricamento di un campo di input di tipo select con id cmbName con i dati recuperati dalla look up indicata in vUrl
*/
var CMB_NAME_HIDDEN_FIELD = '#*HIDDENfIELD*#';
function loadCombo(vUrl, cmbName){
var nameCmb = document.getElementById(CMB_NAME_HIDDEN_FIELD);
if(!nameCmb){
nameCmb = document.createElement('input');
nameCmb.setAttribute('id', CMB_NAME_HIDDEN_FIELD);
nameCmb.setAttribute('type', 'hidden');
document.forms[0].appendChild(nameCmb);
}
nameCmb.value=cmbName;
var url = vUrl + "&tmp=" + Math.random();
//url può essere modificato da sovrascrivendo questa funzione (portale)
url = new Kion().getUrl(url, nameCmb);
var formloading="#"+jQuery(nameCmb.form).attr("id")+"_loading";
var dataType="json";
var targetObj = document.getElementById(cmbName);
var destType=targetObj.tagName;
if("SELECT"!=destType.toUpperCase()) {
dataType="text";
}
jQuery(formloading).show();
jQuery.ajax({
url: url,
success: function( data ) {
jQuery(formloading).hide();
if("SELECT"==destType.toUpperCase()) {
//rimuove le options
var comboToLoad=jQuery(targetObj);
jQuery("#"+cmbName+" option[value!='']").remove().end();
jQuery.map( data, function( item ) {
var o = new Option(item.des, item.id);
comboToLoad.append(o);
return {
label: item.des,
value: item.id,
option: o
}
}
)
} else if("INPUT"==destType.toUpperCase() || "TEXTAREA"==destType.toUpperCase()) {
targetObj.value=data;
} else {
targetObj.innerHTML = data;
}
},
dataType: dataType,
error: function (jqXHR, textStatus, errorThrown) {
jQuery(formloading).hide();
alert(textStatus + '_'+errorThrown);
}
});
}
/**
* Gestione dei campi nascosti alternativi
*/
var DISABLE_ELEMENT=1;
var ENABLE_ELEMENT=2;
function hideShowElementsById() {
var elem = document.getElementsByTagName('*');
var inputFields, selectFields;
for ( var i = 0; i < elem.length; i++) {
var idAttr = elem[i].getAttribute('id');
if ((idAttr != null) && (typeof idAttr == 'string')) {
if (idAttr.substring(0, 5) == 'hwojs') {
elem[i].style.display = "inline";
inputFields = elem[i].getElementsByTagName('input');
selectFields = elem[i].getElementsByTagName('select');
changeDisabledAttr(inputFields, ENABLE_ELEMENT);
changeDisabledAttr(selectFields, ENABLE_ELEMENT);
}
if (idAttr.substring(0, 4) == 'hwjs') {
elem[i].style.display = 'none';
inputFields = elem[i].getElementsByTagName('input');
changeDisabledAttr(inputFields, DISABLE_ELEMENT);
}
}
}
}
function changeDisabledAttr(elements, operation){
var disabled = (operation==DISABLE_ELEMENT);
for(var j=0;j 0) {
//alert('BBAN:'+bban+', '+bban.length)
msg = BBANChk(bban);
//alert(msg);
error = (msg!='OK');
}
if (!error && iban.length > 0) {
//alert('IBAN:'+iban+', '+iban.length)
msg = IBANChk(iban);
//alert(msg);
error = (msg!='OK');
}
if (error) alert(msg);
if (msg!='OK') return false;
else return true;
}
/* prelevati da chkIBAN.js*/
// Modulo 97 for huge numbers given as digit strings.
function mod97(digit_string)
{
var m = 0;
for (var i = 0; i < digit_string.length; ++i)
m = (m * 10 + parseInt(digit_string.charAt(i))) % 97;
return m;
}
// Convert a capital letter into digits: A -> 10 ... Z -> 35 (ISO 13616).
function capital2digits(ch) {
var capitals = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for (var i = 0; i < capitals.length; ++i)
if (ch == capitals.charAt(i))
break;
return i + 10;
}
// Fill the string with leading zeros until length is reached.
function fill0(s, l)
{
while (s.length < l)
s = "0" + s;
return s;
}
// Calculate 2-digit checksum of an IBAN.
function ChecksumIBAN(iban)
{
var code = iban.substring(0, 2);
var checksum = iban.substring(2, 4);
var bban = iban.substring(4);
// Assemble digit string
var digits = "";
for (var i = 0; i < bban.length; ++i)
{
var ch = bban.charAt(i);
if ("0" <= ch && ch <= "9")
digits += ch;
else
digits += capital2digits(ch);
}
for (var i = 0; i < code.length; ++i)
{
var ch = code.charAt(i);
digits += capital2digits(ch);
}
digits += checksum
// Calculate checksum
checksum = 98 - mod97(digits);
return fill0("" + checksum, 2);
}
function IBANChk(iban){
var bban = iban.substring(4);
var code = iban.substring(0, 2);
var cin = iban.substring(2,4);
var cinCalc = ChecksumIBAN(code + '00' + bban);
//alert('Cin:'+cin+' =? '+ cinCalc);
if (cin==cinCalc) return "OK";
else return ibanMsgWrong;//"Codice IBAN non corretto";
}
/* prelevati da chkBBAN.js */
// Funzione per calcolare la somma di controllo delle posizioni dispari BBAN
dispari = new Array(1,0,5,7,9,13,15,17,19,21,2,4,18,20,11,3,6,8,12,14,16,10,22,25,24,23)
// Argomento: stringa BBAN da verificare
// Restituisce "OK" se il codice è corretto e messaggio di errore se è errato
function BBANChk(b)
{
// Controllo della lunghezza
if (b.length != 23)
{
return(ibanBbanMsgLength); //"Controllo BBAN: La lunghezza \u00E8 diversa da 23 caratteri"
}
// Ciclo tra caratteri della stringa
for (i = 0, s = 0; i < b.length; i++)
{
// Estrae il prossimo carattere c
c = b.charCodeAt(i);
// Calcola il codice k da 0 a 25
if (48 <= c && c <= 57) // per cifra 0-9
{
if (i == 0)
{
return(ibanBbanMsgWrongCin); //"Controllo BBAN: CIN non può contenere cifre"
}
k = c - 48;
}
else if (65 <= c && c <= 90) // per lettera A-Z
{
if (1 <= i && i <= 10)
{
return(ibanBbanMsgWrongAbiCab);//"Controllo BBAN: ABI e CAB non possono contenere lettere"
}
k = c - 65;
}
else
{
return(ibanBbanMsgWrongFormat);//"Controllo BBAN: Sono ammesse solo cifre e lettere maiuscole"
}
// Calcola la somma di controllo s e il codice di controllo CIN
if (i == 0) // codice di controllo
kcin = k;
else if (i % 2 == 0) // posizione pari
s = s + k;
else // posizione dispari
s = s + dispari[k];
}
// Il resto della divisione deve coincidere con il codice di controllo
if (s%26 != kcin)
{
return(ibanBbanMsgWrongCheckCode);//"Controllo BBAN: Il codice di controllo \u00E8 errato"
}
// Fine del controllo
return "OK";
}
/*Funzioni di gestione dell'onchange su inputText*/
function lpad(s,len,c){
c=c || '0';
s=s+'';
while(s.length < len) {
s= c+s;
}
return s;
}
/*funzione che restituisce un array di id dei campi callegati*/
function getReliants(reliantsId){
var arrayReliants = new Array();
arrayReliants = reliantsId.split(';');
return arrayReliants;
}
/*Controllo della data di partenza */
var re = new RegExp("^(\\d{2})/(\\d{2})/(\\d{4})$", "");
var arrMonths = new Array("Gennaio", "Febbraio", "Marzo", "Aprile",
"Maggio", "Giugno", "Luglio", "Agosto",
"Settembre", "Ottobre", "Novembre", "Dicembre");
/*funzione che controlla il formato della data*/
function checkDate(date)
{
var dt = date.match(re);
if (!dt)
{
alert("La data va inserita nel formato gg/mm/aaaa !");
return false ;
}
day = dt[1];
month= dt[2];
year = dt[3];
if (month < 1 || month > 12)
{
alert("Specificare un mese compreso tra 1 e 12 !");
return false;
}
// Determina il numero massimo di giorni nel mese month
// Il calendario in uso è quello Gregoriano (introdotto da Papa Gregorio XIII nel 1582)
// ed ha un ciclo di 400 anni con 97 anni bisestili anziché 100.
// Il 1600 era bisestile, 1700, 1800 e 1900 no, il 2000 lo è, 2100, 2200, 2300 no etc.
if (month == 2) maxDay = (!(year % 4) && ((year % 100) || !(year % 400))) ? 29 : 28;
else maxDay = (month == 4 || month == 6 || month == 9 || month == 11) ? 30 : 31;
if (day < 1 || day > maxDay)
{
alert("Il mese di " + arrMonths[month - 1] + " non ha " + day +
" giorni\nSpecificare un giorno compreso tra 1 e " + maxDay + " !");
return false;
}
return true ;
}
/*funzione che aggiunge dei giorni ad una data*/
function addGiorniDate(el,giorni){
var dataIn=el.value;
gg=dataIn.substr(0,2);
mm=dataIn.substr(3,2);
aa=dataIn.substr(6,4);
var startDate=new Date(aa,mm-1,gg);
startDate.setDate(startDate.getDate()+ parseInt(giorni));
var giorno=startDate.getDate();
var mese=startDate.getMonth()+1;
return lpad(giorno,2)+"/"+lpad(mese,2)+"/"+startDate.getFullYear();
}
/*funzione che aggiunge giorni ai campi data collegati*/
function calcoladate(el,reliantsId)
{
if (!checkDate(el.value))
{
return false;
}
else{
//array che conterrà gli id dei campi collegati con il valore da aggiungere
var arrayReliants = getReliants(reliantsId);
for(var j=0;j (vedi custom.css unipd)
* @param sid
*/
function randomBackgroundImageOnScritta(seed) {
var divScritta = document.getElementById('scritta');
var rules = findMatchingCssRule('^.scritta_bg\\d');
var n = rules.length;
if (n > 0) {
x = seed.charCodeAt(0) % n + 1;
// x=(Math.floor(Math.random()*n));
var divScritta = document.getElementById('scritta');
divScritta.className += ' scritta_bg' + x;
// var ruleScritta = findMatchingCssRule('^#scritta$');
// if (ruleScritta && ruleScritta.length > 0) {
// ruleScritta[0].style.backgroundImage = rules[x].style.backgroundImage;
// }
}
}
/**
* Funzione che data ina regexp ritorna tutte le rules il cui selectorText fa match
* @param regexp
* @returns {Array}
*/
function findMatchingCssRule(regexp) {
var matchedRules = new Array();
var mysheets = document.styleSheets;
var n = 0;
for (var j = 0; j < mysheets.length; j++) {
var rules = mysheets.item(j).cssRules ? mysheets.item(j).cssRules : mysheets.item(j).rules;
for (var i = 0; (rules) && (i < rules.length); i++) {
var selector = rules.item(i).selectorText;
if (selector && selector.match(regexp)) {
matchedRules[n] = rules.item(i);
n++;
}
}
}
return matchedRules;
}
/* data la struttura ad albero a partire dell'id dell'oggetto, carica
* lo stato dei vari nodi dell'albero e compone la visualizzazione conseguente
*
* objectId: id dell'oggetto da espandere
* classToSwitch: radice del nome della classe su cui effettuare lo switch (cambio selettore per aperto/chiuso)
* classAnchorOpen: se vi sono 2 link di apertura/chiusura, rappresenta il nome della classe associata comune
*/
function showTree(objectId,classToSwitch,defaultStatus, classAnchorOpen) {
var xslTempl=document.body.getAttribute('data-xsl');
//carica lo stato dell'albero dal session storage del browser
var openNodes=sessionStorage.getItem(xslTempl+'_'+objectId);
//se non c'è lo stato nel session storage, utilizza lo stato di default (passato dal chiamante)
if(openNodes!=null) {
var rootNodes=$('.rootNode_'+objectId);
for(var i=0;i0) {
jsessionId=';'+reference.substring(reference.indexOf('jsessionid='),reference.indexOf('?'))
}
url=new Kion().getUrl('auth/AggiornaStatoTabClosable.do'+jsessionId+'?'+paramStatus,element);
jQuery.get(url, function( data ) {
var openNodesArray = data.split(",");
processDescendants(elemId,openNodesArray,true,classToSwitch, classAnchorOpen);
});
} else {
url=new Kion().getUrl(reference+'&'+paramStatus+'&FW_CP_AJAX_MODE=1',element);
jQuery.get(url, function( data ) {
var selElemId="#"+elemId;
htmlIn=jQuery(jQuery.parseHTML( data ));
htmlTab=htmlIn.filter('#'+objectId);
if(htmlTab.length>0) {
htmlRows=htmlIn.find(selElemId + ', .son-of-'+ elemId);
jQuery(selElemId).replaceWith(htmlRows);
jQuery(selElemId).data('status-node','O')
//se è stato definita la funzione di callback la chiamo
if(jQuery.CallBackOpenNode) {
jQuery.CallBackOpenNode(objectId)
}
} else {
//se non trova l'oggetto che si aspetta rifa la chiamata
window.location.href=reference;
}
});
}
}
/*
* funzione che verifica se un elemento è contenuto in una lista
*
* openNodesArray: array con i nodi su cui effettuare la ricerca
* idElem: elemento da ricercare
*
* ritorna true se elemento trovaro, false altrimenti
*
*/
function isOpen(openNodesArray,idElem) {
var isOpen=false;
if(openNodesArray) {
for(var j=0;j0){
//se c'è un solo elemento di switch
var chiuso=true;
/*
* se vi sono 2 elementi di switch (uno per la chiusura e uno per l'apertura), si va a verificare quale è visualizzato
*verificando se c'è una classe specifica che rappresenta l'apertura
*/
if(classAnchorOpen) {
//verifico se esiste l'elemento complementare di apertura/chiusura e se questo è di apertura
if(jQuery('.'+classOpener).length>0 && elemSwitch.is('.'+classAnchorOpen)) {
chiuso=false;
}
}
/*
* se il nodo dev'essere aperto e attualmente è chiuso, oppure il nodo dev'essere chiuso ed
* attualmente è aperto, effettua lo switch
*
*/
if(open && chiuso || !open && !chiuso){
switchClass2(classOpener,classOpenerSwitch);
}
} else {
/*
* non c'è nessun elemento complementare di apertura/chiusura nascosto: è sicuramente aperto
* se è da chiudere si effettua lo switch
*/
if(!open){
switchClass2(classOpener,classOpenerSwitch);
}
}
/*
* per ogni elemento figlio si verifica se è da mostrare:
* se nodo il padre è aperto e il flag di visualizzazione è attivo si mostra
* il nodo figlio, altrimenti lo si nasconde e si interrompe la ricorsione
*/
for(var i=0;imio link diventa mio link
* e viceversa, dove miaclasse e miaclasse-switch solitamente definiscono comportamenti contrapposti
*
* @param class1 classe origine
* @param class2 classe che subentra
*/
function switchClass2(class1, class2){
var elemClasse1=jQuery('.'+class1)
var elemClasse2=jQuery('.'+class2)
if(elemClasse1.length>0) {
//alert('switch classe ' + classe + ' diventa ' + classSwitch)
elemClasse1.addClass(class2);
elemClasse1.removeClass(class1);
}
if(elemClasse2.length>0) {
elemClasse2.addClass(class1);
elemClasse2.removeClass(class2);
//alert('switch classe ' + classSwitch + ' diventa ' + classe)
}
}
/*
* Crea un widget autocomplete ui "combobox" wrappando il select idenditificato da id
*/
function loadAutoComplete(id, isDisabled, emptyVal, lookupToLoad, numChar ) {
(function( jQuery ) {
jQuery.widget( "custom.combobox", {
options: {
emptyVal: emptyVal,
isDisabled: isDisabled,
lookupToLoad: lookupToLoad
},
_create: function() {
this.wrapper = jQuery( "" )
.addClass( "custom-combobox" )
.insertAfter( this.element );
this.element.hide();
this._createAutocomplete();
this._createShowAllButton();
},
_createAutocomplete: function() {
var selected = this.element.children( ":selected" ), value;
if(selected.val()==this.options.emptyVal|| selected.length==0){
value=selectionAutocompleteMsgInnerHint;
} else {
value=selected.text();
}
this.input = jQuery( "" )
.appendTo( this.wrapper )
.val( value )
.attr( "title", "" )
.width( getAutocompleteWidth(value))
.addClass( "custom-combobox-input ui-widget ui-widget-content ui-state-default ui-corner-left" )
.autocomplete({
delay: 200,
minLength: 0,
source: jQuery.proxy( this, "_source" )
}).bind('focus', function() {
this.select();
}).mouseup(function(e){
e.preventDefault();
}).attr("title",value);
if(this.options.isDisabled) {
this.input.prop('disabled', true);
}
this._on( this.input, {
autocompleteselect: function( event, ui ) {
ui.item.option.selected = true;
this._trigger( "select", event, {
item: ui.item.option
});
//chiamata evento standard del select (per loadCombo)
jQuery("#" + this.bindings[0].id).change();
//adatta la larghezza del controllo al testo selezionato
this.input.width(getAutocompleteWidth(ui.item.option.text,this.input.css("font-size")));
//setta tooltip
this.input.attr("title",ui.item.option.text);
},
autocompletechange: "_removeIfInvalid"
});
},
_createShowAllButton: function() {
var input = this.input,
options=this.options,
wasOpen = false;
jQuery( "" )
.attr( "tabIndex", -1 )
.attr( "id", this.options.id+"_open_all")
.tooltip()
.appendTo( this.wrapper )
.button({
icons: {
primary: "ui-icon-triangle-1-s"
},
text: false
})
.removeClass( "ui-corner-all" )
.addClass( "custom-combobox-toggle ui-corner-right" )
.mousedown(function() {
if(!options.isDisabled){
wasOpen = input.autocomplete( "widget" ).is( ":visible" );
}
})
.click(function() {
if(!options.isDisabled){
input.focus();
// Close if already visible
if ( wasOpen ) {
return;
}
// Pass empty string as value to search for, displaying all results
input.autocomplete( "search", "" );
}
});
},
_source: function( request, response ) {
if(this.options.lookupToLoad!='' && numChar>0) {
//se c'è il parametro lookupToLoad, la select viene popolata dinamicamente con il risultato della chiamata remota ajax
var select=this;
var formloading="#"+select.element.get(0).form.id+"_loading";
var showAllButton=jQuery("#" + this.options.id +"_open_all");
if(request.term.length>numChar-1) {
select.element.children( "option" ).remove().end();
jQuery(formloading).show();
jQuery.ajax({
url: this.options.lookupToLoad+request.term,
async: false,
success: function( data ) {
jQuery(formloading).hide();
response( jQuery.map( data, function( item ) {
var o = new Option(item.label, item.value);
select.element.append(o);
return {
label: item.label,
value: item.label,
option: o
}
}
));
if(select.element.children( "option" ).length==0){
var valNotFound= request.term + " " + selectionAutocompleteMsgInnerHint;
var o = new Option(valNotFound, "");
select.element.append(o);
response( select.element.children( "option" ).map(function() {
if(emptyVal) {
return {
label: request.term + " " + selectionAutocompleteMsgNoMatch,
value: emptyVal,
option: o
}
}
}));
showAllButton.attr( "title", "");
} else {
showAllButton.attr( "title", selectionAutocompleteMsgAllItems );
}
},
dataType: "json",
error: function (jqXHR, textStatus, errorThrown) {
jQuery(formloading).hide();
alert(textStatus + '_'+errorThrown)
}
});
} else {
response( this.element.children( "option" ).map(function() {
var text = jQuery( this ).text();
return {
label: text,
value: text,
option: this
};
}) );
}
} else {
//se non c'è lookup remota, viene fatta la ricerca nelle option della select
var matcher = new RegExp( jQuery.ui.autocomplete.escapeRegex(request.term), "i" );
response( this.element.children( "option" ).map(function() {
var text = jQuery( this ).text();
if ( this.value && ( !request.term || matcher.test(text) ) )
return {
label: text,
value: text,
option: this
};
}) );
jQuery("#" + this.options.id+"_open_all").attr( "title", selectionAutocompleteMsgAllItems );
}
},
_removeIfInvalid: function( event, ui ) {
// Selected an item, nothing to do
if ( ui.item ) {
return;
}
// Search for a match (case-insensitive)
var value = this.input.val(),
valueLowerCase = value.toLowerCase(),
valid = false;
this.element.children( "option" ).each(function() {
if ( jQuery( this ).text().toLowerCase() === valueLowerCase ) {
this.selected = valid = true;
return false;
}
});
// Found a match, scateno l'evento change della selection
if ( valid ) {
jQuery("#" + this.bindings[0].id).change();
return;
}
// Remove invalid value
var selected = this.element.children( ":selected" ), // elemento correntemente selezionato
oldVal = selected.text(), //testo dell'elemento correntemente selezionato
val=oldVal;
if(value!=''){
//immesso valore errato
//se è selezionato il valore vuoto metto l'hint di ricerca come testo
if(selected.val()==this.options.emptyVal){
val=selectionAutocompleteMsgInnerHint;
}
//messaggio di errore all'utente
alert(value + " " + selectionAutocompleteMsgNoMatch);
this.input
.val( val )
.attr( "title", value + " " + selectionAutocompleteMsgNoMatch );
} else {
//è stato sbiancato il campo:
//cerco l'elemento vuoto
var emptyOption=this.element.children( "[value='" + this.options.emptyVal +"']");
//se esiste l'elemento vuoto lo setto selezionato
if(emptyOption.length>0) {
emptyOption.attr('selected','selected');
val=selectionAutocompleteMsgInnerHint;
} else {
selected.removeAttr("selected");
this.input.attr("required","required");
this.input.attr("placeholder",selectionAutocompleteMsgInnerHint);
val="";
}
this.input
.val( val )
.attr( "title", val);
}
this.input.data( "ui-autocomplete" ).term = "";
this.input.width( getAutocompleteWidth(val))
},
_destroy: function() {
this.wrapper.remove();
this.element.show();
}
});
})( jQuery );
jQuery(function() {
jQuery( "#"+id ).combobox({id: id, emptyVal: emptyVal, isDisabled: isDisabled, lookupToLoad:lookupToLoad });
if(jQuery( "#"+id ).children( "option" ).length>1) {
jQuery("#" + id+"_open_all").attr( "title", selectionAutocompleteMsgAllItems );
}
})
}
/*
* funzione che calcola la larghezza del contollo autocomplete con limite massimo
*/
function getAutocompleteWidth(text,font) {
var _width=text.width(font);
if(_width>425){
_width=425;
}
if(text.length>0 && _width<100){
_width=100;
}
if(text.length==0) {
_width=selectionAutocompleteMsgInnerHint.width(font)
}
return _width;
}
/*
* calcola larghezza di un testo su schermo con un particolare font
*/
String.prototype.width = function(font) {
var f = font || '1em arial',
o = $('