var dom2 = navigator.userAgent.indexOf("Safari")!=-1 || (typeof document.implementation != "undefined" && document.implementation.hasFeature("Events", "2.0"));
var ie = document.all;
var safari = navigator.userAgent.indexOf("Safari") != -1;
var opera = navigator.userAgent.indexOf("Opera") != -1;
var gecko = navigator.userAgent.indexOf('Gecko')!=-1;
var linux = navigator.userAgent.indexOf('Linux')!=-1;
var intrudingElements;

var o = null;

function reposSplash()
{
   if(safari) {
     o = document;
     if(o.clientHeight==null) o=document.documentElement; // Safari 3
   }
   else if(opera)
     o = document.body;
   else if (document.documentElement && document.documentElement.clientHeight)
	  o = document.documentElement;
	else
	  o = document.body;
   if(o)
   {
      var width = o.clientWidth;
      if(safari) width=window.innerWidth;
      var left = (width-300)/2;
      var width = o.clientWidth;
      var left = (width-300)/2;
      if(width >0)
      {
         var splash1 = document.getElementById("splash1");
         var splash2 = document.getElementById("splash2");
         if(splash1.style.visibility=="hidden")
         {
            splash1.style.visibility="visible";
            splash2.style.visibility="visible";
         }
         document.getElementById("splash1").style.left = left+"px";
         document.getElementById("splash2").style.left = (left+5)+"px";
      }
   }
}


var startup=(location.href.indexOf("startup=true")!=-1);
var splashInterval;

function hideIntrudingElements() {
   intrudingElements = new Array();
   hideElements("select");
}

function hideElements(tagName) {
   var selects = document.getElementsByTagName(tagName);
   for(i=0;i<selects.length; i++)
   {
     var o = selects[i];
     if(o.style.visibility != "hidden") {
        intrudingElements[intrudingElements.length] = o;
        o.style.visibility="hidden";
     }
   }
}

function showIntrudingElements() {
   for(i=0; i<intrudingElements.length; i++) {
      intrudingElements[i].style.visibility="";
   }
}

if(startup)
{
   var startupImage = "/editor/wp-content/themes/EuropaDirektHalland/_elements-site-vision/images/sitevisionlogo.png";
   var edition = "&nbsp;";
   if(_sv_Edition!="Professional") edition=_sv_Edition + " Edition";
   if(window._sv_StartupImage) startupImage = window._sv_StartupImage;
   document.write("<div id='loader'>");
   document.write("<div style='background-color:white;position:absolute; left:0; top:0; width:100%; height:1000px; filter:alpha(opacity=80); opacity:0.8; -moz-opacity:0.8; z-index:1000055'></div>");
   document.write("<center><div id='splash1' style='visibility:hidden;z-index:1000056; position:absolute; left:0; top: 100px;background-color:white; width:300px; height:180px; border:1px solid #555555; padding-top:15px;'><img src='" + startupImage + "' /><div style='margin-top:20px'><img alt='' src='/editor/wp-content/themes/EuropaDirektHalland/_elements-site-vision/images/progress.gif' /></div><div style='margin-top:20px; color:#888888; font-size:10px; font-family: Verdana, sans-serif'>" + edition  + "<p />&copy; Copyright 2009 Senselogic AB. <br>Alla r&auml;ttigheter f&ouml;rbeh&aring;lls.</div><div style='padding-left:12px; padding-right:15px'><div style='float:left; margin-top:-15px'><img src='/sitevision/senselogic.png' /></div><div style='float:right; color:#888888; font-size:9px; font-family: Verdana, sans-serif'>" + _sv_Version +"</div></div></div>");
   document.write("<div id='splash2' style='visibility:hidden;z-index:1000055; position:absolute; left:0; top: 105px; opacity:0.3;filter:alpha(opacity=30); -moz-opacity:0.8; background-color:black; width:300px; height:180px; padding-top:15px;'></div></center>");
   document.write("</div>");
   document.write("<script type='text/javascript'>splashInterval=setInterval('reposSplash()', 300);</script>");
}
var IDLE = 0;
var START_DRAG = 1;
var DRAGGING = 2;
var RESIZING = 3;
var START_CREATE = 4;
var CREATING_NEW = 5;
var BUSY = 6;
var SLIDELIMIT = 2;
var RESIZE_FRAME = 7;
var START_RESIZING = 8;
var state = IDLE;
var hitX;
var hitY;
var hitOffsetX;
var hitOffsetY;
var dragObject = null;
var resizeDir;
var createNewType;
var editorServices = null;
var selectionDivs = null;
var gridsize=-1;
var gridDiv=null;
var busy=false;
var dragAllowed=true;
var portletCovers = new Array();
var portletCoversHashMap = new Array();
var layoutFrames  = new Array();
var idPrefix = "svid";
var dragDivs = new Array();
var bo = null;
var ready = false;
var i18nDeleteQuestion = null;
var i18nPageSaved = null;

function getDraggableElement(el) {
    if(el==null) return null;
    if(el.isDragDiv) return el;
    return getDraggableElement(el.parentNode);
}

function setBusy(busy) {
   this.busy = busy;
}

function startupDone()
{
   if(startup) {
      clearInterval(splashInterval);
      if(document.getElementById("loader")) document.getElementById("loader").style.display = "none";
      if(ie) showIntrudingElements();
   }
}

function setEnableDrag(dragAllowed) {
   this.dragAllowed = dragAllowed;
   this.ready = true;
   startupDone();
}

function doPreview(preview) {
    for(i=0;i<portletCovers.length;i++)
      portletCovers[i].style.display="" + (preview ? "none" : "block");
    for(i=0;i<layoutFrames.length;i++)
      layoutFrames[i].style.display="" + (preview ? "none" : "block");
}

var gridInterval = null;
function showGrid(size) {
   if(gridDiv==null) {
      gridDiv = createDiv(1,1,800,1600);
      gridDiv.style.width="100%";
      gridDiv.style.height="100%";
      gridDiv.style.backgroundImage="url(/editor/wp-content/themes/EuropaDirektHalland/_elements-site-vision/images/dotgrid10x10.gif)";
      gridDiv.style.backgroundRepeat="repeat";
      gridDiv.style.zIndex=9999;
      document.body.appendChild(gridDiv);
   }
   if(gridInterval != null) clearInterval(gridInterval);
   gridInterval = null;
   if(size!=-1)
   {
      gridDiv.style.display="block";
      gridInterval = setInterval("var height=bo.clientHeight + bo.scrollTop; if(document.body.scrollTop) height+=document.body.scrollTop; if(height<1600) height=1600; gridDiv.style.height=height + 'px'", 300);
   }
   else gridDiv.style.display="none";
   gridsize=size;
}

function getObjectId(id) {
    return id.substring(idPrefix.length).replace('_', '.');
}

function getEditorServices() {
    if(editorServices != null) return editorServices;
    try {
        if(!opera && !safari)
            editorServices = top.SiteVisionApplet.document.SiteVision.getJSEditorManager();
          else
            editorServices = top.SiteVisionApplet.document.applets[0].getJSEditorManager();
    } catch(e) {};
    return editorServices;
}

function getCursor(el, x, y) {
    if(el == null) return null;
    if(!dragAllowed) return "default";
    var els = el.style;
    if(parseInt(els.width) < RESIZE_FRAME) {return "e-resize";}
    if(parseInt(els.height) < RESIZE_FRAME) return "s-resize";
    var c = "";
    var hitOffsetX=x-parseInt(els.left);
    var hitOffsetY=y-parseInt(els.top);
    if(hitOffsetY <= RESIZE_FRAME) c="n";
    if(hitOffsetY >= (parseInt(els.height) - RESIZE_FRAME)) c="s";
    if(hitOffsetX <= RESIZE_FRAME) c+="w";
    if(hitOffsetX >= (parseInt(els.width) - RESIZE_FRAME)) c+="e";
    if(c=="") return "move";
    return c+"-resize";
}

function getPageX(e) {
    var x = e.clientX;
    if(bo.scrollLeft) x+=bo.scrollLeft;
    if(safari && document.body.scrollLeft) x+=document.body.scrollLeft;
    return x;
}
function getPageY(e) {
    var y = e.clientY;
    if(bo.scrollTop) y+=bo.scrollTop;
    if(safari && document.body.scrollTop) y+=document.body.scrollTop;
    return y;
}

function getRealLeft(el) {
    var xPos = el.offsetLeft;
    var tempEl = el.offsetParent;
    while (tempEl != null) {
        xPos += tempEl.offsetLeft;
        tempEl = tempEl.offsetParent;
    }
    return xPos;
}

function getRealTop(el) {
    var yPos = el.offsetTop;
    var tempEl = el.offsetParent;
    while (tempEl != null) {
        yPos += tempEl.offsetTop;
        tempEl = tempEl.offsetParent;
    }
    return yPos;
}

function getRealHeight(el)
{
   var height = el.offsetHeight;
   if(height<0) height=0;
   return height;
}

function getRealWidth(el)
{
   var width = el.offsetWidth;
   if(width<0) width=0;
   return width;
}

function showDragFrame(id, show)
{
try {
    var dragDiv = dragDivs[id];
    if(dragDiv != null)
        dragDivs[id].style.display=(show ? "block" : "none");

    } catch(e) { }
}

function showLayoutFrame(id) {
    var el = document.getElementById(getHtmlId(id));
    if(el == null) return;
    var left = getRealLeft(el);
    var top = getRealTop(el);
    var width = getRealWidth(el);
    var height = getRealHeight(el);
    var newDiv = createDiv(left, top, width, height);
    newDiv.style.border="1px gray dashed";
    newDiv.style.zIndex=9999;
    document.body.appendChild(newDiv);
    newDiv.targetEl = el;
    //newDiv.dragTarget = el;
    //el.dragDiv=newDiv;
    layoutFrames[layoutFrames.length]=newDiv;
}

function showCustomViewFrame(id) {
    var el = document.getElementById(getHtmlId(id));
    var left = getRealLeft(el);
    var top = getRealTop(el);
    var width = getRealWidth(el);
    var height = getRealHeight(el);
    var newDiv = createDiv(left, top, width, height);
    //newDiv.isDragDiv = true;
    newDiv.style.border="1px red dashed";
    newDiv.style.zIndex=9999;
    document.body.appendChild(newDiv);
    newDiv.targetEl = el;
    //newDiv.dragTarget = el;
    //el.dragDiv=newDiv;
    layoutFrames[layoutFrames.length]=newDiv;
}

mycounter=0;
function mouseMoveHandler(e) {
    var thisEl = dom2 ? e.target : e.srcElement;
    var el = getDraggableElement(dom2 ? e.target : e.srcElement);
    if(state == START_CREATE || state == CREATING_NEW)
      thisEl.style.cursor= "crosshair";
     else if(thisEl.style.cursor=="crosshair")
      thisEl.style.cursor= "auto";
    if(busy && el!=null) el.style.cursor="wait";
    if(state==BUSY) { ;return;}
    var mousex=getPageX(e);
    var mousey=getPageY(e);
    switch(state) {
        case IDLE:
            if(el!=null)
                try {
                    if(!busy) el.style.cursor=getCursor(el, mousex, mousey);
                } catch(e) {}
            break;
        case START_DRAG:
            if(mousex!=hitX||mousey!=hitY) {
               state=BUSY;
               var selection = getEditorServices().getSelection();
               selectionDivs = new Array();
               var i;
               for(i=0;i<selection.size();i++) {
                  selectionDivs[i] = document.getElementById(getHtmlId(selection.elementAt(i)));
               }
               state=DRAGGING;
            }
            break;
        case DRAGGING:
            moveSelectionTo(mousex-hitOffsetX, mousey-hitOffsetY);
			   if(dom2) {
			      e.stopPropagation();
			      e.preventDefault();
			   }
			   if(ie) event.returnValue=false;
			   return false;
            break;
        case START_RESIZING:
            state=BUSY;
            var selection = getEditorServices().getSelection();
            selectionDivs = new Array();
            var i;
            for(i=0;i<selection.size();i++)
               selectionDivs[i] = document.getElementById(getHtmlId(selection.elementAt(i)));
            state=RESIZING;
            break;
        case RESIZING:
            if(resizeDir=="w-resize") reshapeTo(mousex-hitOffsetX, null, parseInt(dragObject.style.width)+(parseInt(dragObject.style.left)-(mousex-hitOffsetX)), null);
            if(resizeDir=="nw-resize") reshapeTo(mousex-hitOffsetX, mousey-hitOffsetY, parseInt(dragObject.style.width)+(parseInt(dragObject.style.left)-(mousex-hitOffsetX)), parseInt(dragObject.style.height)+(parseInt(dragObject.style.top)-(mousey-hitOffsetY)));
            if(resizeDir=="sw-resize") reshapeTo(mousex-hitOffsetX, null, parseInt(dragObject.style.width)+(parseInt(dragObject.style.left)-(mousex-hitOffsetX)), mousey+hitOffsetY-parseInt(dragObject.style.top));
            if(resizeDir=="ne-resize") reshapeTo(null, mousey-hitOffsetY, mousex+hitOffsetX-parseInt(dragObject.style.left), parseInt(dragObject.style.height)+(parseInt(dragObject.style.top)-(mousey-hitOffsetY)));
            if(resizeDir=="e-resize") resizeTo(mousex+hitOffsetX-parseInt(dragObject.style.left), null);
            if(resizeDir=="s-resize") resizeTo(null, mousey+hitOffsetY-parseInt(dragObject.style.top));
            if(resizeDir=="n-resize") reshapeTo(null, mousey-hitOffsetY, null, parseInt(dragObject.style.height)+(parseInt(dragObject.style.top)-(mousey-hitOffsetY)));
            if(resizeDir=="se-resize") resizeTo(mousex+hitOffsetX-parseInt(dragObject.style.left), mousey+hitOffsetY-parseInt(dragObject.style.top));
            break;
        case CREATING_NEW:
            resizeTo(mousex-parseInt(dragObject.style.left), mousey-parseInt(dragObject.style.top));
            break;
    }
}

function resizeTo(width, height) {
    reshapeTo(null, null, width, height, false);
}

function reshapeTo(x, y, width, height, reshapeNow) {
    delayedX=x;
    delayedY=y;
    delayedWidth=width;
    delayedHeight=height;
    var now;
    if(gecko && Date.now)
       now = Date.now(); // Use faster version in Spidermonkey.
     else
       now = new Date().valueOf();
    if(now-last>moveTimeout || reshapeNow) {
       last = now;
       flushMove();
    }
}

function moveSelectedPortlets(diffX, diffY) {
   var i;
   var gridOffsetTop=0.0;
   var gridOffsetLeft=0.0;
   if(gridsize!=-1) {
      var left=(parseInt(dragObject.style.left)+diffX);
      var top=(parseInt(dragObject.style.top)+diffY);
      var modLeft=left%gridsize;
      var modTop=top%gridsize;
      if(modLeft<gridsize/2) gridOffsetLeft=-modLeft; else gridOffsetLeft=gridsize-modLeft;
      if(modTop<gridsize/2) gridOffsetTop=-modTop; else gridOffsetTop=gridsize-modTop;
   }
   for(i=0;i<selectionDivs.length;i++) {
      var left=(parseInt(selectionDivs[i].style.left)+diffX+gridOffsetLeft);
      var top=(parseInt(selectionDivs[i].style.top)+diffY+gridOffsetTop);

      if(diffX!=0) {
         selectionDivs[i].dragDiv.style.left = selectionDivs[i].style.left = left + "px";
      }
      if(diffY!=0) {
         selectionDivs[i].dragDiv.style.top = selectionDivs[i].style.top = top + "px";
      }
   }
}

var moveTimeout=gecko ? 10 : 5;
function flushMove() {
    var diffX=0;
    var diffY=0;
    if(delayedX != null) {
        if(delayedX<0) delayedX=0;
        var diffX = delayedX-parseInt(dragObject.dragDiv.style.left);
    }
    if(delayedY != null) {
        if(delayedY<0) delayedY=0;
        var diffY = delayedY-parseInt(dragObject.dragDiv.style.top);
    }
    if(diffX!=0 || diffY!=0) moveSelectedPortlets(diffX, diffY);
    if(delayedWidth != null) {
        if(delayedWidth < 1) delayedWidth=1;
        dragObject.dragDiv.style.width = dragObject.style.width = (delayedWidth)+"px";
    }
    if(delayedHeight != null && delayedHeight > 0) {
        if(delayedHeight < 1) delayedHeight=1;
        dragObject.dragDiv.style.height = dragObject.style.height = (delayedHeight)+"px";
    }
    delayedX=delayedY=delayedWidth=delayedHeight=null;
}

var last=0;
var delayedX=null;
var delayedY=null;
var delayedWidth=null;
var delayedHeight=null;

function moveSelectionTo(x, y, moveRightAway) {
    reshapeTo(x, y, null, null, moveRightAway);
}

function clearSelection(notify) {
    if(notify)
     getEditorServices().clearSelection();
}

function mouseDownHandler(e) {

    if(state == BUSY || !ready) {  return;}
    //if(e.button == 2) {  return;}

    if(state!=IDLE && state!=START_CREATE) { return;}
     if(state==START_CREATE) {
        //clearSelection(true);
        dragObject=createDiv(getPageX(e), getPageY(e), 0, 0);
        document.body.appendChild(dragObject);
        createDragDiv(dragObject, true);
        state=CREATING_NEW;
        return;
    }
    var prevState = state;
    state = BUSY;
    var el = getDraggableElement(dom2 ? e.target : e.srcElement);
    if(el==null && prevState == IDLE) { clearSelection(true); state=prevState; return; }
    hitX=getPageX(e);
    hitY=getPageY(e);

    var clearSelectionFirst = false;

    if(!e.ctrlKey && getEditorServices().getSelection() != null ) clearSelectionFirst = true;
    var cursor = getCursor(el, hitX, hitY);
    if(cursor==null) { state=prevState; return; }
    if(!(!e.ctrlKey && getEditorServices().getSelection()!=null && (getEditorServices().getSelection().contains(getObjectId(el.dragTarget.id))))) {
        var doReturn=false;
       if(getEditorServices().getSelection() != null && getEditorServices().getSelection().contains(getObjectId(el.dragTarget.id)) && cursor=="move") doReturn=true;
       if(!clearSelectionFirst)
         getEditorServices().togglePortletSelection(getObjectId(el.dragTarget.id));
       else
         getEditorServices().setSelectedObject(getObjectId(el.dragTarget.id));
       if(doReturn) {state=IDLE;return;}
    }

    if(cursor=="move") {
        dragObject = el.dragTarget;
        hitOffsetX=hitX-parseInt(el.style.left);
        hitOffsetY=hitY-parseInt(el.style.top);
        if(state==BUSY)
         state=START_DRAG;
    } else {
        dragObject = el.dragTarget;
        resizeDir = cursor;
        var els = el.style;
        hitOffsetX=hitX-parseInt(el.style.left);
        if(hitOffsetX>RESIZE_FRAME) hitOffsetX=parseInt(el.style.left)+parseInt(el.style.width)-hitX;
        hitOffsetY=hitY-parseInt(el.style.top);
        if(hitOffsetY>RESIZE_FRAME) hitOffsetY=parseInt(el.style.top)+parseInt(el.style.height)-hitY;
        if(state==BUSY)
           state=START_RESIZING;
    }
    if(dom2) {
    //    e.stopPropagation();
    //    e.preventDefault();
    }
    return false;
}

function flushPositions() {
        var selection = getEditorServices().getSelection();
        var i;
        for(i=0;i<selection.size();i++) {
          var obj = document.getElementById(getHtmlId(selection.elementAt(i)));
          getEditorServices().setPortletLocation(getObjectId(obj.id), parseInt(obj.style.left), parseInt(obj.style.top));
        }
}

function mouseUpHandler(e) {
    if(state==DRAGGING) {
        state=BUSY;
        flushMove();
        flushPositions();
        state=IDLE;
    } else if(state==RESIZING) {
        flushMove();
        flushPositions();
        state=IDLE;
        getEditorServices().setPortletSize(getObjectId(dragObject.id), parseInt(dragObject.style.width), parseInt(dragObject.style.height));
    } else if(state==CREATING_NEW) {
        state=BUSY;
        var el = getDraggableElement(dom2 ? e.target : e.srcElement);
        try {
            var w=parseInt(dragObject.style.width);
            var h=parseInt(dragObject.style.height);
            var x=parseInt(dragObject.style.left);
            var y=parseInt(dragObject.style.top);
            if(w>2 && h>2) {
                try {
                    if(dragObject.dragDiv.style.cursor=="wait") dragObject.dragDiv.style.cursor=null;
                } catch(e) {}
                if(createNewType=="contentarea") {
                    var id = getEditorServices().createNewContentArea(x, y, w, h);
                    dragObject.id = id;
                    getEditorServices().updatePortletContent(getObjectId(id));
                    showLayoutFrame(getObjectId(id));
                    dragObject.dragDiv.style.display="none";
                } else {
                    var id = getEditorServices().createNewPortlet(createNewType, x, y, w, h);
                    dragObject.id = id;
                    dragObject.dragDiv.firstChild.style.cursor=""; // Workaround IE, or crosshair will stay.
                    dragDivs[getObjectId(id)] = dragObject.dragDiv;
                    var newObject = dragObject.dragDiv;
                    getEditorServices().updatePortletContent(getObjectId(id));
                    getEditorServices().updateZIndexes();
                    getEditorServices().togglePortletSelection(getObjectId(id));
                }
            } else {
                dragObject.dragDiv.style.border="none";
                getEditorServices().clearPortletSelection();
            }
        } catch(e) {}
        getEditorServices().clearPortletSelection();
        state=IDLE;
        try {
            if(dragObject.dragDiv.style.cursor=="wait") dragObject.dragDiv.style.cursor=null;
        }catch(e) {}
    }

    state=IDLE;
    //dragObject=null;
}

function contextMenuHandler(e)
{
    if (!e.shiftKey)
    {
      state=IDLE;
      getEditorServices().showContextMenu(parseInt(e.screenX), parseInt(e.screenY));
      e.cancelBubble=true;
      if(dom2) { e.preventDefault(); e.stopPropagation();} else event.returnValue=false;
      return false;
    }
}

function getPortletCover(id) {
   return portletCoversHashMap[id];
}

function selectObject(id, select, notify) {
    if(getPortletCover(id)!=null) {
    var portletCover = getPortletCover(id);
    //alert(select);
    if(select) portletCover.style.border="2px solid black";
      else portletCover.style.border="none";
    portletCover.selected=select;
    }
    var el = dragDivs[id];
    if(el == null) return;
    if(select)
        el.style.borderWidth = "2px";
      else
        el.style.borderWidth = "1px";
    //if(select) dragObject = el.dragTarget; else dragObject=null;
    if(notify && select) getEditorServices().setSelectedObject(id);
}


function no() {
    return false;
}

function dblClickHandler(e) {
    if(state!=IDLE) {return;}
    if(dom2&&e.detail<2) return; // Make sure it's a double-click.
    var el = getDraggableElement(dom2 ? e.target : e.srcElement);
    if(el==null) { return; }
    el.style.cursor="wait";
    setBusy(true);
    getEditorServices().startPortletEditor(getObjectId(el.dragTarget.id), e.screenX, e.screenY);
}

function moveBy(x,y) {
   if (dragAllowed)
      reshapeTo(parseInt(dragObject.style.left)+x, parseInt(dragObject.style.top)+y, null, null, true);
}

function noSelection() {
   return dragObject==null;
}

function populateSelectionDivs() {
      var oldState = state;
      state=BUSY;
      var selection = getEditorServices().getSelection();
      selectionDivs = new Array();
      var i;
      for(i=0;i<selection.size();i++)
         selectionDivs[i] = document.getElementById(getHtmlId(selection.elementAt(i)));
       state=oldState;
}

function isAbsolutePortletSelected()
{
   return dragObject.dragDiv;
}

function keyDownHandler(e) {
    if(e.keyCode > 40) getEditorServices().processKey(e.keyCode, e.altKey, e.ctrlKey, e.shiftKey);
    if(e.ctrlKey)
    {
        switch(e.keyCode) {
            case 'S':
            case 'P':
            case 'N':
            case 'R':
                return false;
        }
    }

    if(noSelection() || e.keyCode==16) return;
    populateSelectionDivs();

    //alert("" +e.keyCode);

    switch(e.keyCode) {
        case 13:
            if(!e.ctrlKey) getEditorServices().startPortletEditor(getObjectId(dragObject.id), -1, -1);
            break;
        case 46:
            if(i18nDeleteQuestion == null) i18nDeleteQuestion = getEditorServices().getText("editorDeleteQuestion");
            if(confirm(i18nDeleteQuestion)) if(dragObject) getEditorServices().deletePortlet(getObjectId(dragObject.id));
            break;
        case 38:
            if(!isAbsolutePortletSelected()) break;
            moveBy(0,-1);
            flushPositions();
            if(dom2) { e.preventDefault(); e.stopPropagation();} else event.returnValue=false;
            return false;
        case 40:
            if(!isAbsolutePortletSelected()) break;
            moveBy(0,1);
            flushPositions();
            if(dom2) { e.preventDefault(); e.stopPropagation();} else event.returnValue=false;
            return false;
        case 37:
            if(!isAbsolutePortletSelected()) break;
            moveBy(-1,0);
            flushPositions();
            if(dom2) { e.preventDefault(); e.stopPropagation();} else event.returnValue=false;
            return false;
        case 39:
            if(!isAbsolutePortletSelected()) break;
            moveBy(1,0);
            flushPositions();
            if(dom2) { e.preventDefault(); e.stopPropagation();} else event.returnValue=false;
            return false;
        case 83:
            return false;
    }
}

function onLoadHandler() {
    if(this==top) return;
    if(ie && startup) hideIntrudingElements();
    if (document.documentElement && document.documentElement.clientHeight)
    	{
    		bo = document.documentElement;
    	}
    	else
    	{
    		bo = document.body;
    	}
    var elements = dom2 ? document.getElementsByTagName("*") : document.all;
    var divs = new Array();
    for(var i=0; i<elements.length; i++) {
        el = elements[i];
        if (el.className != null) {
            if(el.className.indexOf("sv-movable") != -1) {
                divs[divs.length]=el;
                //createDragDiv(el, false);
            } else if (el.className.indexOf("sv-relative-portlet") != -1) {
                createPortletCover(el);
            }
        }

    }
    for(i=0;i<divs.length;i++) // Workaround for z-index order
    {
      createDragDiv(divs[divs.length-i-1]);
    }
    if(dom2) {
        document.addEventListener("mousemove", mouseMoveHandler, false);
        document.addEventListener("mousedown", mouseDownHandler, false);
        document.addEventListener("mouseup", mouseUpHandler, false);
        document.addEventListener("click", dblClickHandler, false);
        document.addEventListener("keydown", keyDownHandler, false);
        document.oncontextmenu = contextMenuHandler;
    } else if(ie) {
        bo.onmousemove = function () { mouseMoveHandler(event); };
        document.onmousedown = function () { mouseDownHandler(event); };
        bo.onmouseup = function () { mouseUpHandler(event); };
        bo.onkeydown = function() { keyDownHandler(event); };
        bo.ondblclick = function () { dblClickHandler(event); };
        bo.ondragstart = no;
        bo.onselectstart = no;
        document.oncontextmenu = function () { contextMenuHandler(event); };

    }
    var externalChange=(location.href.indexOf("?change=internal")==-1);
    try {
        makeExternalLinksOpenInNewWindow();
    } catch(e) {} // Ignore
    top.pageLoaded(_sv_ObjectId, externalChange, location.href);
}

function noAction(e) {
    return false;
}

function onUnLoadHandler() {
   if(!safari && !linux && !opera && getEditorServices() != null) getEditorServices().pageUnLoaded(_sv_ObjectId);
}

function createPortletCover(el) {
    var left = getRealLeft(el);
    var top = getRealTop(el);
    var width = getRealWidth(el);
    var height = getRealHeight(el);
    var newDiv = createDiv(left, top, width, height);
    newDiv.style.zIndex=10000;
    newDiv.style.backgroundImage = "url(/editor/wp-content/themes/EuropaDirektHalland/_elements-site-vision/images/transdot.gif)"; // Prevent IE event transparency.
    newDiv.onmouseover = function () { if(!this.selected && ready) this.style.border="1px black solid"; };
    newDiv.onmouseout = function () { if(!this.selected && ready) this.style.border="none"; };
    newDiv.onmousemove = function () { if(!busy && ready) this.style.cursor="auto"; };
    newDiv.portletId = getObjectId(el.id);
    newDiv.portlet = el;
    newDiv.onmousedown = function (e) { if(state==IDLE && ready) { if(e) event=e; dragObject = this.portlet; selectPortlet(event, this.portletId); } }
    newDiv.ondblclick = function (e) { if(ready) { if(e) event=e; this.style.cursor="wait"; busy=true; getEditorServices().startPortletEditor(this.portletId, event.screenX, event.screenY); } }
    document.body.appendChild(newDiv);
    portletCovers[portletCovers.length]=newDiv;
    portletCoversHashMap[getObjectId(el.id)]=newDiv;
}

function selectPortlet(event, portletId) {
   getEditorServices().setSelectedObject(portletId);
   event.cancelBubble=true;
   return false;
}

function recreatePortletCovers() {
    // Remove old covers.
    for(i=0;i<portletCovers.length;i++)
        document.body.removeChild(portletCovers[i]);
    portletCovers = new Array();
    // Create new covers.
    var elements = dom2 ? document.getElementsByTagName("*") : document.all;
    var divs = new Array();
    for(var i=0; i<elements.length; i++) {
        el = elements[i];
        if (el.className=="sv-relative-portlet") {
            createPortletCover(el);
        }
    }
    coverUpdateCounter=5;
}

function updatePortletCover(cover) {
    var el = cover.portlet;
    var left = "" + getRealLeft(el) + "px";
    var top = "" + getRealTop(el) + "px";
    var width = "" + getRealWidth(el) + "px";;
    var height = "" + getRealHeight(el) + "px";
    if(left != cover.style.left || top != cover.style.top || width != cover.style.width || height != cover.style.height)
    {
      cover.style.left = left;
      cover.style.top = top;
      cover.style.width = width;
      cover.style.height = height;
    }
}

function updateLayoutFrame(cover) {
    var el = cover.targetEl;
    var left = "" + getRealLeft(el) + "px";
    var top = "" + getRealTop(el) + "px";
    var width = "" + getRealWidth(el) + "px";;
    var height = "" + getRealHeight(el) + "px";
    if(left != cover.style.left || top != cover.style.top || width != cover.style.width || height != cover.style.height)
    {
      cover.style.left = left;
      cover.style.top = top;
      cover.style.width = width;
      cover.style.height = height;
    }
}

var coverUpdateCounter = 0;
var coverUpdateInterval = setInterval(doUpdatePortletCovers, 200);



function doUpdatePortletCovers() {
    try {
      //var start = new Date().getTime();
      for(i=0;i<portletCovers.length;i++)
        updatePortletCover(portletCovers[i]);
      //var portletTime = new Date().getTime() - start;
      //start = new Date().getTime();
      for(i=0;i<layoutFrames.length;i++)
        updateLayoutFrame(layoutFrames[i]);
      //var layoutTime = new Date().getTime() - start;
      //window.status="Num: " + portletCovers.length + " pt:"+portletTime + " lt:"+layoutTime
      } catch(e) {}
}

function updatePortletCovers() {
    coverUpdateCounter=5;
}


function createDragDiv(el, isVisible) {
    drag = document.createElement("div");
    drag.style.backgroundImage="url(/editor/wp-content/themes/EuropaDirektHalland/_elements-site-vision/images/transdot.gif)"; // Prevent IE event transparency.
    drag.isDragDiv=true;
    drag.dragTarget = el;
    drags = drag.style;
    els = el.style;
    drags.border = "1px black solid";
    drags.position = "absolute";
    drags.top = els.top;
    drags.left = els.left;
    drags.width = els.width;
    drags.height = els.height;
    drags.zIndex=1000055;
    document.body.appendChild(drag);
     //   alert(drag.innerHTML);
    el.dragDiv=drag;
    //alert("drag:"+drag+" el:" + el + " dragDiv:"+el.dragDiv);
    if(!isVisible) drags.display="none";
    dragDivs[getObjectId(el.id)]=drag;
}

function createDiv(x, y, width, height) {
    var drag = document.createElement("div");
    var drags = drag.style;
    drags.position="absolute";
    drags.top=y+"px";
    drags.left=x+"px";
    drags.width=width+"px";
    drags.height=height+"px";
    return drag;
}

function startCreatePortlet(type) {
    state=START_CREATE;
    createNewType=type;
}

function startCreateContentArea() {
    state=START_CREATE;
    createNewType="contentarea";
}

function getHtmlId(object) {
   var o = ""+object; // Make sure it's a javascript object.
    return "svid" + o.replace(".", "_");;
}

function makeExternalLinksOpenInNewWindow() {
   //var blipp = new Date().getTime();
   if (!document.getElementsByTagName)
   {
      return;
   }
   var anchors = document.getElementsByTagName("a");
   for (var i=0; i<anchors.length; i++) {
      var anchor = anchors[i];
      if (anchor.getAttribute("href") && anchor.getAttribute("href",2).indexOf("http") ==0 ) {
         anchor.target = "_blank";
      }
   }
   //var time = new Date().getTime()-blipp;
   //alert( time );
}

window.onunload=onUnLoadHandler;
