
function getObj(objid) {
   if(document.getElementById) return document.getElementById(objid)
   if(document.all) return document.all[objid]
   if(document.layers) return document.layers[objid]
   return null
};

function DisableEnableId(cosa){
	if (typeof(cosa) != 'object'){
		cosa = Array(cosa);
	}
	
	j = -1;
	while (IdOggetto = cosa[++j]){
		el = document.getElementById(IdOggetto);
		if (el != null) el.disabled = !el.disabled;
	}
}

function CheckTool(NomeForm,cosa) {
	// In una form con dei checkbox Inverte la selezione dei checkbox oppure li Seleziona Tutti o li Deseleziona
	// Se viene passato un array Seleziona o Deseleziona solo tutti gli Id passati nell'array
	var el = 0;
	var i = -1;
	switch (true){
	case typeof(cosa) == 'object':
		while (el = document[NomeForm][++i]) if (el.type == 'checkbox'){
			j = -1;
			while (ck = cosa[++j]) if (el.id == ck) el.checked = !el.checked;
		}
		break;
	case cosa == 'inv':
		while (el = document[NomeForm][++i]) if (el.type == 'checkbox') el.checked = !el.checked;
		break;
	case cosa ==  'sel':
		while (el = document[NomeForm][++i]) if (el.type == 'checkbox') el.checked = true;
		break;
	case cosa == 'desel':
		while (el = document[NomeForm][++i]) if (el.type == 'checkbox') el.checked = false;
		break;
	}
}

function ComboCtrlCheck(NomeForm,combo){
	// Funzione che controlla che prima di far fare la submit ad una combo controlla che nella
	// form ci sia selezionato un check
	var el, i = 0, j = 0;
	while (el = document[NomeForm][i++]) if (el.type == 'checkbox') if (el.checked) j++;
	if (j>0 && document[NomeForm][combo].value!='null') document[NomeForm].submit();
}

function OrderCol(NomeForm,NomeVar,nomecol){
	// Mette il nome della colonna nella variabile hidden e fa il submit
	document[NomeForm][NomeVar].value = nomecol;
	document[NomeForm].submit();
}

function FindEvent(evt) {
	if (navigator.appName=='Netscape'){
		if (evt.keyCode) return evt.keyCode;
		if (evt.charCode) return evt.charCode;
	} else return evt.keyCode;
}

function addEvent(obj,event,func) {
	// Funzione per accodare sequenzialmente all'evento dell'oggetto la funzione
	// addEventListener (per Mozilla) e la corrispettiva attachEvent (per MerdoSplorer) hanno la stessa funzione automatica per aggiungere
	// funzioni ad un evento. Peccato che al verificarsi dell'evento le funzioni accodate vengono eseguite in ordine opposto uno rispetto all'altro
	// E chi secondo te esegue in maniera opposta? Ma certo! MerdoSplorer! E chi sennò!
	// Esempio:
	// Accodo funzione uno() due() tre() e quattro()
	// Ordine di esecuzione per Mozilla: uno() due() tre() e quattro()
	// Ordine di esecuzione per MerdoSplorer: quattro tre() due() e ()uno
	// La soluzione è fargli chiamare solamente una serie di funzioni nidificate e non seriali
	// In questo modo l'evento è associato a una sola funzione, ma quella funzione contiene tutte le altre
	// E quindi anche MerdoSplorer è forzato a eseguire l'ordine esatto!
	var oldevent = obj[event];
	if (typeof obj[event] != 'function') obj[event] = func;
	else obj[event] = function() { oldevent(); func(); }
}

function startEvent(ojNameStr,eventTypeNameStr,funcNameStr){
    eval(ojNameStr+".on"+eventTypeNameStr+"="+ funcNameStr);
    if(document.layers) eval(ojNameStr+".captureEvents(Event."+eventTypeNameStr.toUpperCase()+")");
}

function OnlyInt(evt){
	var charCode = FindEvent(evt);
	if (charCode == evt.keyCode && navigator.appName=='Netscape')return evt.keyCode;
	
	if (!(/[0-9]/.test(String.fromCharCode(charCode)))) // Numeri
    	return false;
}

function OnlyIntDot(evt){
	var charCode = FindEvent(evt);
	if (charCode == evt.keyCode && navigator.appName=='Netscape')return evt.keyCode;
	
	if (!(/[0-9]|\x2E/.test(String.fromCharCode(charCode)))) // Numeri
    	return false;
}

function OnlyIntSlash(evt){
	var charCode = FindEvent(evt);
	if (charCode == evt.keyCode && navigator.appName=='Netscape')return evt.keyCode;
	
	if (!(/[0-9]|\//.test(String.fromCharCode(charCode)))) // Numeri
    	return false;
}

function Invio(NomeForm,evt){
	// Controlla che sia stato premuto Invio in uin determinato campo per fare il submit
	if (FindEvent(evt) == 13) document[NomeForm].submit();
}

function BrowserSize(){
	var ret = new Array();
	
	if (parseInt(navigator.appVersion)>3) {
		if (navigator.appName=="Netscape") {
			W = window.innerWidth;
			H = window.innerHeight;
		}
		if (navigator.appName.indexOf("Microsoft")!=-1) {
			W = document.body.clientHeight;
			H = document.body.clientHeight;
		}
	}
	
	return {Width:W, Height:H};
}

function array_search(ago,pagliaio){
	for (var id in pagliaio) if (pagliaio[id] == ago) return id;
	return null;
}

function HighlightFields(NomeForm,arrayFields,classcss,arrayCss){
	for(var id in arrayFields){
		if (document[NomeForm][arrayFields[id]].disabled == false){
			document[NomeForm][arrayFields[id]].className = ((document[NomeForm][arrayFields[id]].value == "")?classcss+" ":"")+arrayCss[arrayFields[id]];
		}
	}
}

function Trim(str) {
	return str.replace(/\s+$|^\s+/g,"");
}

function LTrim(str) {
	return str.replace(/^\s+/,"");
}

function RTrim(str) {
	return str.replace(/\s+$/,"");
}

function Left(str, n){
	if (n <= 0) return "";
	else if (n > String(str).length) return str;
	else return String(str).substring(0,n);
}

function Right(str, n){
    if (n <= 0) return "";
    else if (n > String(str).length) return str;
    else {
       var iLen = String(str).length;
       return String(str).substring(iLen, iLen - n);
    }
}

function getParent(el, ParentTagName){
	// Funzione ricorsiva che trova il genitore dell'elemento el che ha il tag ParentTagName
	// Un bug del motore Gecko alias Merdosplorer necessita i tag in maiuscolo
	if (el == null) return null;
	else if (el.nodeType == 1 && el.tagName.toLowerCase() == ParentTagName.toLowerCase()) return el;
	else return getParent(el.parentNode, ParentTagName);
}

function getElementPosition(elem) {
    
    var offsetLeft = 0;
    var offsetTop = 0;
    while (elem) {
        offsetLeft += elem.offsetLeft;
        offsetTop += elem.offsetTop;
        elem = elem.offsetParent;
    }
    if (navigator.userAgent.indexOf("Mac") != -1 && 
        typeof document.body.leftMargin != "undefined") {
        offsetLeft += document.body.leftMargin;
        offsetTop += document.body.topMargin;
    }
    return {left:offsetLeft, top:offsetTop};
}

function array_unset(array, keyToUnset, keepKey){
	var ret = new Array;
	
	if (keepKey == true){
		for(var i in array) if(i!=keyToUnset) ret[i]=array[i];
	} else {
		ret.length = 0;
		for(var i in array) if(i!=keyToUnset) ret[ret.length]=array[i];
	}
	
	return ret;
}

function array_keys(array){
	var ret = new Array;
	ret.length = 0;
	for(var i in array) ret[ret.length]=i;
	return ret;
}

function innerHTML_TAG(obj){
	
	var ret = '<'+obj.nodeName;
	
	for (i=0;i<obj.attributes.length;i++){
		if (obj.attributes[i].textContent) ret = ret+" "+obj.attributes[i].nodeName+"='"+obj.attributes[i].nodeValue+"'";
	}
	
	return ret+">"+obj.innerHTML+"</"+obj.nodeName+">";
}

function getTextContent(obj) {
	if(obj.innerText) return obj.innerText;
	else if(obj.textContent) return obj.textContent;
}

function substr_count(str,substr){
	return eval('(str.length-(str.replace(/'+substr+'/g,"").length))/substr.length');
}