MediaWiki:Gadget-LiveRC 1x.js/InserisciTemplate.js

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

Questa pagina definisce alcuni parametri di aspetto e comportamento generale di tutte le pagine. Per personalizzarli vedi Aiuto:Stile utente.


Nota: dopo aver salvato è necessario pulire la cache del proprio browser per vedere i cambiamenti (per le pagine globali è comunque necessario attendere qualche minuto). Per Mozilla / Firefox / Safari: fare clic su Ricarica tenendo premuto il tasto delle maiuscole, oppure premere Ctrl-F5 o Ctrl-R (Command-R su Mac); per Chrome: premere Ctrl-Shift-R (Command-Shift-R su un Mac); per Konqueror: premere il pulsante Ricarica o il tasto F5; per Opera può essere necessario svuotare completamente la cache dal menù Strumenti → Preferenze; per Internet Explorer: mantenere premuto il tasto Ctrl mentre si preme il pulsante Aggiorna o premere Ctrl-F5.

/* 
 * Estensione di LiveRC che permette di inserire i template di avviso in cima alle voci
 *
 * Auteur : [[:it:User:Jalo]] [[:it:User:Rotpunkt]] [[:fr:User:Dr Brains]]
 *
 * This script contains functions (InserisciTemplate_showDialog, InserisciTemplate_dumpTemplate and InserisciTemplate_buildInputEl)
 * and formats (all template definitions) modified from:
 * http://it.wikipedia.org/w/index.php?title=MediaWiki:Gadget-tb-base.js&oldid=66478020
 * http://it.wikipedia.org/w/index.php?title=MediaWiki:Gadget-tb-* (for the templates)
 * author Rotpunkt (http://it.wikipedia.org/wiki/Utente:Rotpunkt)
 */
/* jshint maxerr: 10000, curly: true */

LiveRC_Config.InstalledLiveRCExtensions.push( "InserisciTemplate" );

importStylesheetURI( '//it.wikipedia.org/w/index.php?title=MediaWiki:Gadget-LiveRC 1x.js/InserisciTemplate.css&action=raw&ctype=text/css' );

var templateArguments = {
	A: [
		"", "alimentazione", "animazione", "anime e manga", "antropologia", "antroponimi", "araldica", "archeologia", "associazioni", "astronautica", "aviazione", "cinema", "cultura", "danza", "design", "diritto", "ecologia", "economia", "editoria", "energia", "fantascienza", "fantasy", "filatelia", "filosofia",
		"fotografia", "fumetti", "geografia", "giochi", "giornalismo", "guerra", "informatica", "istruzione", "lavoro", "LGBT", "linguistica", "marina", "mitologia", "moda", "musica", "natura", "nautica", "numismatica", "onorificenze", "paleontologia", "politica", "pornografia", "professioni", "psicologia",
		"scautismo", "scienza", "sessualità", "società", "sociologia", "sport", "storia", "trasporti", "turismo", "urbanistica", "voci comuni"
	],
	C: [
		"", "alimentazione", "animazione", "anime e manga", "antropologia", "antroponimi", "araldica", "archeologia", "architettura", "arte", "associazioni", "biografie", "cinema", "cronologia", "cultura", "diritto", "ecologia", "editoria", "energia", "enologia", "fantascienza", "filatelia", "filosofia",
		"fotografia", "fumetti", "geografia", "giochi", "guerra", "immaginario", "informatica", "lavoro", "leggende", "letteratura", "LGBT", "linguistica", "medicina", "metrologia", "mezzi di trasporto", "mitologia", "moda", "musica", "natura", "neuroscienze", "numismatica", "paleontologia", "patrimoni dell'umanità",
		"educazione", "pesca", "politica", "pornografia", "professioni", "psicologia", "religione", "scautismo", "scienza", "sessualità", "società", "sociologia", "sport", "storia", "teatro", "tecnologia", "trasporti", "turismo", "urbanistica", "vessillologia", "voci comuni"
	],
	E: [
		"", "alimentazione", "animazione", "antropologia", "antroponimi", "araldica", "archeologia", "architettura", "aree naturali protette", "astronomia", "aviazione", "biografie", "biologia", "botanica", "chimica", "cinema", "cucina", "cultura", "danza", "diritto", "ecologia", "economia", "editoria",
		"elettronica", "enologia", "fantascienza", "filatelia", "filosofia", "fisica", "fotografia", "fumetti", "geografia", "geologia", "giochi", "giornalismo", "guerra", "informatica", "ingegneria", "istruzione", "letteratura", "LGBT", "lingue", "linguistica", "marina", "meccanica", "medicina", "mineralogia",
		"mitologia", "moda", "musei", "musica", "natura", "neopaganesimo", "neuroscienze", "nobiltà", "numismatica", "paranormale", "pesca", "politica", "pornografia", "professioni", "psicologia", "religione", "scautismo", "scienza", "sessualità", "società", "sociologia", "spettacolo", "sport", "storia",
		"teatro", "tecnologia", "template", "trasporti", "turismo", "università", "urbanistica", "zoologia"
	],
	F: [
		"", "araldica", "archeologia", "arte", "cronologia", "cultura", "geografia", "giochi", "musica", "natura", "nobiltà", "onomastica", "patrimoni dell'umanità", "scienza", "società", "sport", "storia", "tecnologia", "trasporti", "voci comuni"
	],
	O: [
		"", "aviazione", "alimentazione", "animazione", "antropologia", "antroponimi", "araldica", "archeologia", "architettura", "arte", "biografie", "cinema", "cultura", "danza", "diritto", "economia", "editoria", "filatelia", "filosofia", "fumetti", "geografia", "geologia", "giochi", "guerra", "istruzione",
		"letteratura", "linguistica", "marina", "medicina", "mitologia", "musica", "natura", "neuroscienze", "numismatica", "paleontologia", "politica", "professioni", "pseudoscienza", "psicologia", "religione", "scautismo", "scienza", "scienze sociali", "scienze umanistiche", "sessualità", "società",
		"sport", "storia", "storia di famiglia", "teatro", "tecnologia", "trasporti", "turismo", "urbanistica", "valute", "vessillologia", "voci comuni"
	],
	P: [
		"", "alimentazione", "animazione", "antropologia", "antroponimi", "archeologia", "architettura", "associazioni", "astronautica", "aziende", "biografie", "botanica", "cinema", "cucina", "cultura", "design", "diritto", "ecologia", "economia", "energia", "fantasy", "filatelia", "filosofia", "fotografia",
		"fumetti", "geografia", "giochi", "Internet", "istruzione", "LGBT", "linguistica", "marina", "mezzi di trasporto", "mitologia", "moda", "montagna", "musica", "natura", "numismatica", "pornografia", "professioni", "psicologia", "radio", "religione", "scautismo", "scienza", "sessualità", "società",
		"sociologia", "storia", "tecnologia", "televisione", "trasporti", "turismo", "urbanistica", "voci comuni"
	],
	S: [
		"", "Africa", "agricoltura", "album musicali", "alimentazione", "alpinismo", "alpinisti", "anfibi", "animazione", "anime e manga", "antica Grecia", "antica Roma", "antropologia", "archeologia", "architetti", "architettura",
		"aree naturali protette", "arte", "associazioni", "astronomia", "attori", "aviazione", "aziende", "beach volley", "biografie", "biologia", "Bisanzio", "botanica", "calciatori", "calcio", "cantanti", "cattolicesimo", "cestisti",
		"chiese", "chimica", "chimica fisica", "ciclismo", "cinema", "città", "collezionismo", "conflitti", "criminalità", "cristianesimo", "cucina", "danza", "design", "diritto", "Disney", "ecologia", "economia", "editoria", "educazione",
		"erotismo", "fantascienza", "fantasy", "Ferrari", "ferrovie", "film", "filologia", "filosofia", "fisica", "fiumi", "fumetti", "geografia", "geologia", "geometria", "giochi", "giornalisti", "gruppi musicali", "guerra", "guerre napoleoniche",
		"Guerre stellari", "hip hop", "industria", "informatica", "ingegneria", "isole", "istituzioni", "istruzione", "letteratura", "LGBT", "linguistica", "logica", "mammiferi", "marina", "mass media", "matematica", "meccanica", "medicina", "metal", "mineralogia",
		"mitologia", "mitologia greca", "mitologia romana", "moda", "montagne", "musica", "musica classica", "musicisti", "numismatica", "numismatici", "nuoto", "pallacanestro", "pallavolo", "paranormale", "patrimoni dell'umanità", "personaggi immaginari", "pesci",
		"piante", "piloti automobilistici", "pittura", "Pokémon", "politica", "politici", "pornografia", "psicologia", "punk", "religione", "rettili", "rock", "santi", "scautismo", "sci", "scienza", "scrittori", "scultura", "seconda guerra mondiale", "singoli discografici",
		"sociologia", "sostanze chimiche", "sport", "sportivi", "stadi", "Star Trek", "storia", "storia antica", "storia contemporanea", "storia medievale", "storia moderna", "teatro", "tecnologia", "telecomunicazioni", "televisione", "Terra di Mezzo", "trasporti",
		"turismo", "uccelli", "urbanistica", "vescovi", "videogiochi", "voci comuni", "wrestling"
	],
	T: [
		"", "alimentazione", "alpinismo", "animali", "animazione", "antropologia", "antroponimi", "araldica", "archeologia", "architettura", "artropodi", "associazioni", "astrologia", "astronautica", "astronomia", "aviazione", "aziende", "biografie", "biologia", "botanica", "chimica", "cinema", "costume",
		"cucina", "cultura", "danza", "design", "diritto", "Disney", "ebraismo", "ecologia", "editoria", "elettronica", "energia", "filatelia", "filosofia", "fisica", "fotografia", "fumetti", "geologia", "giochi", "giornalismo", "grafica", "guerra", "ingegneria", "istruzione", "LGBT", "linguistica", "marina",
		"meccanica", "medicina", "meteorologia", "micologia", "mitologia", "moda", "musei", "musica", "natura", "neopaganesimo", "numismatica", "paleontologia", "pesca", "politica", "pornografia", "professioni", "pseudoscienza", "psicologia", "psicometria", "pubblica amministrazione", "religione", "scautismo",
		"scienza", "scienze umanistiche", "sessualità", "Sicilia", "società", "sociologia", "Spagna", "spettacolo", "sport", "storia", "teatro", "tecnologia", "televisione", "trasporti", "turismo", "urbanistica", "vessillologia", "voci comuni", "zoologia"
	],
	U: [
		"", "anime e manga", "antropologia", "antroponimi", "araldica", "archeologia", "associazioni", "astronomia", "aviazione", "aziende", "biografie", "cinema", "controlli automatici", "cronologia", "cucina", "cultura", "danza", "diritto", "ecologia", "editoria", "fantasy", "filatelia", "filosofia",
		"fumetti", "giochi", "giornalismo", "istruzione", "lavoro", "letteratura", "LGBT", "lingue", "linguistica", "marina", "mitologia", "moda", "musei", "musica", "natura", "numismatica", "paleontologia", "politica", "pornografia", "radio", "religione", "scautismo", "scienza", "sessualità", "società",
		"sociologia", "spettacolo", "sport", "teatro", "tecnologia", "televisione", "template", "trasporti", "turismo", "urbanistica", "voci comuni", "zoologia"
	],
	W: [
		"", "alimentazione", "animazione", "antropologia", "antroponimi", "araldica", "archeologia", "architettura", "arte", "associazioni", "aviazione", "aziende", "biografie", "cinema", "collezionismo", "cultura", "danza", "design", "diritto", "ecologia", "edilizia", "editoria", "fantascienza", "fantasy", "filosofia", "fumetti", "geografia", "giochi", "guerra", "istruzione", "lavoro", "LGBT", "linguistica", "mitologia", "moda", "musei", "musica", "natura", "numismatica", "pesca", "politica", "pornografia", "professioni", "psicologia", "religione", "scautismo", "scienza", "scienze umanistiche", "sessualità", "società", "sociologia", "spettacolo", "sport", "storia", "teatro", "tecnologia", "trasporti", "turismo", "urbanistica", "vessillologia", "voci comuni"
	],
	Categorizzare: [
		"", "alimentazione", "anime e manga", "antroponimi", "araldica", "archeologia", "architettura", "arte", "associazioni", "astrologia", "aviazione", "aziende", "biografie", "cucina", "diritto", "ecologia", "economia", "editoria", "filatelia", "filosofia", "fotografia", "fumetti", "geografia",
		"geologia", "giochi", "guerra", "ingegneria", "istruzione", "letteratura", "LGBT", "linguistica", "marina", "medicina", "mineralogia", "mitologia", "moda", "musica", "numismatica", "politica", "pornografia", "psicologia", "religione", "scautismo", "scienza", "Sicilia", "società", "sport",
		"storia", "teatro", "tecnologia", "televisione", "template", "trasporti"
	],
	Correggere: [
		"", "alimentazione", "animazione", "anime e manga", "antropologia", "araldica", "archeologia", "architettura", "arte", "associazioni", "astronautica", "astronomia", "aviazione", "aziende", "biografie", "biologia", "chimica", "cinema", "criminalità", "cucina", "cultura", "danza", "diritto", "economia",
		"editoria", "energia", "fantasy", "filosofia", "fisica", "fotografia", "fumetti", "geografia", "geologia", "giochi", "giornalismo", "guerra", "immaginario", "informatica", "ingegneria", "istruzione", "lavoro", "letteratura", "LGBT", "lingue", "linguistica", "marina", "matematica", "medicina", "meteorologia",
		"mitologia", "moda", "musica", "natura", "nobiltà", "numismatica", "politica", "pornografia", "professioni", "pseudoscienza", "psicologia", "pubblicità", "radio", "religione", "scautismo", "scienza", "sessualità", "società", "sociologia", "sport", "storia", "storia di famiglia", "teatro", "tecnologia",
		"televisione", "trasporti", "videogiochi", "voci comuni"
	],
	InCorso: [
		"", "astronautica", "catastrofi", "conflitti", "Europa", "fumetti", "informatica", "musica", "politica", "sport", "Stati Uniti d'America", "televisione", "trasporti"
	],
	DaAggiornare: [
		"", "animazione", "astrologia", "aziende", "biografie", "cultura", "diritto", "filatelia", "geografia", "guerra", "ingegneria", "istruzione", "linguistica", "marina", "moda", "montagna", "natura", "numismatica", "psicologia", "scautismo", "scienza", "scienze umanistiche", "servizi pubblici", "società",
		"spettacolo", "sport", "storia", "tecnologia", "template", "trasporti"
	],
	Controlcopy: [
		"", "animazione", "anime e manga", "antropologia", "archeologia", "architettura", "aree naturali protette", "associazioni", "astronomia", "aviazione", "aziende", "biografie", "botanica", "chimica", "cinema", "costume", "cucina", "cultura", "design", "diritto", "ecologia", "economia", "editoria",
		"enologia", "fantascienza", "fantasy", "filatelia", "filosofia", "fisica", "fotografia", "fumetti", "geografia", "geologia", "giochi", "giornalismo", "guerra", "informatica", "ingegneria", "istruzione", "lavoro", "leggende", "letteratura", "LGBT", "linguistica", "marina", "medicina", "meteorologia",
		"mineralogia", "mitologia", "moda", "musica", "natura", "neopaganesimo", "numismatica", "politica", "pornografia", "professioni", "pseudoscienza", "psicologia", "radio", "scautismo", "scienza", "sessualità", "società", "sociologia", "spettacolo", "sport", "storia", "teatro", "tecnologia",
		"televisione", "trasporti", "turismo", "voci comuni", "zoologia"
	],
	Cancellazione: [
		"", "agricoltura", "alimentazione", "animazione", "anime e manga", "antroponimi", "araldica", "archeologia", "architettura", "associazioni", "aziende", "biografie", "cinema", "comunicazione", "criminalità", "cronologia", "cultura", "danza", "design", "diritto", "ecologia", "editoria", "enti pubblici",
		"esoterismo", "fantascienza", "fantasy", "filatelia", "filosofia", "fisica", "fotografia", "fumetti", "geografia", "giornalismo", "guerra", "immaginario", "istruzione", "letteratura", "LGBT", "linguistica", "marina", "mitologia", "moda", "musica", "nautica", "nobiltà", "numismatica", "politica", "pornografia",
		"professioni", "psicologia", "radio", "scautismo", "scienza", "sessualità", "società", "sociologia", "software libero", "solidarietà", "spettacolo", "storia", "teatro", "tecnologia", "televisione", "template", "trasporti", "turismo", "università", "urbanistica", "voci comuni"
	],
	CancellaSubito: [
		"", "1. pagine vuote, di prova", "2. solo frasi offensive", "3. solo lingua straniera", "4. promozionali o CV", "5. pagine doppie", "6. categorie vuote", "7. pagine già cancellate", "8. pagine create per l'inversione", "9. redirect errati", "10. talk e sottopag. di pagine già canc.", "11. immagini doppie ed orfane",
		"12. immagini in evidente copyviol", "13. pagine copiate senza licenza libera", "14. immagini da verificare da tanto", "15. pagine \"Utente:\" di nessuno", "16. pagine già trasferite", "17. sottopag. \"Utente:\" richieste da lui"
	]
};

/* Template list:
 *
 * 'template':   (string)  name of the template to be inserted
 * 'string':     (string)  option label in the template combo box
 * 'where':      (string)  where to insert the template in the page. Accepted values are: top, bottom
 * 'noinclude':  (boolean) whether the template shall be tagged with "noinclude" 
 * 'subst':      (boolean) whether the template shall be "substed"
 * 'parameters': (object)  list of the parameters of the template
 * 'name':       (string)  parameter name shown in the popup dialog
 * 'type':       (string)  type of the argument. Accepted values are: string, select
 * 'value':
 * type==string    (string) Some text (or nothing)
 * type==select    (array)  The list of combo box options
 */

Custom_lstMyTemplate = {};
lstMyTemplate = {
	'A': {
		template: 'A',
		string: 'Aiutare',
		where: 'top',
		noinclude: false,
		subst: false,
		parameters: {
			motivo: {
				name: 'Motivo',
				type: 'string'
			},
			argomento: {
				name: 'Argomento',
				type: 'select',
				value: templateArguments.A
			},
			argomento2: {
				name: 'Argomento2',
				type: 'select',
				value: templateArguments.A
			},
			mese: {
				name: 'Mese',
				type: 'string',
				value: '{{subst:' + 'CURRENTMONTHNAME}} {{subst' + ':CURRENTYEAR}}'
			}
		}
	},
	'C': {
		template: 'C',
		string: 'Controllare',
		where: 'top',
		noinclude: false,
		subst: false,
		parameters: {
			motivo: {
				name: 'Motivo',
				type: 'string'
			},
			argomento: {
				name: 'Argomento',
				type: 'select',
				value: templateArguments.C
			},
			mese: {
				name: 'Mese',
				type: 'string',
				value: '{{subst:' + 'CURRENTMONTHNAME}} {{subst' + ':CURRENTYEAR}}'
			}
		}
	},
	'E': {
		template: 'E',
		string: 'Enciclopedicità',
		where: 'top',
		noinclude: false,
		subst: false,
		parameters: {
			motivo: {
				name: 'Motivo',
				type: 'string'
			},
			argomento: {
				name: 'Argomento',
				type: 'select',
				value: templateArguments.E
			},
			argomento2: {
				name: 'Argomento2',
				type: 'select',
				value: templateArguments.E
			},
			data: {
				name: 'Data',
				type: 'string',
				value: '{{subst:' + 'CURRENTMONTHNAME}} {{subst' + ':CURRENTYEAR}}'
			}
		}
	},
	'F': {
		template: 'F',
		string: 'Senza fonti',
		where: 'top',
		noinclude: false,
		subst: false,
		parameters: {
			commento: {
				name: 'Commento',
				type: 'string'
			},
			argomento: {
				name: 'Argomento',
				type: 'select',
				value: templateArguments.F
			},
			data: {
				name: 'Data',
				type: 'string',
				value: '{{subst:' + 'CURRENTMONTHNAME}} {{subst' + ':CURRENTYEAR}}'
			}
		}
	},
	'O': {
		template: 'O',
		string: 'Orfana',
		where: 'top',
		noinclude: false,
		subst: false,
		parameters: {
			argomento: {
				name: 'Argomento',
				type: 'select',
				value: templateArguments.O
			},
			argomento2: {
				name: 'Argomento2',
				type: 'select',
				value: templateArguments.O
			},
			mese: {
				name: 'Mese',
				type: 'string',
				value: '{{subst:' + 'CURRENTMONTHNAME}} {{subst' + ':CURRENTYEAR}}'
			}
		}
	},
	'P': {
		template: 'P',
		string: 'POV',
		where: 'top',
		noinclude: false,
		subst: false,
		parameters: {
			motivo: {
				name: 'Motivo',
				type: 'string'
			},
			argomento: {
				name: 'Argomento',
				type: 'select',
				value: templateArguments.P
			},
			argomento2: {
				name: 'Argomento2',
				type: 'select',
				value: templateArguments.P
			},
			mese: {
				name: 'Mese',
				type: 'string',
				value: '{{subst:' + 'CURRENTMONTHNAME}} {{subst' + ':CURRENTYEAR}}'
			}
		}
	},
	'S': {
		template: 'S',
		string: 'Stub',
		where: 'top',
		noinclude: false,
		subst: false,
		parameters: {
			argomento: {
				name: 'Argomento',
				type: 'select',
				value: templateArguments.S
			},
			argomento2: {
				name: 'Argomento2',
				type: 'select',
				value: templateArguments.S
			}
		}
	},
	'T': {
		template: 'T',
		string: 'Tradurre',
		where: 'top',
		noinclude: false,
		subst: false,
		parameters: {
			lingua: {
				name: 'Lingua',
				type: 'string'
			},
			argomento: {
				name: 'Argomento',
				type: 'select',
				value: templateArguments.T
			},
			data: {
				name: 'Data',
				type: 'string',
				value: '{{subst:' + 'CURRENTMONTHNAME}} {{subst' + ':CURRENTYEAR}}'
			}
		}
	},
	'U': {
		template: 'U',
		string: 'Unire',
		where: 'top',
		noinclude: false,
		subst: false,
		parameters: {
			pagina: {
				name: 'Pagina',
				type: 'string'
			},
			verso: {
				name: 'Verso',
				type: 'select',
				value: [ "a", "da" ]
			},
			discussione: {
				name: 'Discussione',
				type: 'string'
			},
			argomento: {
				name: 'Argomento',
				type: 'select',
				value: templateArguments.U
			},
			argomento2: {
				name: 'Argomento2',
				type: 'select',
				value: templateArguments.U
			},
			sezione: {
				name: 'Sezione',
				type: 'string'
			},
			commento: {
				name: 'Commento',
				type: 'string'
			},
			data: {
				name: 'Data',
				type: 'string',
				value: '{{subst:' + 'CURRENTMONTHNAME}} {{subst' + ':CURRENTYEAR}}'
			}
		}
	},
	'W': {
		template: 'W',
		string: 'Wikificare',
		where: 'top',
		noinclude: false,
		subst: false,
		parameters: {
			argomento: {
				name: 'Argomento',
				type: 'select',
				value: templateArguments.W
			},
			data: {
				name: 'Data',
				type: 'string',
				value: '{{subst:' + 'CURRENTMONTHNAME}} {{subst' + ':CURRENTYEAR}}'
			}
		}
	},
	'Categorizzare': {
		template: 'Categorizzare',
		string: 'Categorizzare',
		where: 'bottom',
		noinclude: false,
		subst: false,
		parameters: {
			argomento: {
				name: 'Argomento',
				type: 'select',
				value: templateArguments.Categorizzare
			},
			commento: {
				name: 'Commento',
				type: 'string'
			}
		}
	},
	'Spostare': {
		template: 'Spostare',
		string: 'Spostare',
		where: 'top',
		noinclude: false,
		subst: false,
		parameters: {
			voce: {
				name: 'Nome voce',
				type: 'string'
			},
			motivo: {
				name: 'Motivo',
				type: 'string'
			}
		}
	},
	'Correggere': {
		template: 'Correggere',
		string: 'Correggere',
		where: 'top',
		noinclude: false,
		subst: false,
		parameters: {
			argomento: {
				name: 'Argomento',
				type: 'select',
				value: templateArguments.Correggere
			},
			argomento2: {
				name: 'Argomento2',
				type: 'select',
				value: templateArguments.Correggere
			},
			commento: {
				name: 'Commento',
				type: 'string'
			},
			mese: {
				name: 'Mese',
				type: 'string',
				value: '{{subst:' + 'CURRENTMONTHNAME}} {{subst' + ':CURRENTYEAR}}'
			}
		}
	},
	'In corso': {
		template: 'In corso',
		string: 'In corso',
		where: 'top',
		noinclude: false,
		subst: false,
		parameters: {
			"1": {
				name: 'Argomento',
				type: 'select',
				value: templateArguments.InCorso
			}
		}
	},
	'Da aggiornare': {
		template: 'Da aggiornare',
		string: 'Da aggiornare',
		where: 'top',
		noinclude: false,
		subst: false,
		parameters: {
			argomento: {
				name: 'Argomento',
				type: 'select',
				value: templateArguments.DaAggiornare
			},
			argomento2: {
				name: 'Argomento2',
				type: 'select',
				value: templateArguments.DaAggiornare
			},
			commento: {
				name: 'Commento',
				type: 'string'
			},
			mese: {
				name: 'Mese',
				type: 'string',
				value: '{{subst:' + 'CURRENTMONTHNAME}}'
			},
			anno: {
				name: 'Anno',
				type: 'string',
				value: '{{subst:' + 'CURRENTYEAR}}'
			}
		}
	},
	'Cancelcopy': {
		template: 'Cancelcopy',
		string: 'Cancelcopy',
		where: 'top',
		noinclude: true,
		subst: false,
		parameters: {
			fonte: {
				name: 'Fonte',
				type: 'string'
			}
		}
	},
	'Controlcopy': {
		template: 'Controlcopy',
		string: 'Controlcopy',
		where: 'top',
		noinclude: true,
		subst: false,
		parameters: {
			argomento: {
				name: 'argomento',
				type: 'select',
				value: templateArguments.Controlcopy
			},
			motivo: {
				name: 'motivo',
				type: 'string'
			},
			data: {
				name: 'Data',
				type: 'string',
				value: '{{subst:' + 'CURRENTMONTHNAME}} {{subst' + ':CURRENTYEAR}}'
			}
		}
	},
	'ViolazioneCopyright': {
		template: 'ViolazioneCopyright',
		string: 'ViolazioneCopyright',
		where: 'top',
		noinclude: true,
		subst: false,
		parameters: {
			url: {
				name: 'url',
				type: 'string'
			}
		}
	},
	'Cancellazione': {
		template: 'Cancellazione',
		string: 'Cancellazione',
		where: 'top',
		noinclude: true,
		subst: false,
		parameters: {
			arg: {
				name: 'arg',
				type: 'select',
				value: templateArguments.Cancellazione
			},
			arg2: {
				name: 'arg2',
				type: 'select',
				value: templateArguments.Cancellazione
			}
		}
	},
	'Cancella subito': {
		template: 'Cancella subito',
		string: 'Cancella subito',
		where: 'top',
		noinclude: true,
		subst: false,
		parameters: {
			motivo: {
				name: 'motivo',
				type: 'select',
				value: templateArguments.CancellaSubito
			},
			altroMotivo: {
				name: 'Altro motivo',
				type: 'string'
			}
		}
	},
	'Protetta': {
		template: 'Protetta',
		string: 'Protetta',
		where: 'top',
		noinclude: true,
		subst: false
	},
	'Trasferimento': {
		template: 'Trasferimento',
		string: 'Trasferimento',
		where: 'top',
		noinclude: false,
		subst: false,
		parameters: {
			"1": {
				name: 'codiceProgetto',
				type: 'string'
			}
		}
	},
	'Nota disambigua': {
		template: 'Nota disambigua',
		string: 'Nota disambigua',
		where: 'top',
		noinclude: false,
		subst: false,
		parameters: {
			descrizione: {
				name: 'descrizione',
				type: 'string'
			},
			titolo: {
				name: 'titolo',
				type: 'string'
			},
			redirect: {
				name: 'redirect',
				type: 'string'
			}
		}
	}
};

function getTemplateList() {
	return Object.keys( Custom_lstMyTemplate ).length
		? Custom_lstMyTemplate
		: lstMyTemplate;
}

// ####################################################################################################################
// ####################################################################################################################

/**
 * Add options in the "Tag" form
 */
function lrcRunInsertTemplate( data ) {
	var TagSelect = document.getElementById( 'LiveTagReason' ),
		TemplateList = getTemplateList();

	$.each( TemplateList, function( i, val ) {
		var optTag = document.createElement( 'option' );
		optTag.value = i;
		optTag.className = "InserisciTemplateExtension";
		optTag.innerHTML = val.string;
		TagSelect.appendChild( optTag );
	} );

	$( '<div>' )
		.attr( 'id', 'gtb-dialog' )
		.appendTo( 'body' );
}
LiveRC_AddHook( "AfterPreviewArticle", lrcRunInsertTemplate );

/**
 * Function launched when choosing one of this extension options
 */
getLiveTagFunctions.InserisciTemplateExtension = function( page, option ) {
	lrcDisableLink( "LiveTagReason" );
	lrcDisableLink( "LiveTagLink" );

	var TemplateList = getTemplateList(),
		message = TemplateList[ option.value ];

	new mw.Api().get( {
		format: 'json',
		action: 'query',
		prop: 'info',
		inprop: 'protection',
		titles: page
	} )
		.done( function ( res ) {
			InserisciTemplate_PostTagPage( res, page, message );
		} );
	return false;
};

function InserisciTemplate_PostTagPage( res, page, message ) {
	var resPage = Object.values( res.query.pages )[0];
	if ( !resPage ) {
		return;
	}
	for ( var prEntry in resPage.protection ) {
		if ( prEntry.type === "edit" && mw.config.get( 'wgUserGroups' ).indexOf( prEntry.level ) === -1 ) {
			LiveRC_alert( "<b>" + lrcMakeText( "PROTECTEDPAGE" ).split( "$1" ).join( page ) + "</b>" );
			return;
		}
	}
	InserisciTemplate_showDialog( message, page );
}

/**
 * Show the dialog in order to ask for the template parameters.
 */
function InserisciTemplate_showDialog( data, page ) {
	var $dialog, $fieldset;

	$dialog = $( '#gtb-dialog' ).html( lrcMakeText( "IT_InsertTemplate1" ) );
	$( '<a>' )
		.attr( 'href', mw.util.getUrl( 'Template:' + data.template ) )
		.attr( 'target', '_blank' )
		.attr( 'tabindex', '-1' )
		.css( 'color', '#2e45ad' )
		.text( data.template )
		.appendTo( $dialog );
	$dialog.append( lrcMakeText( "IT_InsertTemplate2" ) );
	$fieldset = $( '<fieldset>' ).css( 'border-color', 'gray' ).appendTo( $dialog );
	$( '<legend>' ).text( lrcMakeText( 'IT_InsertTemplateParams' ) ).appendTo( $fieldset );
	$.each( data.parameters, function( id, val ) {
		var inputEl = InserisciTemplate_buildInputEl( id, val );
		$( '<label>' )
			.attr( 'for', id )
			.text( inputEl.label + ':' )
			.appendTo( $fieldset );
		$fieldset
			.append( '<br/>' )
			.append( inputEl.el )
			.append( '<br/>' );
	} );

	var OKText = lrcMakeText( 'OK' ),
		CancelText = lrcMakeText( 'Cancel' );

	var Buttons = {
		OKText: function() {
			var params = {};
			$dialog.find( 'input:text,select' ).each( function() {
				params[ $( this ).attr( 'id' ) ] = $.trim( $( this ).val() );
			} );
			text = InserisciTemplate_dumpTemplate( data, params );
			$( this ).dialog( 'close' );
			InserisciTemplate_postTemplate( data, text, page );
		},
		CancelText: function() {
			$( this ).dialog( 'close' );
		}
	};
	$dialog.dialog( {
		title: lrcMakeIcon( "LogoIcon" ) + '&nbsp;' + data.string,
		width: 500,
		resizable: false,
		modal: true,
		zIndex: 10000,
		buttons: Buttons
	} );
}

function InserisciTemplate_buildInputEl( id, data ) {
	var label = data.name,
		inputEl;
	if ( data.type == 'string' ) {
		inputEl = $( '<input/>' )
			.attr( 'id', id )
			.attr( 'type', 'text' )
			.attr( 'size', 50 )
			.attr( 'value', ( data.value || '' ) );
	} else if ( data.type == 'select' ) {
		inputEl = $( '<select>' )
			.attr( 'id', id )
			.css( 'width', '200px' );
		$.each( data.value, function( i, option ) {
			$( '<option>' )
				.html( option )
				.appendTo( inputEl );
		} );
	}
	return {
		label: label,
		el: inputEl
	};
}

/**
 * Check the dialog box and create the wikitext from the template and its params
 */
function InserisciTemplate_dumpTemplate( template, params ) {
	return ( template.noinclude ? '<noinclude>' : '' ) +
		'{{' + ( template.subst ? 'subst:' : '' ) +
		template.template + '|' +
		LiveRC_FormatTemplateParams( params ) +
		'}}' +
		( template.noinclude ? '</noinclude>' : '' ) + '\n';
}

function LiveRC_FormatTemplateParams( params ) {
	var text = [];
	for ( var arg in params ) {
		if ( params.hasOwnProperty( arg ) ) {
			text.push( arg + "=" + params[ arg ] );
		}
	}
	return text.join( "|" );
}

/**
 * Save the edit
 */
function InserisciTemplate_postTemplate( data, text, page ) {
	lrcDisableLink( "LiveTagReason" );
	lrcDisableLink( "LiveTagLink" );
	var EditParam = {
		action: 'edit',
		summary: lrcMakeText( "RESUMESTART" ) + lrcMakeText( "TAG_RESUME" ) + ' ' + data.template,
		title: page,
		watchlist: lrcMakeParam( "BypassWatchdefault" ) ? 'nochange' : "preferences",
		notminor: 1,
		nocreate: 1
	};

	if ( data.where == 'bottom' ) {
		EditParam.appendtext = "\n" + text;
	} else { // top, or default = top
		EditParam.prependtext = text + "\n";
	}

	new mw.Api().postWithEditToken( EditParam )
		.done( function () {
			LiveRC_alert( "<b>" + page + " : " + lrcMakeText( "TAG_DONE" ) + "</b> <small>(" + text + ")</small>" );
		} );
}

/* ########################################## CONFIGURATION PANEL ################################## */


/**
 * Create a fieldset in the configuration panel
 */
function InserisciTemplate_CreateConfigPanel() {
	var InserisciTemplateUl = LiveRC_ManageParams_CreateNewListMenu( "InserisciTemplateLegend", LiveRC_ManageParams_CreateActionButtons() ),
		Target = InserisciTemplateUl.parentNode,
		Templates = getTemplateList();

	for ( var temp in Templates ) {
		if ( Templates.hasOwnProperty( temp ) ) {
			Target.appendChild( InserisciTemplate_CreateTemplateConfigPanel( Templates[ temp ] ) );
		}
	}
	var NewTemplate = document.createElement( 'p' );
	NewTemplate.id = "InserisciTemplate_AddNeTemplateP";
	var NewTemplateLink = document.createElement( 'a' );
	NewTemplateLink.innerHTML = "(+)";
	NewTemplateLink.title = lrcMakeText( "IT_AddTemplate" );
	NewTemplateLink.href = "javascript:;";
	NewTemplateLink.onclick = function() {
		InserisciTemplate_AddNewTemplate();
	};
	NewTemplate.appendChild( NewTemplateLink );
	Target.appendChild( NewTemplate );
	InserisciTemplateUl.parentNode.removeChild( InserisciTemplateUl );
	var ThisFieldset = document.getElementById( "LiveRC_OptionsContent_InserisciTemplateLegend" );
	var TargetFieldset = document.getElementById( "LiveRC_OptionsContent_lstParamMenuTabs" );
	if ( ThisFieldset && TargetFieldset ) {
		TargetFieldset.parentNode.insertBefore( ThisFieldset, TargetFieldset );
	}
}
LiveRC_AddHook( "AfterCreateParamPanel", InserisciTemplate_CreateConfigPanel );

function InserisciTemplate_AddNewTemplate() {
	var P = document.getElementById( "InserisciTemplate_AddNeTemplateP" );
	if ( !P ) {
		return;
	}
	var BlankTemplate = {
		template: '',
		string: '',
		where: 'top',
		noinclude: false,
		subst: false,
		parameters: {}
	};
	var NewDiv = InserisciTemplate_CreateTemplateConfigPanel( BlankTemplate );
	P.parentNode.insertBefore( NewDiv, P );
}

function InserisciTemplate_DeleteTemplate( DeleteLink ) {
	var Div = DeleteLink;
	while ( Div ) {
		if ( Div.classList.contains( "InserisciTemplate_TemplateDiv" ) ) {
			break;
		}
		Div = Div.parentNode;
	}
	if ( !Div ) {
		return;
	}
	$( Div ).remove();
}

function InserisciTemplate_CreateTemplateConfigPanel( Template ) {
	var TemplateDiv = document.createElement( 'div' );
	TemplateDiv.className = "InserisciTemplate_TemplateDiv ParamMenuLi";
	var Legend = document.createElement( 'p' );
	var Title = document.createElement( 'a' );
	Title.className = "InserisciTemplate_template";
	Title.innerHTML = "{{" + Template.template + "}} ";
	Title.target = "_blank";
	Title.href = mw.util.getUrl( "Template:" + Template.template );
	Title.title = "Template:" + Template.template;
	Title.onclick = function() {
		liveArticle( "Template:" + Template.template );
		return false;
	};
	Legend.appendChild( Title );
	var DeleteTemplateLink = document.createElement( 'a' );
	DeleteTemplateLink.innerHTML = "(-)";
	DeleteTemplateLink.title = lrcMakeText( "IT_DeleteTemplate" );
	DeleteTemplateLink.href = "javascript:;";
	DeleteTemplateLink.onclick = function() {
		InserisciTemplate_DeleteTemplate( this );
	};
	Legend.appendChild( DeleteTemplateLink );
	TemplateDiv.appendChild( Legend );
	var TemplateForm = document.createElement( 'form' );
	TemplateForm.className = "InserisciTemplate_TemplateForm";
	TemplateDiv.appendChild( TemplateForm );
	var UL = document.createElement( 'ul' );
	TemplateForm.appendChild( UL );

	var LI_Template = document.createElement( 'li' );
	UL.appendChild( LI_Template );

	// 'template':   name of the template to be inserted 
	var Label_template = document.createElement( 'label' );
	Label_template.setAttribute( 'for', 'template' );
	Label_template.innerHTML = "template : ";
	LI_Template.appendChild( Label_template );
	var Input_template = document.createElement( 'input' );
	Input_template.id = 'template';
	Input_template.type = "text";
	Input_template.value = ( Template.template || "" );
	LI_Template.appendChild( Input_template );
	LI_Template.appendChild( document.createTextNode( " - " ) );

	// 'string':     option label in the template combo box
	var Label_string = document.createElement( 'label' );
	Label_string.setAttribute( 'for', 'string' );
	Label_string.innerHTML = "string : ";
	LI_Template.appendChild( Label_string );
	var Input_string = document.createElement( 'input' );
	Input_string.id = 'string';
	Input_string.type = "text";
	Input_string.value = ( Template.string || "" );
	LI_Template.appendChild( Input_string );
	LI_Template.appendChild( document.createTextNode( " - " ) );

	// 'where':      where to insert the template in the page (top or bottom)
	var Label_where = document.createElement( 'label' );
	Label_where.setAttribute( 'for', 'where' );
	Label_where.innerHTML = "where : ";
	LI_Template.appendChild( Label_where );
	var Select_where = document.createElement( 'select' );
	Select_where.id = 'where';
	var Opts = [ "top", "bottom" ];
	for ( var a = 0, l = Opts.length; a < l; a++ ) {
		var OptValue = Opts[ a ];
		var Opt = document.createElement( 'option' );
		Opt.innerHTML = OptValue;
		Opt.value = OptValue;
		if ( OptValue == Template.where ) {
			Opt.selected = "selected";
		}
		Select_where.appendChild( Opt );
	}
	LI_Template.appendChild( Select_where );
	LI_Template.appendChild( document.createTextNode( " - " ) );

	// 'noinclude':  whether the template shall be tagged with "noinclude"
	var Label_noinclude = document.createElement( 'label' );
	Label_noinclude.setAttribute( 'for', 'noinclude' );
	Label_noinclude.innerHTML = "noinclude : ";
	LI_Template.appendChild( Label_noinclude );
	var Input_noinclude = document.createElement( 'input' );
	Input_noinclude.id = 'noinclude';
	Input_noinclude.type = "checkbox";
	if ( Template.noinclude ) {
		Input_noinclude.checked = "checked";
	}
	LI_Template.appendChild( Input_noinclude );
	LI_Template.appendChild( document.createTextNode( " - " ) );

	// 'subst':      whether the template shall be "substed"
	var Label_subst = document.createElement( 'label' );
	Label_subst.setAttribute( 'for', 'subst' );
	Label_subst.innerHTML = "subst : ";
	LI_Template.appendChild( Label_subst );
	var Input_subst = document.createElement( 'input' );
	Input_subst.id = 'subst';
	Input_subst.type = "checkbox";
	if ( Template.subst ) {
		Input_subst.checked = "checked";
	}
	LI_Template.appendChild( Input_subst );

	// 'parameters'
	var LI_parameters = document.createElement( 'li' );
	UL.appendChild( LI_parameters );
	var Label_parameters = document.createElement( 'label' );
	Label_parameters.setAttribute( 'for', 'parameters' );
	Label_parameters.innerHTML = "parameters : ";
	LI_parameters.appendChild( Label_parameters );
	var ParamsUL = document.createElement( 'ul' );
	ParamsUL.id = 'parameters';
	LI_parameters.appendChild( ParamsUL );
	for ( var param in Template.parameters ) {
		if ( !Template.parameters.hasOwnProperty( param ) ) {
			continue;
		}
		var LI_Param = InserisciTemplate_CreateNewParam( param, Template.parameters[ param ] );
		ParamsUL.appendChild( LI_Param );
	}
	var Li_NewParam = document.createElement( 'li' );
	var Link_NewParam = document.createElement( 'a' );
	Link_NewParam.innerHTML = "(+)";
	Link_NewParam.title = lrcMakeText( "IT_AddParam" );
	Link_NewParam.href = "javascript:;";
	Link_NewParam.onclick = function() {
		InserisciTemplate_AddParamToTemplate( this );
	};
	Li_NewParam.appendChild( Link_NewParam );
	ParamsUL.appendChild( Li_NewParam );
	return TemplateDiv;
}

function InserisciTemplate_AddParamToTemplate( AddParamLink ) {
	var NewParams = {
		name: '',
		type: 'string',
		value: ''
	};
	var NewParamLi = InserisciTemplate_CreateNewParam( "", NewParams );
	$( NewParamLi ).insertBefore( AddParamLink.parentNode );
}

function InserisciTemplate_CreateNewParam( param, Params ) {
	var ParamType = Params.type;
	var ParamValue = Params.value;
	var LI_Param = document.createElement( 'li' );
	LI_Param.className = "LI_parameters_li";

	var DeleteParamLink = document.createElement( 'a' );
	DeleteParamLink.innerHTML = "(-)";
	DeleteParamLink.title = lrcMakeText( "IT_DeleteParam" );
	DeleteParamLink.href = "javascript:;";
	DeleteParamLink.onclick = function() {
		$( this.parentNode ).remove();
	};
	LI_Param.appendChild( DeleteParamLink );
	LI_Param.appendChild( document.createTextNode( " - " ) );

	//// parameters id
	var Label_id = document.createElement( 'label' );
	Label_id.setAttribute( 'for', 'Param_id' );
	Label_id.innerHTML = "id : ";
	LI_Param.appendChild( Label_id );
	var Input_id = document.createElement( 'input' );
	Input_id.id = 'Param_id';
	Input_id.type = "text";
	Input_id.value = ( param || "" );
	LI_Param.appendChild( Input_id );
	LI_Param.appendChild( document.createTextNode( " - " ) );

	//// parameters.name
	var Label_name = document.createElement( 'label' );
	Label_name.setAttribute( 'for', 'Param_name' );
	Label_name.innerHTML = "name : ";
	LI_Param.appendChild( Label_name );
	var Input_name = document.createElement( 'input' );
	Input_name.id = 'Param_name';
	Input_name.type = "text";
	Input_name.value = ( Params.name || "" );
	LI_Param.appendChild( Input_name );
	LI_Param.appendChild( document.createTextNode( " - " ) );

	//// parameters.type
	var Label_type = document.createElement( 'label' );
	Label_type.setAttribute( 'for', 'Param_type' );
	Label_type.innerHTML = "type : ";
	LI_Param.appendChild( Label_type );
	var Select_type = document.createElement( 'select' );
	Select_type.id = 'Param_type';
	var Opts = [ "string", "select" ];
	for ( var a = 0, l = Opts.length; a < l; a++ ) {
		var OptValue = Opts[ a ];
		var Opt = document.createElement( 'option' );
		Opt.innerHTML = OptValue;
		Opt.value = OptValue;
		if ( OptValue == ParamType ) {
			Opt.selected = "selected";
		}
		Select_type.appendChild( Opt );
	}
	Select_type.onchange = function() {
		InserisciTemplate_ChangeValueType( this );
	};
	LI_Param.appendChild( Select_type );
	LI_Param.appendChild( document.createTextNode( " - " ) );

	//// parameters.value
	var Label_value = document.createElement( 'label' );
	Label_value.setAttribute( 'for', 'Param_value' );
	Label_value.innerHTML = "value : ";
	LI_Param.appendChild( Label_value );
	if ( ParamType == "string" ) {
		var Input_value = document.createElement( 'input' );
		Input_value.id = 'Param_value';
		Input_value.type = "text";
		Input_value.size = "30";
		Input_value.value = ( ParamValue || "" );
		LI_Param.appendChild( Input_value );
	} else if ( ParamType == "select" ) {
		var Select_value = document.createElement( 'select' );
		Select_value.id = 'Param_value';
		Select_value.style.width = '206px';
		var Opts = ParamValue;
		for ( var a = 0, l = Opts.length; a < l; a++ ) {
			var OptValue = Opts[ a ];
			var Opt = document.createElement( 'option' );
			Opt.innerHTML = OptValue;
			Opt.value = OptValue;
			Select_value.appendChild( Opt );
		}
		LI_Param.appendChild( Select_value );
		LI_Param.appendChild( document.createTextNode( " " ) );
		var DeleteOptionLink = document.createElement( 'a' );
		DeleteOptionLink.innerHTML = "(-)";
		DeleteOptionLink.title = lrcMakeText( "IT_DeleteOption" );
		DeleteOptionLink.href = "javascript:;";
		DeleteOptionLink.onclick = function() {
			InserisciTemplate_DeleteOptionFromSelect( this );
		};
		LI_Param.appendChild( DeleteOptionLink );
		LI_Param.appendChild( document.createTextNode( " " ) );

		var AddOptionLink = document.createElement( 'a' );
		AddOptionLink.innerHTML = "(+)";
		AddOptionLink.title = lrcMakeText( "IT_AddOption" );
		AddOptionLink.href = "javascript:;";
		AddOptionLink.onclick = function() {
			InserisciTemplate_AddOptionToSelect( this );
		};
		LI_Param.appendChild( AddOptionLink );
	}
	return LI_Param;
}

function InserisciTemplate_ChangeValueType( Select ) {
	var Labels = Select.parentNode.getElementsByTagName( 'label' );
	var LastLabel = Labels[ ( Labels.length - 1 ) ];
	while ( LastLabel.nextSibling ) {
		$( LastLabel.nextSibling ).remove();
	}
	if ( Select.value == "string" ) {
		var Input_value = document.createElement( 'input' );
		Input_value.id = 'Param_value';
		Input_value.type = "text";
		Input_value.size = "30";
		Input_value.value = "";
		LastLabel.parentNode.appendChild( Input_value );
	} else {
		var Select_value = document.createElement( 'select' );
		Select_value.id = 'Param_value';
		Select_value.style.width = '206px';
		var Opt = document.createElement( 'option' );
		Opt.innerHTML = "";
		Opt.value = "";
		Select_value.appendChild( Opt );
		LastLabel.parentNode.appendChild( Select_value );
		LastLabel.parentNode.appendChild( document.createTextNode( " " ) );
		var DeleteOptionLink = document.createElement( 'a' );
		DeleteOptionLink.innerHTML = "(-)";
		DeleteOptionLink.title = lrcMakeText( "IT_DeleteOption" );
		DeleteOptionLink.href = "javascript:;";
		DeleteOptionLink.onclick = function() {
			InserisciTemplate_DeleteOptionFromSelect( this );
		};
		LastLabel.parentNode.appendChild( DeleteOptionLink );
		LastLabel.parentNode.appendChild( document.createTextNode( " " ) );
		var AddOptionLink = document.createElement( 'a' );
		AddOptionLink.innerHTML = "(+)";
		AddOptionLink.title = lrcMakeText( "IT_AddOption" );
		AddOptionLink.href = "javascript:;";
		AddOptionLink.onclick = function() {
			InserisciTemplate_AddOptionToSelect( this );
		};
		LastLabel.parentNode.appendChild( AddOptionLink );
	}
}

function InserisciTemplate_DeleteOptionFromSelect( DeleteOptionLink ) {
	var Selects = DeleteOptionLink.parentNode.getElementsByTagName( 'select' );
	for ( var a = 0, l = Selects.length; a < l; a++ ) {
		var Select = Selects[ a ];
		if ( !Select.id || Select.id != 'Param_value' ) {
			continue;
		}
		var SelectedOpt = Select.value;
		var Options = Select.getElementsByTagName( 'option' );
		for ( var b = 0, m = Options.length; b < m; b++ ) {
			var thisOpt = Options[ b ];
			if ( thisOpt.value != SelectedOpt ) {
				continue;
			}
			thisOpt.parentNode.removeChild( thisOpt );
		}
	}
}

function InserisciTemplate_AddOptionToSelect( AddOptionLink ) {
	var AddOptionForm = document.createElement( 'span' );
	var AddOptionInput = document.createElement( 'input' );
	AddOptionInput.type = 'text';
	AddOptionForm.appendChild( AddOptionInput );
	var AddOptionInputOK = document.createElement( 'input' );
	AddOptionInputOK.type = 'button';
	AddOptionInputOK.value = lrcMakeText( "OK" );
	AddOptionInputOK.onclick = function() {
		InserisciTemplate_AddOptionToSelect_OK( this );
	};
	AddOptionInputOK.onselect = function() {
		InserisciTemplate_AddOptionToSelect_OK( this );
	};
	AddOptionForm.appendChild( AddOptionInputOK );
	var AddOptionInputCancel = document.createElement( 'input' );
	AddOptionInputCancel.type = 'button';
	AddOptionInputCancel.value = lrcMakeText( "Cancel" );
	AddOptionInputCancel.onclick = function() {
		InserisciTemplate_AddOptionToSelect_Cancel( this );
	};
	AddOptionInputCancel.onselect = function() {
		InserisciTemplate_AddOptionToSelect_Cancel( this );
	};
	AddOptionForm.appendChild( AddOptionInputCancel );
	AddOptionLink.parentNode.insertBefore( AddOptionForm, AddOptionLink );
	AddOptionLink.style.display = "none";
}

function InserisciTemplate_AddOptionToSelect_Cancel( AddOptionInputCancel ) {
	var Span = AddOptionInputCancel.parentNode;
	var Link = Span.nextSibling;
	$( Span ).remove();
	Link.style.display = "";
}

function InserisciTemplate_AddOptionToSelect_OK( AddOptionInputOK ) {
	var Input = AddOptionInputOK.previousSibling;
	var NewOption = Input.value;
	var Li = AddOptionInputOK.parentNode.parentNode;
	var Selects = Li.getElementsByTagName( 'select' );
	for ( var a = 0, l = Selects.length; a < l; a++ ) {
		var Select = Selects[ a ];
		if ( !Select.id || Select.id != 'Param_value' ) {
			continue;
		}
		var Option = document.createElement( 'option' );
		Option.innerHTML = NewOption;
		Option.value = NewOption;
		Select.appendChild( Option );
	}
	InserisciTemplate_AddOptionToSelect_Cancel( AddOptionInputOK );
}

/**
 * Check the fieldset and add a text to be saved in /LiveRCparam.js page
 */
function InserisciTemplate_CheckConfigPanel() {
	var $ITConfigPanel = $( '#LiveRC_OptionsContent_InserisciTemplateLegend' );
	if ( !$ITConfigPanel.length ) {
		return;
	}
	var Items = {};
	$ITConfigPanel.find( 'form.InserisciTemplate_TemplateForm' ).each( function () {
		var NewItem = {
			template: this.getElementById( 'template' ).value,
			string: this.getElementById( 'string' ).value,
			where: this.getElementById( 'where' ).value,
			noinclude: this.getElementById( 'noinclude' ).checked,
			subst: this.getElementById( 'subst' ).checked
		};
		NewItem.parameters = {};
		var ParamLIs = $( this ).find( 'li.LI_parameters_li' );
		ParamLIs.each( function () {
			var NewParam = {
				name: this.getElementById( 'Param_name' ).value,
				type: this.getElementById( 'Param_type' ).value
			};
			if ( NewParam.type == "string" ) {
				var value = this.getElementById( 'Param_value' ).value.unhtmlize();
				if ( value ) {
					NewParam.value = value;
				}
			} else {
				NewParam.value = [];
				var $Opt = $( this.getElementById( 'Param_value' ) ).find( '.option' );
				Opt.each( function () {
					NewParam.value.push( this.value.unhtmlize() );
				} );
			}
			NewItem.parameters[ this.getElementById( 'Param_id' ).value ] = NewParam;
		} );
		Items[ NewItem.template ] = NewItem;
	} );
	var TextToSave = InserisciTemplate_CompareNewParams( Items );
	if ( !TextToSave ) {
		return;
	}
	var SavedText = "\nCustom_lstMyTemplate = {\n";
	var SavedItems = [];
	for ( var item in Items ) {
		var SavedItem = "  '" + item + "':{\n";
		var ThisTemplate = Items[ item ];
		for ( var tempParam in ThisTemplate ) {
			SavedItem += "    " + tempParam + " : ";
			var tempParamValue = ThisTemplate[ tempParam ];
			if ( tempParam != "parameters" ) {
				SavedItem += ( typeof( tempParamValue ) == "string" ? lrcEscapeStrHTML( tempParamValue ) : tempParamValue ) + ",\n";
			} else {
				SavedItem += "{\n";
				var tempParameters = [];
				for ( var parameter in tempParamValue ) {
					var thisparam = tempParamValue[ parameter ];
					var ParamItems = [];
					for ( var paramItem in thisparam ) {
						var thisparamItemValue = thisparam[ paramItem ];
						if ( paramItem != "value" || typeof( thisparamItemValue ) == "string" ) {
							ParamItems.push( paramItem + ":" + lrcEscapeStrHTML( thisparamItemValue ) );
						} else {
							var ThisParamValue = [];
							for ( var a = 0, l = thisparamItemValue.length; a < l; a++ ) {
								ThisParamValue.push( lrcEscapeStrHTML( thisparamItemValue[ a ] ) );
							}
							ParamItems.push( paramItem + ": [" + ThisParamValue.join( "," ) + "]" );
						}
					}
					tempParameters.push( "      " + lrcEscapeStrHTML( parameter ) + " : {" + ParamItems.join( "," ) + "}" );
				}
				SavedItem += tempParameters.join( ",\n" );
				SavedItem += "\n    }";
			}
		}
		SavedItem += "\n  }";
		SavedItems.push( SavedItem );
	}
	SavedText += SavedItems.join( ",\n" );
	SavedText += "};\n\n";
	LiveRC_Config.BeforeParamPanelSavedHookResult += SavedText;
}
LiveRC_AddHook( "BeforeParamPanelSaved", InserisciTemplate_CheckConfigPanel );

function InserisciTemplate_CompareNewParams( NewItems ) {
	var OldItems = lstMyTemplate;

	if ( JSON.stringify( Object.keys( OldItems ).sort() ) !== JSON.stringify( Object.keys( NewItems ).sort() ) ) {
		return true;
	}

	for ( var template in OldItems ) {
		for ( var item in OldItems[ template ] ) {
			if ( item !== "parameters" && OldItems[ template ][ item ] !== NewItems[ template ][ item ] ) {
				return true;
			} 
		}

		var oldParams = OldItems[ template ].parameters,
			newParams = NewItems[ template ].parameters;

		if ( Object.keys( oldParams ).length !== Object.keys( newParams ).length ) {
			return true;
		}
		for ( var param in oldParams ) {
			if ( !newParams[ param ] ) {
				return true;
			}
			for ( var paramitem in oldParams[ param ] ) {
				if ( paramitem != "value" || ( typeof( oldParams[ param ][ paramitem ] ) != "object" && typeof( newParams[ param ][ paramitem ] ) != "object" ) ) {
					if ( oldParams[ param ][ paramitem ] !== newParams[ param ][ paramitem ] ) {
						return true;
					}
				} else {
					if ( oldParams[ param ][ paramitem ].length != newParams[ param ][ paramitem ].length ) {
						return true;
					}
					for ( var a = 0, l = oldParams[ param ][ paramitem ].length; a < l; a++ ) {
						if ( oldParams[ param ][ paramitem ][ a ] != newParams[ param ][ paramitem ][ a ] ) {
							return true;
						}
					}
				}
			}
		}
	}
	return false;
}

/*** Vars for configuration panel fieldset */

lrcTexts.IT_InsertTemplate1 = "Inserisce il template {{";
lrcTexts.IT_InsertTemplate2 = "}} nella pagina.";
lrcTexts.IT_InsertTemplateParams = "Parametri";
lrcTexts.IT_AddTemplate = "Aggiungi un nuovo template";
lrcTexts.IT_DeleteTemplate = "Cancella questo template";
lrcTexts.IT_AddParam = "Aggiungi un nuovo parametro";
lrcTexts.IT_DeleteParam = "Cancella questo parametro";
lrcTexts.IT_DeleteOption = "Cancella l'opzione selezionata";
lrcTexts.IT_AddOption = "Aggiungi una nuova opzione";

lrcParamDesc.DescIT_InsertTemplate1 = "[InserisciTemplate] Inserisci la parte 1 della frase del template";
lrcParamDesc.DescIT_InsertTemplate2 = "[InserisciTemplate] Inserisci la parte 2 della frase del template";
lrcParamDesc.DescIT_InsertTemplateParams = "[InserisciTemplate] Parametri";

lrcParamDesc.DescIT_AddTemplate = "[InserisciTemplate] Frase Aggiungi un nuovo template";
lrcParamDesc.DescIT_DeleteTemplate = "[InserisciTemplate] Frase Cancella questo template";
lrcParamDesc.DescIT_AddParam = "[InserisciTemplate] Frase Aggiungi un nuovo parametro";
lrcParamDesc.DescIT_DeleteParam = "[InserisciTemplate] Frase Cancella questo parametro";
lrcParamDesc.DescIT_DeleteOption = "[InserisciTemplate] Frase Cancella l'opzione selezionata";
lrcParamDesc.DescIT_AddOption = "[InserisciTemplate] Frase Aggiungi una nuova opzione";
lrcParamDesc.DescInserisciTemplateLegend = "Parametri per l'estensione InserisciTemplate";
lrcParamDesc.DescInserisciTemplateLegend_short = "InserisciTemplate";

// Hide/Show tabs panel item
addParamMenuTab( "InserisciTemplateLegend", true );