var publishingREQ = false;
var pieceIsDragging = false;
var vsmPieceMenuIsOpen = false;
var vsmeditmode;
var vsmCheckPageSize = 0;
var vsmOverPageSize = 0;
var vsmEOLcurrentObj; // Guarda el objeto que se está editando en una variable global para poder accederlo despues del llamado Ajax
var vsmajaxmsgvisible; // Ajax Status Message ------------------------------------------ 
var vsmPieceZIndex=0;

function changeEditMode() {
    if (vsmeditmode) {
        document.all.vsmeditmodeoption.innerHTML = "<img border=0 width=15 height=15 hspace=2 align=absmiddle src=\"/admin/img/icons15/exitedit.gif\">Salir del modo edición";
        document.all.editmodeframe.src = "/admin/common/switchEditMode.php?editing";
    } else {
        document.all.vsmeditmodeoption.innerHTML = "<img border=0 width=15 height=15 hspace=2 align=absmiddle src=\"/admin/img/icons15/edit.gif\">Editar página";
        document.all.editmodeframe.src = "/admin/common/switchEditMode.php";
    }
    var divTags = document.getElementsByTagName("div") ; 
    for (var i = 0; i < divTags.length ; i++) { 
        if (divTags[i].id =="vsmcontextmenu" || divTags[i].id =="vsmimgbutton") {
            if (vsmeditmode) {
                divTags[i].style.display="";
            } else {
                divTags[i].style.display="none";
            }
        } 
    } 
}

function refreshEditMode() {
    if (vsmeditmode) {
        document.all.editmodeframe.src = "/admin/common/switchEditMode.php?editing&refresh";
    } else {
        document.all.editmodeframe.src = "/admin/common/switchEditMode.php?refresh";
    }
} 

function switchEditMode (refresh) {
    vsmeditmode = !vsmeditmode;
    if (refresh) {
        refreshEditMode();
    } else {
        changeEditMode();
    }
}

function publishingResult() {
    if (publishingREQ.readyState == 4) {
        if (publishingREQ.status == 200) {
            var result = publishingREQ.responseText;
            //Trim the results
            result = result.replace( new RegExp( "^[\\s]+|[\\s]+$", "g"), "" );
            alert(result);
        } else {
            alert('No fue posible realizar la operación');
        }
        vsmEnablePublish();
    }
}

function xmlreq(){
    if(window.XMLHttpRequest){
        publishingREQ = new XMLHttpRequest();
    }else if(window.ActiveXObject){
           publishingREQ = new ActiveXObject("Msxml2.XMLHTTP");
    }
    return(publishingREQ);
}

function doPublish(){
    publishingREQ = xmlreq();
    publishingREQ.onreadystatechange = publishingResult;
    var publishbtn = document.getElementById('vsmpublishbtn');
    if (publishbtn) {
        var data = publishbtn.getAttribute('url');
        var url = '/cache/publish.php?url='+data;
        publishingREQ.open("GET", url, true);
        publishingREQ.setRequestHeader("Connection", "close");
        publishingREQ.send(null);
    }
}

function vsmEnablePublish(){
    var publishbtn = document.getElementById('vsmpublishbtn');
    if (publishbtn){
        var publishimg = document.getElementById('vsmpublishimg');
        publishbtn.onclick = publish;
        publishbtn.disabled = false;
        publishimg.style.filter = 'gray(grayscale=0)';
    }
}

function vsmDisablePublish(){
    var publishbtn = document.getElementById('vsmpublishbtn');
    if (publishbtn){
        var publishimg = document.getElementById('vsmpublishimg');
        publishbtn.onclick = null;
        publishbtn.disabled = true;
        publishimg.style.filter = 'gray(grayscale=1)';
    }
}

function publish() {
    vsmDisablePublish();
    var defaultText ='¿Está seguro de publicar esta página?';
    var ok;
    if (vsmCheckPageSize > 0  && vsmOverPageSize > 0){
        if (vsmCheckPageSize ==1){
            ok = confirm('La página tiene un sobrepeso de ' + vsmOverPageSize + ' KB \r\n' + defaultText);
        }else{
            alert('La página no puede publicarse porque tiene un sobrepeso de ' + vsmOverPageSize + ' KB.\r\nReduzca el tamaño de la página e intente nuevamente. ');
            vsmEnablePublish();
            return;
        }
    }else{
        ok = confirm(defaultText);
    }

    if (ok) {
        if (window.savecolumnOrder) {
             savecolumnOrder(true);
        }
        else {
            doPublish();
        }
    } else {
        vsmEnablePublish();
    }
}

function vsmPieceOver(obj) {
    // Si no está draggeando
    if(!pieceIsDragging){
        // Cuando el mouse pasa por encima del menú de una pieza
        vsmPieceZIndex = obj.parentNode.style.zIndex;                 // Guarda el zindex del contenedor del menu
        if (vsmPieceZIndex===0){ obj.parentNode.style.zIndex = 8000;}    // Pone el contenedor del menu arriba de todo
        obj.childNodes[1].style.display='';                            // Muestra las opciones
        vsmPieceMenuIsOpen = true;
    }
}

function vsmPieceOut(obj) {
    // Cuando el mouse sale de encima del menú de una pieza
    vsmPieceZIndex=0;
    obj.childNodes[1].style.display='none';          // Oculta las opciones
    obj.parentNode.style.zIndex = vsmPieceZIndex; // Restaura el zindex del contenedor del menú
    vsmPieceMenuIsOpen = false;
}

function vsmMsgBoxAlwaysVisible(id) {
    var ns = (navigator.appName.indexOf("Netscape") != -1) || window.opera;
    var vsmajaxmsgObj = document.getElementById(id);
    var vsmajaxmsgY = vsmajaxmsgObj.offsetTop;
    vsmajaxmsgObj.y = vsmajaxmsgY;
    window.stayVisible = function (){
        var pY = ns ? self.pageYOffset : document.documentElement.scrollTop;
        vsmajaxmsgObj.y += (pY + vsmajaxmsgY  - vsmajaxmsgObj.y)/8;
        vsmajaxmsgObj.style.top=vsmajaxmsgObj.y+"px";
        vsmajaxmsgvisible= setTimeout("stayVisible()", 10);
    };
    stayVisible();
}

function vsmShowMsg(msg, icon) {
    // Muestra el fondo
    var bgdiv=document.createElement('DIV');
    document.body.appendChild(bgdiv);
    bgdiv.id = 'vsmajaxbkg';
    bgdiv.style.width= document.body.clientWidth+'px';
    bgdiv.style.height= document.body.clientHeight+'px';
    // Muestra el mensaje
    var msgdiv = document.createElement('DIV');
    document.body.appendChild(msgdiv);
    msgdiv.id= 'vsmajaxmsg';
    msgdiv.style.left = Math.floor(document.documentElement.clientWidth/2 - msgdiv.offsetWidth/2)+'px';
    msgdiv.style.top = Math.floor(document.documentElement.clientHeight/2 - msgdiv.offsetHeight/2)+'px';
    msgdiv.innerHTML = '<img align=left src="/admin/img/layout/progress2.gif" width=25 height=25><div id=vsmajaxmsg_text>'+msg+'</div>';
    vsmMsgBoxAlwaysVisible('vsmajaxmsg');
}

function vsmEditOnLineSave(obj) {
    vsmEOLcurrentObj = obj;
    // Guarda los cambios del elemento en la base de datos
    var objectType = obj.getAttribute('vsmot');
    var objectID = obj.getAttribute('vsmid');
    var fieldname = obj.getAttribute('vsmfld');
    var fieldtype = obj.getAttribute('vsmeol');
    var value;
    switch(fieldtype) {
        case 'html': value = obj.innerHTML; break;
        case 'textarea': 
        case 'text':
            value = '';
            for(var i=0;i<obj.childNodes.length; i++) {
                if(obj.childNodes[i].nodeType==3) {
                    value+= obj.childNodes[i].nodeValue;
                } else {
                    if(obj.childNodes[i].nodeType==1 && obj.childNodes[i].tagName=='BR' && fieldtype=='textarea'){value+= '\r\n';}
                }
            }
            break;
    }
    var data = 'vsmot='+objectType+'&vsmid='+objectID+'&vsmfld='+fieldname+'&vsmtype='+fieldtype+'&value='+escape(value);
    vsmShowMsg('Guardando...');
    vsmHttpRequest('/admin/common/object/saveEditOnLineFA.php', 'vsmEditOnLineSaveOK', 'vsmEditOnLineSaveError', false, null, 'POST', data);
}

function vsmEditOnLineCancelChanges(obj) {
    // Cancela los cambios porque cancelo el usuario o error al guardar
    obj.innerHTML = obj.innerHTML= obj.getAttribute('vsminnerHTML');
    obj.removeAttribute('vsminnerHTML');
}

function vsmEditOnLineOnBlur() {
    if(this.getAttribute('vsminnerHTML') != this.innerHTML) {
        var resp= confirm('¿Quiere guardar los cambios?');
        if (resp) {
            vsmEditOnLineSave(this);
        } else {
            vsmEditOnLineCancelChanges(this);
        }
    }
    this.className = this.className.replace(' vsmonlineeditingfocus','');  
    return false;
//    window.status = window.event.toElement.tagName;
//    var blurtarget = window.event.srcElement;
//    if(blurtarget != this.parentNode) {
//        
//        
//        
//        var savebutton = document.getElementById('vsmEOLSaveButton');
//        if (savebutton) savebutton.parentNode.removeChild(savebutton);
//    }
}

function vsmEditOnLineOnKeyPress() {
    if (event.keyCode==13) {
        var fieldtype=this.getAttribute('vsmeol');
        switch(fieldtype) {
            case 'html':
                return false;
            case 'textarea':
                var sel = this.document.selection.createRange();
                sel.pasteHTML('<br>');
                window.event.cancelBubble = true; 
                window.event.returnValue = false; 
                sel.select(); 
                sel.moveEnd("character", 1); 
                sel.moveStart("character", 1); 
                sel.collapse(false); 
                return false;
            case 'text':
                document.body.focus();
                return false;
        }
    } else if (event.keyCode===27) {
        document.body.focus();
    }
}

function vsmEditOnLineOnPaste() {
    var fieldtype =this.getAttribute('vsmeol');
    switch(fieldtype) {
            case 'html':
                return false;
            case 'textarea':
                return false;
            case 'text':
                return false;
    }
}

function vsmEditOnLineOnFocus() {
    this.className = this.className.replace(' vsmonlineeditingfocus',''); 
    this.className += ' vsmonlineeditingfocus' ;
    this.setAttribute('vsminnerHTML', this.innerHTML);
/*
    var savebutton = document.getElementById('vsmEOLSaveButton');
    if (!savebutton) {
        var savebutton = document.createElement('DIV');
        this.parentNode.insertBefore(savebutton, this);
        savebutton.id = 'vsmEOLSaveButton';
        savebutton.className = 'vsmeolsavebutton';
        savebutton.onclick= vsmEditOnLineSave;
    }
    savebutton.style.left= (this.offsetLeft + this.offsetWidth) + 'px';
    */
}

// Edit onLine 
function vsmMakeEditable(obj, status) {
    // Activa/desactiva el modo editable de un elemento
    if(status) {
        // Si el elemento no es HTML
        if(obj.getAttribute('vsmeol') != 'html') {
            // Mira si el elemento editable tiene un <A> adentro, en ese caso pasa las propiedades de edición al <A>
            if ((obj.childNodes.length==1) && (obj.childNodes[0].nodeType==1) && (obj.childNodes[0].tagName=='A')) {
                obj.childNodes[0].setAttribute('vsmot', obj.getAttribute('vsmot'));
                obj.removeAttribute('vsmot');
                obj.childNodes[0].setAttribute('vsmid', obj.getAttribute('vsmid'));
                obj.removeAttribute('vsmid');
                obj.childNodes[0].setAttribute('vsmfld', obj.getAttribute('vsmfld'));
                obj.removeAttribute('vsmfld');
                obj.childNodes[0].setAttribute('vsmeol', obj.getAttribute('vsmeol'));
                obj.removeAttribute('vsmeol');
                obj = obj.childNodes[0];
//                obj.style.width='100%';
            }
            // Elimina cualquier código HTML, si es textarea mantiene los <br>
            //if(obj.getAttribute('vsmeol') == 'textarea') obj.innerHTML = obj.innerHTML.replace(/<br>/gim, '#br#');
            //obj.innerHTML = obj.innerText;
            //if(obj.getAttribute('vsmeol') == 'textarea') obj.innerHTML = obj.innerHTML.replace(/#br#/gim, '<br>');
        }
        obj.contentEditable = true;
        obj.setAttribute('vsmonfocus', obj.onfocus);
        obj.setAttribute('vsmonblur', obj.onblur);
        obj.setAttribute('vsmonkeypress', obj.onkeypress);
        obj.setAttribute('vsmonpaste', obj.onpaste);
        obj.className += ' vsmonlineediting'
        obj.onfocus = vsmEditOnLineOnFocus;
        obj.onblur = vsmEditOnLineOnBlur;
        obj.onkeypress = vsmEditOnLineOnKeyPress;
        obj.onpaste = vsmEditOnLineOnPaste;
    } else {
        obj.contentEditable = false;
        obj.className = obj.className.replace(' vsmonlineediting','');
        obj.onfocus = obj.getAttribute('vsmonfocus');
        obj.onblur = obj.getAttribute('vsmonblur');
        obj.onkeypress = obj.getAttribute('vsmonkeypress');
        obj.onpaste = obj.getAttribute('vsmonpaste');
        obj.removeAttribute('vsmonfocus');
        obj.removeAttribute('vsmonblur');
        obj.removeAttribute('vsmonkeypress');
        obj.removeAttribute('vsmonpaste');
    }
}

function vsmChildNodesEditable(obj, status) {
    // Recorre todo el subarbol de un objeto viendo que elemento tiene la propiedad vsmfld para activar/desactivar el modo editable
    var length = obj.childNodes.length;
    for(var i=0;i<length;i++) {
        var child = obj.childNodes[i];
        if(child.nodeType == 1) {
            // Solo para elementos/tags
            if(child.getAttribute('vsmeol')) {
                vsmMakeEditable(child, status);
            } else {
                vsmChildNodesEditable(child, status);
            }
        }
    }
}

function vsmOnLineEditionMode(objid, contentMenuObj) {
    // Enciende el modo editar en linea para una pieza 
    // objid = id de la pieza en el DOM
    // Menu item, objeto del dom que representa la opción "Editar en linea" del menú
    var obj = document.getElementById(objid);
    if(obj) {
        if(obj.getAttribute('vsmediting')) {
            obj.removeAttribute('vsmediting');
            vsmChildNodesEditable(obj, false);
            contentMenuObj.innerHTML = '<img src="/admin/img/icons16/editonline.gif" align=absmiddle> Editar en línea';
            drag_elements = true;
        } else {
            obj.setAttribute('vsmediting',1);
            vsmChildNodesEditable(obj, true);
            contentMenuObj.innerHTML = '<img src="/admin/img/icons16/editonline.gif" align=absmiddle> Salir del modo editar en línea';
            drag_elements = false;
        }
    }
    vsmPieceOut(contentMenuObj.parentNode.parentNode);
}

function vsmHideMsg() {
    clearTimeout(vsmajaxmsgvisible);
    var bkgdiv=document.getElementById('vsmajaxbkg');
    var msgdiv=document.getElementById('vsmajaxmsg');
    if (bkgdiv) {document.body.removeChild(bkgdiv);}
    if (msgdiv) {document.body.removeChild(msgdiv);}
}

function vsmEditOnLineSaveOK(response) {
    // Guardó los cambios OK
    vsmHideMsg();
    if(response) {alert(response);}
}

function vsmEditOnLineSaveError(response) {
    // Error al guardar los cambios
    vsmHideMsg();
    alert(response);
    vsmEditOnLineCancelChanges(vsmEOLcurrentObj);
}

function vsmShowMsg(msg, icon) {
    // Muestra el fondo
    var bgdiv=document.createElement('DIV');
    document.body.appendChild(bgdiv);
    bgdiv.id = 'vsmajaxbkg';
    bgdiv.style.width= document.body.clientWidth+'px';
    bgdiv.style.height= document.body.clientHeight+'px';
    // Muestra el mensaje
    var msgdiv = document.createElement('DIV');
    document.body.appendChild(msgdiv);
    msgdiv.id= 'vsmajaxmsg';
    msgdiv.style.left = Math.floor(document.documentElement.clientWidth/2 - msgdiv.offsetWidth/2)+'px';
    msgdiv.style.top = Math.floor(document.documentElement.clientHeight/2 - msgdiv.offsetHeight/2)+'px';
    msgdiv.innerHTML = '<img align=left src="/admin/img/layout/progress2.gif" width=25 height=25><div id=vsmajaxmsg_text>'+msg+'</div>';
    vsmMsgBoxAlwaysVisible('vsmajaxmsg');
}
