
function jll_FunctionExists(fn) {
	var a = eval("window." + fn);
	if (a) return true;
	return false;
}


/* form.submit */
function jll_FormSubmit() {
	var rv = true;
	if (jll_FunctionExists("prg_OnFormSubmit")) {
		rv = prg_OnFormSubmit();	
	}
	if (rv) {
		document.forms[0].submit();
	}
	return rv;
}

function jll_SendEvent(obj,evt) {
	if (obj > "")
		document.forms[0].sys_ctrl.value = obj;
	document.forms[0].sys_evt.value = evt;
	jll_FormSubmit();
}

function jll_SendEventConfirm(obj,evt,txt) {
	if (window.confirm(txt)) {
		jll_SendEvent(obj, evt);
	}
}

/* funzione interna eseguita al caricamento della pagina:
   posiziono il layer con il messaggio di errore, e lo rendo visibile.
   NOME layer: error_msg (creato in automatico da prg_Template_ErrorLayers)
   NOME IMG di riferimento: error_pos
 */
function _jll_DisplayLayers() {
	var lname = jll_getObjByName("error_msg");
	var error_pos = jll_getObjByName("error_pos");
	var lobj_xy = jll_getOffset(error_pos);
	if (lobj_xy && lname) {
		lname.style.top = lobj_xy[1] + "px";
		lname.style.left = lobj_xy[0] + "px";
		lname.style.visibility = 'visible';
	}
}

/* document.onload */
function jll_OnLoad() {
	_jll_DisplayLayers();
	if (jll_FunctionExists("prg_OnLoad")) {
		prg_OnLoad();
	}
}

function jll_getObjByName(name) {
	return document.getElementById(name);
}

/* calcolo posizione x,y di un oggetto */
function jll_getOffset(obj) {
	var x,y,ce;
	if (obj) {
		x = obj.offsetLeft;
		y = obj.offsetTop;
		ce = obj.offsetParent;
		while (ce!=null)	{
			y += ce.offsetTop;
			x += ce.offsetLeft;
			ce = ce.offsetParent;
		}
		return [x,y];			
	}
	return false;
}

var glb = {};
/* Control OnMouseOver */
function jll_CtrlOMOv(ctrl) {
	if (isNaN(glb[ctrl.name])) {
		glb[ctrl.name] = 0;
	}
	if (++glb[ctrl.name] > 0) {
		jll_CtrlDisplayLayer(ctrl);
	}
}

/* Control OnMouseOut */
function jll_CtrlOMOut(ctrl) {
	if (isNaN(glb[ctrl.name])) {
		glb[ctrl.name] = 0;
	}
	if (--glb[ctrl.name] <= 0) {
		jll_CtrlHideLayer(ctrl)
	}
}

/* Control OnFocus */
function jll_CtrlOF(ctrl) {
	if (isNaN(glb[ctrl.name])) {
		glb[ctrl.name] = 0;
	}
	if (++glb[ctrl.name] > 0) {
		jll_CtrlDisplayLayer(ctrl);
	}
}

/* Control OnBlur */
function jll_CtrlOB(ctrl) {
	if (isNaN(glb[ctrl.name])) {
		glb[ctrl.name] = 0;
	}
	if (--glb[ctrl.name] <= 0) {
		jll_CtrlHideLayer(ctrl)
	}
}


/*
 * Da usare cosė:
 * <input type"text" onFocus="jll_CtrlFocus" name="xyz">
 *
 * Effetto: se esiste un layer con nome xyz_msg lo mostra a fianco del controllo
 */
function jll_CtrlDisplayLayer(ctrl)
{
	var lname = ctrl.name;
	var lobj;
	lname = lname + "_msg";
	lobj = jll_getObjByName(lname);
	if (lobj) {
		xy = jll_getOffset(ctrl);
		if (xy) {
			xy[1] -= lobj.offsetHeight;
			if (xy[1] < 0) xy[1] = 0;
			lobj.style.top = xy[1] + "px";
			lobj.style.left = xy[0] + "px";
			lobj.style.width= 150 + 'px';
			lobj.style.visibility = 'visible';
		}
	}
}


/*
 * funzione complementare a jll_CtrlFocus:
 * nasconde il layer col testo di aiuto
 */
function jll_CtrlHideLayer(ctrl)
{
	var lname = ctrl.name;
	var lobj;
	lname = lname + "_msg";
	lobj = jll_getObjByName(lname);
	if (lobj) {
		lobj.style.visibility = 'hidden';
	}
}

function jll_popWin( url, name, width, height, scroller ) {
	var outStr = 'height=' + height + ',width=' + width;
	if (scroller == true) {	outStr = outStr + ',menubar=no,toolbar=no,location=no,directories=no,status=no,scrollbars=yes,resizable=yes';} 
	else if (scroller == false) { outStr = outStr + ',menubar=no,toolbar=no,location=no,directories=no,status=no,scrollbars=no,resizable=no';} 
	else { outStr = outStr +',menubar=yes,toolbar=yes,location=yes,directories=yes,status=yes,scrollbars=yes,resizable=yes';}
	newWindow=window.open(url, name, outStr);
	return newWindow;
}
