/*==============================================================================

    Web Application
    Funzionalitą javascript per la gestione di widgets

    $Id: wa.js 300 2006-12-15 13:39:17Z mmanzato $
	
==============================================================================*/

// Variabili globali "private"
var wa_vspc = 0;
var wa_hspc = 0;
var wa_mouseX = 0;
var wa_mouseY = 0;

var wa_dragId = 0;              // ID oggetto in drag
var wa_dragX = 0;               // Coordinate iniziali per drag
var wa_dragY = 0;
var wa_dragX0 = 0;
var wa_dragY0 = 0;

/*------------------------------------------------------------------------------
    Ritorna un riferimento ad un elemento, in base al suo id.
    Ritorna null se l'elemento di id 'id' non viene trovato.
    Fonte: www.quirksmode.org
------------------------------------------------------------------------------*/
function wa_getElem(id)
{
    if (document.getElementById)
        return document.getElementById(id);
    else if (document.all)
        return document.all[id];
    else if (document.layers)
        return document.layers[id];
    else
        return null;
}

/*------------------------------------------------------------------------------
    Gestisce il click su un oggetto.

    Viene configurata da createZoomBox() per essere richiamata automaticamente
    quando viene premuto il pulsante sinistro del mouse.
------------------------------------------------------------------------------*/
function wa_mouseDown(evt, elemId)
{
    if (!evt) 
        var evt = window.event;
    
    var button = evt.button;
    if ((button != 0) && (button != 1))
        return false;
    
    // Recupera e salva le coordinate del wa_mouseDown relative all'oggetto
    wa_hspc = wa_vspc = 0;
    wa_getMouseXY(evt);
    wa_hspc = wa_findPosXById(elemId);
    wa_vspc = wa_findPosYById(elemId);
    wa_mouseX -= wa_hspc;
    wa_mouseY -= wa_vspc;
    return true;
}

/*------------------------------------------------------------------------------
    Salva la posizione del mouse nelle variabili globali wa_x2 e wa_y2.

    Viene configurata da createZoomBox() per essere richiamata automaticamente
    quando viene spostato il mouse.
------------------------------------------------------------------------------*/
function wa_getMouse(evt)
{
    if (!evt) 
        var evt = window.event;
        
    wa_getMouseXY(evt);
    wa_xb = wa_mouseX;
    wa_yb = wa_mouseY;
    
    var elem = wa_getElem('wa_coords');
    if (elem)
        elem.innerHTML = 'X: ' + wa_mapX + '<br />Y: ' + wa_mapY;
    
    if (wa_zooming)
        mapShowZoomBox();
    else if (wa_panning) {
        elem = wa_getElem('wa_img');
        elem.style.pixelLeft = wa_xb - wa_xa;
        elem.style.pixelTop = wa_yb - wa_ya;
    }
    
    return false;
}

/*------------------------------------------------------------------------------
    Recupera le coordinate di un evento del mouse relativamente all'oggetto.

    Salva le coordinate recuperate nelle variabili globali wa_mouseX e
    wa_mouseY.

    Tiene conto di un eventuale scroll del tag BODY.
------------------------------------------------------------------------------*/
function wa_getMouseXY(evt)
{
    var myEvent = evt ? evt : window.event;
    
    var body = document.getElementsByTagName("body").item(0);
//    alert("BODY:" + body);

    wa_mouseX = myEvent.clientX + body.scrollLeft;
    wa_mouseY = myEvent.clientY + body.scrollTop;

    // Subtract offsets from page left and top
    wa_mouseX = wa_mouseX - wa_hspc;
    wa_mouseY = wa_mouseY - wa_vspc;
}

/*------------------------------------------------------------------------------
    Determina la posizione assoluta X dell'elemento obj
    Fonte: www.quirksmode.org
------------------------------------------------------------------------------*/
function wa_findPosX(obj)
{
    var curleft = 0;
    if (obj.offsetParent) {
        while (obj.offsetParent) {
            curleft += obj.offsetLeft;
            obj = obj.offsetParent;
        }
    }
    else if (obj.x)
        curleft += obj.x;
    return curleft;
}

/*------------------------------------------------------------------------------
    Determina la posizione assoluta Y dell'elemento obj
    Fonte: www.quirksmode.org
------------------------------------------------------------------------------*/
function wa_findPosY(obj)
{
    var curtop = obj.scrollTop;
    if (obj.offsetParent) {
        while (obj.offsetParent) {
            curtop += obj.offsetTop;
            obj = obj.offsetParent;
        }
    }
    else if (obj.y)
            curtop += obj.y;
    return curtop;
}

/*------------------------------------------------------------------------------
    Determina la posizione assoluta X dell'elemento con id="<elemId>".
------------------------------------------------------------------------------*/
function wa_findPosXById(elemId)
{
    var elem = wa_getElem(elemId);
    if (elem != null)
        return wa_findPosX(elem);
}

/*------------------------------------------------------------------------------
    Determina la posizione assoluta Y dell'elemento con id="<elemId>".
------------------------------------------------------------------------------*/
function wa_findPosYById(elemId)
{
    var elem = wa_getElem(elemId);
    if (elem != null)
        return wa_findPosY(elem);
}


/*------------------------------------------------------------------------------
    Inizia il dragging di un oggetto mobile
------------------------------------------------------------------------------*/
function wa_startDrag(evt, dragId)
{
    var myEvent = evt ? evt : window.event;

    var button = myEvent.button;
    if ((button != 0) && (button != 1))
        return false;

    wa_dragId = dragId;
    wa_mouseDown(myEvent, dragId);
    wa_dragX = wa_mouseX;
    wa_dragY = wa_mouseY;
    elem = wa_getElem(dragId);
    wa_dragX0 = elem.style.pixelLeft;
    wa_dragY0 = elem.style.pixelTop;
    document.onmousemove = wa_drag;
    document.onmouseup = wa_stopDrag;
    document.onselectstart = wa_false;
}

/*------------------------------------------------------------------------------
    Inizia il dragging di un oggetto mobile
------------------------------------------------------------------------------*/
function wa_drag(evt) 
{
//    alert(wa_dragId + ': ' + wa_mouseX + ' ' + wa_mouseY);
    var myEvent = evt ? evt : window.event;

    wa_getMouseXY(myEvent);
    
    elem = wa_getElem(wa_dragId);
    elem.style.pixelLeft = wa_dragX0 + wa_mouseX - wa_dragX; 
    elem.style.pixelTop = wa_dragY0 + wa_mouseY - wa_dragY;
}

/*------------------------------------------------------------------------------
    Inizia il dragging di un oggetto mobile
------------------------------------------------------------------------------*/
function wa_stopDrag(evt) 
{
    var myEvent = evt ? evt : window.event;

    var button = myEvent.button;
    if ((button != 0) && (button != 1))
        return false;
        
    elem = wa_getElem(wa_dragId);
    webFXTreeHandler.cookies.setCookie(wa_dragId, elem.style.pixelLeft + ',' + elem.style.pixelTop);

    wa_dragId = 0;
    document.onmousemove = null;
    document.onmouseup = null;
    document.onselectstart = null;
}

/*------------------------------------------------------------------------------
    Ritorna FALSE
    Usato per disabilitare il select su mappa.
------------------------------------------------------------------------------*/
function wa_false()
{
    return false;
}

/*------------------------------------------------------------------------------
    Imposta la posizione di un oggetto pop-up quale una dialog o un note.
    - se la posizione č settata in un cookie allora la utilizza 
    - altrimenti il pop-up viene centrato rispetto all'oggetto contenitore
    Remark: the window top-left corner will be kept inside the screen.
	Requires WebFxTreeHandler for cookies (TODO: standalone)
------------------------------------------------------------------------------*/
function wa_setPopupPosition(elemId)
{
    var elem = wa_getElem(elemId);
    if (elem == null)
        return;
    coords = webFXTreeHandler.cookies.getCookie(elemId);
    var x, y;
    if (coords) {
//      alert(elemId + ': cookie');
        x = Math.floor(coords.substr(0, coords.indexOf(",")));
        y = Math.floor(coords.substr(coords.indexOf(",") + 1, coords.length));
    }
    else {
//      alert(elemId + ': no cookie');
        x = Math.floor((document.body.scrollWidth - elem.offsetWidth) / 2);
        //y = Math.floor((document.body.scrollHeight - elem.offsetHeight) / 2);
        y = 100;
	}
	
	if (x < 0)
	    x = 0;
	if (y < 0)
		y = 0;

//	alert(x + "px, " + y + "px");
    elem.style.left = x + 'px';
    elem.style.top = y + 'px';
}


//------------------------------------------------------------------------------
//!	Open a pop-up
/*!	Example call:
    <a href="http://site.it" 
       onclick="NewWindow(this.href,'walkie','800','600','yes','center','no','no','no','no','no','no');return false" 
       onfocus="this.blur()">YourLinkText</a> 
*/
//------------------------------------------------------------------------------
function wa_newWindow(mypage,myname,w,h,scroll,pos,res,loc,dir,stat,menu,tool)
{
	if (pos == "random") {
		LeftPosition = (screen.width)?Math.floor(Math.random()*(screen.width-w)):100;
		TopPosition = (screen.height)?Math.floor(Math.random()*((screen.height-h)-75)):100;
	}
	if (pos == "center") {
		LeftPosition = (screen.width)?(screen.width-w)/2:100;
		TopPosition = (screen.height)?(screen.height-h)/2:100;
	}
	else if ((pos != "center" && pos != "random") || pos==null){
		LeftPosition = 20;
		TopPosition = 20;
	}

	settings = 'width='+w+',height='+h+',scrollbars='+scroll+
				',top='+TopPosition+',left='+LeftPosition+',resizable='+res+
				',location='+loc+',directories='+dir+',status='+stat+
				',menubar='+menu+',toolbar='+tool+'';

	var win = window.open(mypage, myname, settings);
    win.focus();
}

//------------------------------------------------------------------------------
//	Assegna il focus (al momento non utilizzato) 
//	es: <body onLoad="setFocus('login')">
//------------------------------------------------------------------------------
function wa_setFocus(ogg) 
{
    var btn = wa_getElem(ogg);
    if (ogg)
		ogg.click();
}

//------------------------------------------------------------------------------
//	Sottomette il form, cliccando ENTER, simulando il click all'input button
//------------------------------------------------------------------------------
function wa_enter(button) 
{
	if (window.event && window.event.keyCode == 13) {
	    var btn = wa_getElem(button);
	    if (btn)
			btn.click();
	} else {
		return true;
	}
}

/*------------------------------------------------------------------------------
    Auto Textbox Tab 
------------------------------------------------------------------------------*/
function wa_tab(AInput, AEvent)
{
	var KeyCode = (navigator.appName.indexOf("Netscape") != -1) ? AEvent.which : AEvent.keyCode;
	var NavKeys = [0,8,9,16,17,18,27,35,36,37,38,39,40,46];
	var obj;
	if(AInput.value.length >= AInput.maxLength && !KeyInNavKeys(NavKeys, KeyCode)) {
		obj = AInput.form[(GetFieldIndex(AInput)+1) % AInput.form.length];
		while (obj.type == 'hidden'){
			obj = AInput.form[(GetFieldIndex(obj)+1) % AInput.form.length];
		}
		obj.focus();
	}
	function wa_keyInNavKeys(ANavKeys, AKeyCode) { /*****/
		var found = false, i = 0;
		while(!found && i < ANavKeys.length)
			if(ANavKeys[i] == AKeyCode)
				found = true;
			else
				i++;
		return found;
	}
	function wa_getFieldIndex(AInput) { /*****/
		var j = -1, i = 0, found = false;
		while (i < AInput.form.length && j == -1)
			if (AInput.form[i] == AInput)
				j = i;
			else
				i++;
		return j;
	}
}

/*------------------------------------------------------------------------------
	Toggle visibility between two elements
	Requires WebFxTreeHandler for cookies (TODO: standalone)
------------------------------------------------------------------------------*/
function wa_toggleElements(id, show)
{
    if (show) {
        wa_getElem(id + '_title').style.display = 'none';
        wa_getElem(id + '_body').style.display = 'block';
    }
    else {
        wa_getElem(id + '_title').style.display = 'block';
        wa_getElem(id + '_body').style.display = 'none';
    }
    webFXTreeHandler.cookies.setCookie('toggler_' + id, show ? '1' : '0');
}

/*------------------------------------------------------------------------------
	Restore the toggler status from cookies
	Requires WebFxTreeHandler for cookies (TODO: standalone)
------------------------------------------------------------------------------*/
function wa_toggleElementsRestore(id, defaultOpen)
{
    var o = webFXTreeHandler.cookies.getCookie('toggler_' + id);
    if ((o != "0") && (o != "1")) {
        if (defaultOpen)
            o = '1';
        else
            o = '0';
    }
    wa_toggleElements(id, (o == '1') ? true : false);
}

/*==============================================================================
	Fine del file
==============================================================================*/

