/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

var Dialog =
{
    mouseX : 0,
    mouseY : 0,
    startX : 0,
    startY : 0,   
    dragMode : false,

    init : function()
    {
        var dialogs = Core.getElementsByClass("dialog");
        for (var i = 0; i < dialogs.length; i++) {
            Dialog.configure(dialogs[i]);
            dialogs[i].getElementsByTagName("a")[0].onclick=Dialog.close;
            dialogs[i].getElementsByTagName("div")[0].onmousemove=Dialog.move;
            dialogs[i].getElementsByTagName("div")[0].onmousedown=Dialog.initDrag;
            dialogs[i].getElementsByTagName("div")[0].onmouseup=Dialog.stopDrag;
            dialogs[i].getElementsByTagName("div")[0].onmouseout=Dialog.stopDrag;
        }
    },

    configure : function(widget)
    {
        var args = widget.getAttribute("args");
        if (args == null) return;
        var cnf = jsonParse(args);

        // Inizio la configurazione
        if (cnf.width) {
            Dialog.setWidth(widget.id, cnf.width);
        }

        if (cnf.height) {
            Dialog.setHeight(widget.id, cnf.height);
        }

        if (cnf.visible)
            Dialog.show(widget.id);
    },

    close : function()
    {
        Core.unblurPage();
        this.parentNode.parentNode.style.display = "none";
        // Impedisce di seguire il link  (es: tornare ad inizio pagina se href="#")
        return false;
    },

    show : function(dialogId, modal)
    {
        // "Offuscamento" della pagina
        if (modal) {Core.blurPage();}
        // Estrazione del dialogo
        var dialog = document.getElementById(dialogId);
        // Estrazione delle dimensioni della finestra
        var ww = Core.getWindowWidth();
        var wh = Core.getWindowHeight();
        
        // Estrazione delle dimensioni del dialogo
        var dw = parseInt(dialog.style.width);
        var dh = parseInt(dialog.style.height);
        // Calcolo le coordinate del dialogo
        var x = (ww-dw)/2;
        var y = (wh-dh)/2;

        // Aggiungo la posizione della barra verticale
        y = y + Core.getScrollTop();
        
       
        
        // Posiziono il dialogo
        dialog.style.left = x+"px";
        dialog.style.top = y+"px";
        // Mostro il dialogo
        dialog.style.display = "block";

    },

    setTitle : function(dialogId, title)
    {
        var dialog = document.getElementById(dialogId);
        var nodes = dialog.childNodes;
        for (var i = 0; i < nodes.length; i++) {
            if (Core.hasClass(nodes[i], "titleBar")) {
                nodes[i].getElementsByTagName("h1")[0].innerHTML = title;
            }
        }
    },

    setWidth : function(dialogId, w)
    {
        var dialog = document.getElementById(dialogId);
        dialog.style.width = w+"px";
    },

    setHeight : function(dialogId, h)
    {
        var dialog = document.getElementById(dialogId);
        dialog.style.height = h+"px";
    },

    setPosition : function(dialogId, x, y)
    {
        var dialog = document.getElementById(dialogId);
        dialog.style.top =  y+"px";
        dialog.style.left = x+"px";        
    },

    /** Carica nel dialogo un indirizzo web: il pannello dei contenuti diventa un iframe
     *
     */
    setUrl : function(dialogId, theUrl)
    {

        var pane = Dialog._getContentPane(dialogId);
        if (pane == null)
            return;
        var iframes = pane.getElementsByTagName("iframe");
        if (iframes.length >= 1) {
            iframes[0].setAttribute("src", theUrl);
        } else {
            Dialog._clearContentPane(pane);
            pane.appendChild(Dialog._createIFrame(theUrl));
        }
    },

    /** Carica nel dialogo <b>il contenuto</b> di un indirizzo web utilizzando una chiamata ajax:
     * il pannello dei contenuti è un semplice div
     *
     */
    setInclude : function(dialogId, theUrl)
    {
        var requester = Core.getXHR();
        var pane = Dialog._getContentPane(dialogId);
        if (pane == null)
            return;
        requester.open("GET", theUrl, true);
        requester.onreadystatechange=function() {
            if (requester.readyState == 4) {
                var txt = requester.responseText;
                // Devo estrarre tutto quello che si trova all'interno del tag body.
                // Se il tag body non viene trovato, restituisco l'intero contenuto della richiesta
                var startIdx = txt.indexOf("<body>");
                var endIdx = txt.indexOf("</body>");
                
                if (startIdx > -1) {
                    // Aggiungo 6 (il numero dei caratteri di <body>
                    txt = txt.substring(startIdx+6, endIdx)
                }

                // Ripulisco il pannello dei contenuto
                Dialog._clearContentPane(pane);

                // Inserisco il codice
                pane.innerHTML = txt;
            }
        }
        requester.send(null);
    },

    /** Carica nel dialogo il contenuto html passato come stringa nell'argomento theContent:
     * il pannello dei contenuti è un semplice div
     */
    setContent : function(dialogId, theContent)
    {
        var pane = Dialog._getContentPane(dialogId);
        if (pane == null)
            return;
        // Ripulisco il pannello dei contenuti
        Dialog._clearContentPane(pane);
        // Assegno la stringa passata
        pane.innertHTML = theContent;
    },

    initDrag : function(e)
    {
        if (!e) e = window.event; // Per internet explorer

        Dialog.mouseX = Core.getMouseX(e);
        Dialog.mouseY = Core.getMouseY(e);

        // Rileva la posizione iniziale del dialogo
        Dialog.startX = Core.getPosX(this.parentNode);
        Dialog.startY = Core.getPosY(this.parentNode);

        Dialog.dragMode = true;
    },

    stopDrag : function()
    {
        Dialog.dragMode = false;
    },
    
    move : function(e)
    {
        if (!Dialog.dragMode) return;

        if (!e) e = window.event; // Per internet explorer

        // Calcola lo spostamento dalla posizione iniziale a quella corrente
        var deltaX = Dialog.mouseX - Core.getMouseX(e);
        var deltaY = Dialog.mouseY - Core.getMouseY(e);

        // Calcola la posizione del dialogo dopo il trascinamento
        var x = Dialog.startX - deltaX;
        var y = Dialog.startY - deltaY;

        // Assegna la nuova posizione al dialogo
        Dialog.setPosition(this.parentNode.id, x, y);
    },

    _clearContentPane : function(obj) {
        while (obj.hasChildNodes()) {
            obj.removeChild(obj.lastChild);
        }
    },

    _createIFrame : function(theUrl) {
        var iframe = document.createElement("iframe");
        iframe.setAttribute("src", theUrl);
        iframe.setAttribute("frameborder", 0);
        return iframe;
    },

    _getContentPane : function(dialogId) {
        var dialog = document.getElementById(dialogId);
        if (dialog == null)
            return null;
        var divs = dialog.getElementsByTagName("div");

        for (var j = 0; j < divs.length; j++) {
            if (Core.hasClass(divs[j], "contentPane")) {
                return divs[j];
            }
        }
        return null;
    }
/*    getMouseX : function(e)
{
    var tempX = 0;
    if (!e)
        e = window.event;

    if (e.pageX) {
        tempX = e.pageX;
    }
    else if (e.clientX) {
        // Per internet explorer
        tempX = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
    }

    return tempX;
},

getMouseY : function(e)
{
    var tempY = 0;
    if (!e)
        e = window.event;
    if (e.pageY) {
        tempY = e.pageY;
    }
    else if (e.clientY) {
        // Per internet explorer
        tempY = e.clientY + document.body.scrollTop  + document.documentElement.scrollTop;
    }
    return tempY
}*/
};


Core.start(Dialog);



