/********************************************************************************
Copyright (C)  2001-2003 Datarroba
All rights reserved. Unauthorized usage, reproduction, modification and
distribution of this software is strictly prohibited.
Company....: Datarroba - Consultoria Informática, Lda.
Author.....: Paulo Matos
File.......: utilDCM.js
Version....: 4.1
Description: DCM editing and functionalities
********************************************************************************/

var dcmMenu;

var editDiv;
var editDivMarquee;
var editDivMarqueeDisplay = false;
var editDivButtons;
var editFocus;
var editButtonsTimeout;

var BTN_NEW	= 0;
var BTN_CHANGE	= 0;
var BTN_DELETE	= 1;
var BTN_ACCESS	= 1;
var btnNew;
var btnChange;
var btnDelete;
var btnAccess;
var linkNew;
var linkChange;
var linkDelete;
var linkAccess;

var currentX = currentY = 0;
var whichEl = null;
var doClick = false;

// myObj é do tipo DIV Object
function getXNotWidth100(myObj) {
        return (myObj.getAttribute("xNotWidth100") != null);
}

// myObj é do tipo DIV Object
function getXNotHeight100(myObj) {
        return (myObj.getAttribute("xNotHeight100") != null);
}

// myObj é do tipo DIV Object
function getXAbsoluteParent(myObj) {
        return myObj.getAttribute("xAbsoluteParent");
}

function grabEl() {
        whichEl = event.srcElement;

        while (!whichEl.draggable) {
                whichEl = whichEl.parentElement;
                if (whichEl == null) { return }
        }

        doClick = true;

        whichEl.style.borderStyle = "inset";
        whichEl.style.pixelLeft = whichEl.offsetLeft;
        whichEl.style.pixelTop = whichEl.offsetTop;

        currentX = (event.clientX + document.body.scrollLeft);
        currentY = (event.clientY + document.body.scrollTop);
}

function moveEl() {
        if (whichEl == null) { return };

        doClick = false;

        newX = (event.clientX + document.body.scrollLeft);
        newY = (event.clientY + document.body.scrollTop);

        distanceX = (newX - currentX);
        distanceY = (newY - currentY);
        currentX = newX;
        currentY = newY;

        whichEl.style.pixelLeft += distanceX;
        whichEl.style.pixelTop += distanceY;
        if (whichEl.style.pixelLeft + whichEl.clipLeft < document.body.scrollLeft) {
                whichEl.style.pixelLeft = document.body.scrollLeft - whichEl.clipLeft;
        }
        if (whichEl.style.pixelTop + whichEl.clipTop < document.body.scrollTop) {
                whichEl.style.pixelTop = document.body.scrollTop - whichEl.clipTop;
        }
        event.returnValue = false;
}

function checkEl() {
        if (whichEl!=null) { return false }
}

function dropEl() {
        if (whichEl == null){return}

        whichEl.style.borderStyle = "outset";

        dropLeft = event.clientX + document.body.scrollLeft;
        dropTop = event.clientY + document.body.scrollTop;

        whichEl = null;

        if(doClick)
                clickEl();
}

function clickEl() {
        opener.focus();
}

function onLoadDCM() {
        try {
                if(opener && (opener.location.host == location.host))
                        dcmMenu = opener;
        }
        catch(e) {}
	if((parent.location != location) && 
	   (parent.location.host == location.host) &&
	   (window.name == "main"))
		dcmMenu = parent.frames.menu;
//dcmMenu=true;
        if(dcmMenu) {
                var editLeft;
                var editTop;
                var editWidth;
                var editHeight;

                if(opener)
                        document.body.insertAdjacentHTML(
                                "afterBegin",
                                "<div style='position: absolute; top: 2; left: 2;'" +
                                " style='cursor: hand; border: 2 outset; z-index: 2;'" +
                                " draggable='true'" +
                                "><img border='0' src='/dcm/images/btn_logo.jpg'></div>");

		document.body.insertAdjacentHTML(
			"afterBegin",
                        "<div id='editDivButtons' onmouseout='try { document.all(this.xSourceIndex).onmouseout(); } catch(e) {};'>" +
                        "<table border='0' cellspacing='1' cellpadding='0'>" +
                        "<tr><td colspan='2' class='editDivButtonsHeader'>SELECCIONE</td></tr>" +
                        "<tr><td><input type='image' id='btnNew' alt='Novo' src='/dcm/images/btn_dcm_new.gif' class='editDivBtn' xBtnMouseOver='-2'" +
                        " onclick='editClick(BTN_CHANGE, editDivButtons.xSourceIndex);'" +
                        " onmouseout='try { document.all(parentElement.xSourceIndex).onmouseout(); } catch(e) {};'/></td>" +
                        "<td class='editDivButtonsLink'><a id='linkNew' href='javascript:;' onclick='btnNew.click(); return false;'>NOVO</a></td></tr>" +
                        "<tr><td><input type='image' id='btnChange' alt='Editar' src='/dcm/images/btn_dcm_change.gif' class='editDivBtn' xBtnMouseOver='-2'" +
                        " onclick='editClick(BTN_CHANGE, editDivButtons.xSourceIndex);'" +
                        " onmouseout='try { document.all(parentElement.xSourceIndex).onmouseout(); } catch(e) {};'/></td>" +
                        "<td class='editDivButtonsLink'><a id='linkChange' href='javascript:;' onclick='btnChange.click(); return false;'>EDITAR</a></td></tr>" +
                        "<tr><td><input type='image' id='btnDelete' alt='Apagar' src='/dcm/images/btn_dcm_delete.gif' class='editDivBtn' xBtnMouseOver='-2'" +
                        " onclick='editClick(BTN_ACCESS, editDivButtons.xSourceIndex);'" +
                        " onmouseout='try { document.all(parentElement.xSourceIndex).onmouseout(); } catch(e) {};'/></td>" +
                        "<td class='editDivButtonsLink'><a id='linkDelete' href='javascript:;' onclick='btnDelete.click(); return false;'>APAGAR</a></td></tr>" +
                        "<tr><td><input type='image' id='btnAccess' alt='Permissões' src='/dcm/images/btn_dcm_access.gif' class='editDivBtn' xBtnMouseOver='-2'" +
                        " onclick='editClick(BTN_ACCESS, editDivButtons.xSourceIndex);'" +
                        " onmouseout='try { document.all(parentElement.xSourceIndex).onmouseout(); } catch(e) {};'/></td>" +
                        "<td class='editDivButtonsLink'><a id='linkAccess' href='javascript:;' onclick='btnAccess.click(); return false;'>PERMISSÕES</a></td></tr></table></div>");
                editDivButtons = document.all.editDivButtons;
		btnNew	   = document.all.btnNew;
		btnChange  = document.all.btnChange;
		btnDelete  = document.all.btnDelete;
		btnAccess  = document.all.btnAccess;
		linkNew	   = document.all.linkNew;
		linkChange = document.all.linkChange;
		linkDelete = document.all.linkDelete;
		linkAccess = document.all.linkAccess;
                onLoadGUI();

                editDiv = objectToArray(document.all.editDiv);
                for(var i = 0; i < editDiv.length; i++) {
                        editWidth = editDiv[i].offsetWidth;
                        if(!getXNotHeight100(editDiv[i]))
                                editDiv[i].style.height = "100%";
                        editHeight = editDiv[i].offsetHeight;
                        editTop = DL_GetElementTop(editDiv[i], getXAbsoluteParent(editDiv[i]));
       	                editDiv[i].style.styleFloat = "left";
               	        editLeft = DL_GetElementLeft(editDiv[i], getXAbsoluteParent(editDiv[i]));
                        if(getXNotWidth100(editDiv[i]))
                                editWidth = editDiv[i].offsetWidth;
                        //alert(editHeight+"\n"+editDiv[i].parentElement.parentElement.outerHTML);
                        editDiv[i].insertAdjacentHTML(
                                "beforeBegin",
                                "<div id='editDivMarquee' value='" + editDiv[i].value +
                                "' onmouseover='editOver(this); document.body.focus();' onmouseout='editOut(this);'" +
                                " style='width: " + editWidth +
                                "; height: " + editHeight +
                                "; left: " + editLeft +
                                "; top: " + editTop +
                                "'></div>");
                        editDiv[i].style.height = "";
                        editDiv[i].style.styleFloat = "";
                        // para voltar a mostrar os que estão lá dentro
                        if(editDiv[i].all.editDiv)
                                editDiv[i].style.width = "100%";

                        var linksLength = editDiv[i].all.tags("A").length;
                        for(var j = 0; j < linksLength; j++) {
                                editDiv[i].all.tags("A")[j].style.position = "relative";
                                editDiv[i].all.tags("A")[j].style.zIndex = 1;
                        }
                }
                editDivMarquee = objectToArray(document.all.editDivMarquee);
                var editValue;
                for(var i = 0; i < editDivMarquee.length; i++) {
			editDivMarquee[i].xSourceIndex = editDivMarquee[i].sourceIndex;
			editValue = editDivMarquee[i].value.split("/");
		        if(editValue[0] == "s") {
		        	editDivMarquee[i].xIsSection = true;
		        	editDivMarquee[i].className = "editDivMarqueeSection";
		        }
		        else {
		        	editDivMarquee[i].className = "editDivMarqueeContent";
		        }
		        editDivMarquee[i].xValue = editValue[1];
		}

                document.onmousemove = moveEl;
                document.onselectstart = checkEl;
                document.onmousedown = grabEl;
                document.onmouseup = dropEl;
                document.body.onresize = function() {
                        for(var i = 0; i < editDiv.length; i++) {
                                editDiv[i].previousSibling.style.position = "";
                                editDiv[i].previousSibling.style.position = "absolute";
                        }
                }
                document.body.onkeydown = function() {
                	if(event.ctrlKey && editFocus)
                		editOver(editFocus);
                        if((event.keyCode == 27) && editFocus) {
                                editFocus.style.backgroundColor = "";
				editDivButtons.style.top = -1000;
				editDivButtons.xSourceIndex = "";
			}
                        if(event.shiftKey) {
                                for(var i = 0; i < editDivMarquee.length; i++) {
                                        if(editDivMarqueeDisplay) {
                                                editOut(editDivMarquee[i], true);
                                                editDivMarquee[i].onmouseout = function() {
                                                        editOut(this);
                                                }
                                        }
                                        else {
                                                editOver(editDivMarquee[i], true);
                                                editFocus = null;
                                        }
                                }
                                editDivMarqueeDisplay = !editDivMarqueeDisplay;
                        }
                }
        }
}

function editButtons(eventX, eventY) {
	clearTimeout(editButtonsTimeout);

        if(editFocus.xIsSection) {
		editFocus.style.backgroundColor = "#CCCCCC";
        	enableBtn(btnNew, dcmMenu.enableSectionNew);
        	enableBtn(btnChange, dcmMenu.enableSectionChange);
        	enableBtn(btnDelete, dcmMenu.enableSectionDelete);
        	enableBtn(btnAccess, dcmMenu.enableSectionProfileAdd);
        	enableLink(linkNew, dcmMenu.enableSectionNew);
        	enableLink(linkChange, dcmMenu.enableSectionChange);
        	enableLink(linkDelete, dcmMenu.enableSectionDelete);
        	enableLink(linkAccess, dcmMenu.enableSectionProfileAdd);
        	btnNew.title = btnNew.alt + " Secção";
        	btnChange.title = btnChange.alt + " Secção";
        	btnDelete.title = btnDelete.alt + " Secção";
        	btnAccess.parentElement.parentElement.style.display = "";
        }
        else {
		editFocus.style.backgroundColor = "#DDDD00";
        	enableBtn(btnNew, dcmMenu.enableContentNew);
        	enableBtn(btnChange, dcmMenu.enableContentChange);
        	enableBtn(btnDelete, dcmMenu.enableContentDelete);
        	enableLink(linkNew, dcmMenu.enableContentNew);
        	enableLink(linkChange, dcmMenu.enableContentChange);
        	enableLink(linkDelete, dcmMenu.enableContentDelete);
        	btnNew.title = btnNew.alt + " Conteúdo";
        	btnChange.title = btnChange.alt + " Conteúdo";
        	btnDelete.title = btnDelete.alt + " Conteúdo";
        	btnAccess.parentElement.parentElement.style.display = "none";
        }
	editDivButtons.style.left = (eventX - 17 < document.body.scrollLeft)?
					document.body.scrollLeft:
					(eventX - 17);
	editDivButtons.style.top = (eventY - 61 < document.body.scrollTop)?
					document.body.scrollTop:
					(eventY - 61);
	editDivButtons.xSourceIndex = editFocus.xSourceIndex = editFocus.sourceIndex;
}

function editOver(obj, showAllMarquee) {
        obj.style.filter = "Alpha(Opacity=50)";
	if(editFocus)
		if(editFocus.sourceIndex == obj.sourceIndex) {
        		editButtons(event.clientX + document.body.scrollLeft,
        			    event.clientY + document.body.scrollTop);
        		return;
        	}
		else {
			editOut(editFocus);
		}
        if(!showAllMarquee)
        	obj.onmousemove = function() {
        		clearTimeout(editButtonsTimeout);
        		editButtonsTimeout =
        			setTimeout('editButtons(' + (event.clientX + document.body.scrollLeft) + ',' +
        						    (event.clientY + document.body.scrollTop) + ');', 500);
        	}
        editFocus = obj;
}

function editOut(obj, hideAllMarquee) {
	var eventToObj = event.toElement;

	if(hideAllMarquee || !eventToObj || 
	   (obj.xSourceIndex != getParentObject(eventToObj, "div", "editDivButtons").xSourceIndex)) {
	        if(editFocus) {
	                editFocus.style.backgroundColor = "";
			editDivButtons.style.top = -1000;
			editDivButtons.xSourceIndex = "";
		}
	        editFocus = null;
	        if(!editDivMarqueeDisplay || hideAllMarquee)
	                obj.style.filter = "Alpha(Opacity=0)";
	}

	clearTimeout(editButtonsTimeout);
}

function editClick(btnAction, objSourceIndex) {
	var obj = document.all(objSourceIndex);

        var url;

        var value = obj.value.split("/");
        switch(btnAction) {
        	case BTN_CHANGE:
	        	if(obj.xIsSection)
		                url = "/dcm/mvc/dialogFrame2.jsp?&hidIdSection=" + obj.xValue + "&uriAction=../mvc/main.jsp&idEventName=GDCM%2CSectionChange&title=Alterar%2520Sec%2525E7%2525E3o&uriTop=dialogTop.jsp&uriTarget=window";
		        else
		                url = "/dcm/mvc/dialogFrame2.jsp?&hidIdContent=" + obj.xValue + "&uriAction=../mvc/main.jsp&idEventName=GDCM%2CContentChange&title=Alterar%2520Conte%2525FAdo&uriTop=dialogTop.jsp&uriTarget=window";
		        break;
		case BTN_ACCESS:
			//alert(document.cookie);
			url = "/dcm/mvc/dialogFrame2.jsp?&hidIdSection=" + obj.xValue + "&uriAction=../mvc/main.jsp&idEventName=GDCM%2CSectionProfileAdd&title=Sec%2525E7%2525E3o - Perfis&uriTop=dialogTop.jsp&uriTarget=window";
			break;
	}

        openEdit(url, "", true);

        event.returnValue = false;
}

function DL_GetElementLeft(eElement, eParId)
{
    if (!eElement && this)                       // if argument is invalid
    {                                            // (not specified, is null or is 0)
        eElement = this;                         // and function is a method
    }                                            // identify the element as the method owner

    var nLeftPos = eElement.offsetLeft;          // initialize var to store calculations
    var eParElement = eElement.offsetParent;     // identify first offset parent element
    while ((eParElement != null) && (!eParId || (eParElement.id != eParId)))
    {                                            // move up through element hierarchy
        nLeftPos += eParElement.offsetLeft;      // appending left offset of each parent
        eParElement = eParElement.offsetParent;  // until no more offset parents exist
    }
    return nLeftPos;                             // return the number calculated
}


function DL_GetElementTop(eElement, eParId)
{
    if (!eElement && this)
    {
        eElement = this;
    }

    var nTopPos = eElement.offsetTop;
    var eParElement = eElement.offsetParent;
    while ((eParElement != null) && (!eParId || (eParElement.id != eParId)))
    {
        nTopPos += eParElement.offsetTop;
        eParElement = eParElement.offsetParent;
    }
    return nTopPos;
}


/*
 * Site Navigation
 */

var topFrame		= parent.topFrame;
var mainFrame		= parent.main;
var dcmHome;
var dcmBtnsHTML = "<span style='position: relative; top: -1;'>Site </span>" +
	"<input type='image' onclick='top.menu.btnBack();'    alt='Back'    src='../images/spacer.gif' class='btnBack'    style='position: relative; top: 2; margin-top: -3; margin-bottom: -3;' xBtnMouseOver='-2'>" +
	"<input type='image' onclick='top.menu.btnForward();' alt='Forward' src='../images/spacer.gif' class='btnForward' style='position: relative; top: 2; margin-top: -3; margin-bottom: -3;' xBtnMouseOver='-2'>" +
	"<input type='image' onclick='top.menu.btnRefresh();' alt='Refresh' src='../images/spacer.gif' class='btnRefresh' style='position: relative; top: 2; margin-top: -3; margin-bottom: -3;' xBtnMouseOver='-2'>" +
	"<input type='image' onclick='top.menu.btnHome();'    alt='Home'    src='../images/spacer.gif' class='btnHome'    style='position: relative; top: 2; margin-top: -3; margin-bottom: -3;' xBtnMouseOver='-2'>";

function configDCM(dcmPath) {
 	topFrame.topHeader.style.display = "";
 	topFrame.topHeader.innerHTML = dcmBtnsHTML;
 	topFrame.onLoadGUI();
 
 	dcmHome = dcmPath;
	//mainFrame.history.go(-mainFrame.history.length);
	mainFrame.location.replace(dcmPath);
}

function btnBack() {
	mainFrame.history.go(-1);
}

function btnForward() {
	mainFrame.history.go(1);
}

function btnRefresh() {
	mainFrame.location.reload();
}

function btnHome() {
	mainFrame.location = dcmHome;
}
