

//==============================================================
// Holder ------------------------------------------------
Holder = function() { }
Holder.ImageUL = new Array();
Holder.ImageUM = new Array();
Holder.ImageUR = new Array();
Holder.ImageML = new Array();
Holder.ImageMM = new Array();
Holder.ImageMR = new Array();
Holder.ImageBL = new Array();
Holder.ImageBM = new Array();
Holder.ImageBR = new Array();
//Holder.ismousedown = false;

//------------> Holder.getCodeFromName(ToolsHolderName)

//------------> Holder.getOptions(MapID, ToolsHolderName)
//------------> Holder.SetHolderImage (MapID, Ocode, Hoptions)
//------------> Holder.getInnerHTML(MapID, ToolsHolderName)

//------------> Holder.create(MapID, ToolsHolderName)
//------------> Holder.remove(MapID, ToolsHolderName)
//------------> Holder.Initial(MapID, ToolsHolderName)

//------------> Holder.onmouseover (elem)
//------------> Holder.onmouseout (elem)
//------------> Holder.onmousedown (elem)
//------------> Holder.onmouseup(elem, e)
//------------> Holder.onmousemove (elem, e)

//------------> Holder.CheckPositionLimits CheckPosition, Mcode, Ocode, Size, style)
//------------> Holder.getPositionLimits Mcode, Ocode, Size, style)
//------------> Holder.CheckSizeLimits CheckSize, Mcode, Ocode, Size)
//------------> Holder.getSizeLimits (Mcode, Ocode, Size)

////Holder.getCodeFromName -------------------------------
//Holder.getCodeFromName = function(ToolsHolderName) {
//    return ToolsHolderName + "^";
//}
//--------------------------------------------------------------
//Holder.getOptions -------------------------------
Holder.getOptions = function(MapID, Ocode) {
    var MyObj = null;
    if (MapID == null) { return MyObj }
    var Moptions = Map.MapObj[MapID]
    //----------------------------------
        if (Ocode == "MapBackGround") { MyObj = Moptions.ToolsHolder.MapBackGround; }
        if (Ocode == "NavUpTools") { MyObj = Moptions.ToolsHolder.NavUpTools; }
        if (Ocode == "NavDowTools") { MyObj = Moptions.ToolsHolder.NavDowTools; }
        if (Ocode == "AllTools") { MyObj = Moptions.ToolsHolder.AllTools; }
        if (Ocode == "ScalebarH") { MyObj = Moptions.ToolsHolder.ScalebarH; }
        //----------------------------------
        if (Ocode == "Title") { MyObj = Moptions.FrameHolder.Title; }
        if (Ocode == "North") { MyObj = Moptions.FrameHolder.North; }
        if (Ocode == "Location") { MyObj = Moptions.FrameHolder.Location; }
        if (Ocode == "Scale") { MyObj = Moptions.FrameHolder.Scale; }
        if (Ocode == "Logo") { MyObj = Moptions.FrameHolder.Logo; }
        if (Ocode == "GeoinfoLogo") { MyObj = Moptions.FrameHolder.GeoinfoLogo; }
        
    //----------------------------------
    return MyObj
}
//--------------------------------------------------------------
//Holder.SetHolderImage ------------------------------------------
Holder.SetHolderImage = function(MapID, Ocode, Hoptions) {
   // var Hoptions = Holder.getOptions(MapID, Ocode);
    //----------------------------------
    Holder.ImageUL[Ocode] = new Image
    Holder.ImageUL[Ocode].src = "Image_Holder/Holder_UL" + Hoptions.shadow + Hoptions.shadowcolor + ".png";
    Holder.ImageUM[Ocode] = new Image
    Holder.ImageUM[Ocode].src = "Image_Holder/Holder_UM" + Hoptions.shadow + Hoptions.shadowcolor + ".png";
    Holder.ImageUR[Ocode] = new Image
    Holder.ImageUR[Ocode].src = "Image_Holder/Holder_UR" + Hoptions.shadow + Hoptions.shadowcolor + ".png";
    //----------------------------------
    Holder.ImageML[Ocode] = new Image
    Holder.ImageML[Ocode].src = "Image_Holder/Holder_ML" + Hoptions.shadow + Hoptions.shadowcolor + ".png"; 
    Holder.ImageMM[Ocode] = new Image
    Holder.ImageMM[Ocode].src = "Image_Holder/" + Hoptions.backgroundcolor + "Opacity" + Hoptions.backgroundOpacity + ".png"
    Holder.ImageMR[Ocode] = new Image
    Holder.ImageMR[Ocode].src = "Image_Holder/Holder_MR" + Hoptions.shadow + Hoptions.shadowcolor + ".png";
    //----------------------------------
    Holder.ImageBL[Ocode] = new Image
    Holder.ImageBL[Ocode].src = "Image_Holder/Holder_BL" + Hoptions.shadow + Hoptions.shadowcolor + ".png";    
    Holder.ImageBM[Ocode] = new Image
    Holder.ImageBM[Ocode].src = "Image_Holder/Holder_BM" + Hoptions.shadow + Hoptions.shadowcolor + ".png";
    Holder.ImageBR[Ocode] = new Image
    Holder.ImageBR[Ocode].src = "Image_Holder/Holder_BR" + Hoptions.shadow + Hoptions.shadowcolor + ".png";
    //----------------------------------
}
//--------------------------------------------------------------
//Holder.getInnerHTML -------------------------------
Holder.getInnerHTML = function(MapID, Ocode) {
    var Mcode = Map.getMcodeFromMapID(MapID);
    var Moptions = Map.MapObj[MapID]
    var Hoptions = Holder.getOptions(MapID, Ocode);
    Holder.SetHolderImage(MapID, Ocode, Hoptions);
    //...........................................................    
    var Hcursor = "default";
    var Hevent = "";
    var HeventHTML1 = "onmouseover=\"Holder.onmouseover(this)\" onmouseout='Holder.onmouseout(this)'"
    var HeventHTML2 = "onmousedown='Holder.onmousedown(this,event)';"
    var HeventHTML = HeventHTML1 + HeventHTML2;
    var Hborder = "none";
    if (Hoptions.border > 0) { Hborder = "solid " + Hoptions.border + "px " + Hoptions.bordercolor; }
    var Hbackground = "";
    if (Hoptions.backgroundcolor != "transparent") {
        Hbackground = "background-image: url(" + Holder.ImageMM[Ocode].src + ");"
    }
    //...........................................................
    var innerHTML = "";
    innerHTML += "<div id='" + Mcode + "^" + Ocode + "^" + "Holder_Container' class='Holder_Container'>";

    innerHTML += "<table id='" + Mcode + "^" + Ocode + "^" + "Holder_Table' class='Holder_Table' border='0' cellspacing='0' cellpadding='0'"
    if (Hoptions.style == 0) {
        innerHTML += "<tr valign='top' class='Holder_U'>"
        if (Hoptions.resize_U && Hoptions.resize_L) { Hcursor = "nw-resize"; Hevent = HeventHTML; } else { Hcursor = "default"; Hevent = ""; }
        innerHTML += "<td id='" + Mcode + "^" + Ocode + "^" + "Holder_UL' class='Holder_UL' "
        innerHTML += "style='cursor:" + Hcursor + ";background-image: url(" + Holder.ImageUL[Ocode].src + ");' " + Hevent + "></td>"
        if (Hoptions.resize_U) { Hcursor = "n-resize"; Hevent = HeventHTML; } else { Hcursor = "default"; Hevent = ""; }
        innerHTML += "<td id='" + Mcode + "^" + Ocode + "^" + "Holder_UM' class='Holder_UM' "
        innerHTML += "style='cursor:" + Hcursor + "; background-image: url(" + Holder.ImageUM[Ocode].src + ");' " + Hevent + "></td>"
        if (Hoptions.resize_U && Hoptions.resize_R) { Hcursor = "ne-resize"; Hevent = HeventHTML; } else { Hcursor = "default"; Hevent = ""; }
        innerHTML += "<td id='" + Mcode + "^" + Ocode + "^" + "Holder_UR' class='Holder_UR' "
        innerHTML += "style='cursor:" + Hcursor + ";background-image: url(" + Holder.ImageUR[Ocode].src + ");' " + Hevent + "></td>"
        innerHTML += "</tr>"
    }
    innerHTML += "<tr valign='top' class='Holder_M'>"
    if (Hoptions.style == 0) {
        if (Hoptions.resize_L) { Hcursor = "w-resize"; Hevent = HeventHTML; } else { Hcursor = "default"; Hevent = ""; }
        innerHTML += "<td id='" + Mcode + "^" + Ocode + "^" + "Holder_ML' class='Holder_ML' "
        innerHTML += "style='cursor:" + Hcursor + "; background-image: url(" + Holder.ImageML[Ocode].src + ");' " + Hevent + "></td>"
    }
    if (Hoptions.move) { Hcursor = "move"; Hevent = HeventHTML; } else { Hcursor = "default"; Hevent = ""; }
    innerHTML += "<td id='" + Mcode + "^" + Ocode + "^" + "Holder_MM' class='Holder_MM_tools' ";
    innerHTML += "style='cursor:" + Hcursor + "; border:" + Hborder + ";" + Hbackground + "' " + Hevent + ">"
    innerHTML += "&nbsp;";
    innerHTML += "</td>"
    if (Hoptions.style == 0) {
        if (Hoptions.resize_R) { Hcursor = "e-resize"; Hevent = HeventHTML; } else { Hcursor = "default"; Hevent = ""; }
        innerHTML += "<td id='" + Mcode + "^" + Ocode + "^" + "Holder_MR' class='Holder_MR' "
        innerHTML += "style='cursor:" + Hcursor + ";background-image: url(" + Holder.ImageMR[Ocode].src + ");' " + HeventHTML + "></td>"
        innerHTML += "</tr>"
        innerHTML += "<tr valign='top' class='Holder_B'>"
        if (Hoptions.resize_B && Hoptions.resize_L) { Hcursor = "sw-resize"; Hevent = HeventHTML; } else { Hcursor = "default"; Hevent = ""; }
        innerHTML += "<td id='" + Mcode + "^" + Ocode + "^" + "Holder_BL' class='Holder_BL' "
        innerHTML += "style='cursor:" + Hcursor + ";background-image: url(" + Holder.ImageBL[Ocode].src + ");' " + HeventHTML + "></td>"
        if (Hoptions.resize_B) { Hcursor = "s-resize"; Hevent = HeventHTML; } else { Hcursor = "default"; Hevent = ""; }
        innerHTML += "<td id='" + Mcode + "^" + Ocode + "^" + "Holder_BM' class='Holder_BM' "
        innerHTML += "style='cursor:" + Hcursor + "; background-image: url(" + Holder.ImageBM[Ocode].src + ");' " + HeventHTML + "></td>"
        if (Hoptions.resize_B && Hoptions.resize_R) { Hcursor = "se-resize"; Hevent = HeventHTML; } else { Hcursor = "default"; Hevent = ""; }
        innerHTML += "<td id='" + Mcode + "^" + Ocode + "^" + "Holder_BR' class='Holder_BR' "
        innerHTML += "style='cursor:" + Hcursor + "; background-image: url(" + Holder.ImageBR[Ocode].src + ");' " + HeventHTML + "></td>"
    }
    innerHTML += "</tr>"
    innerHTML += "</table>"
    innerHTML += "</div>";
    return innerHTML;
}
//--------------------------------------------------------------
//Holder.create ------------------------------------
Holder.create = function(MapID, Ocode) {
    var Mcode = Map.getMcodeFromMapID(MapID);
    var Moptions = Map.MapObj[MapID]
    var Hoptions = Holder.getOptions(MapID, Ocode);
    var HolderSize = { w: 0, h: 0 };
    //----------------------------------
    Holder.remove(MapID, Ocode)
    //----------------------------------
    Hoptions.visible = true;
    //----------------------------------
    
    
    //----------------------------------
    var innerHTML = Holder.getInnerHTML(MapID, Ocode);
    document.getElementById(Mcode + "^Map^" + "MapContainer").innerHTML += innerHTML;
    //----------------------------------
    if (Hoptions.HolderType=="ToolsHolder"){
        Moptions.ToolsHolderList += ";" + Ocode;
        Moptions.ToolsHolderArray = Moptions.ToolsHolderList.split(";");
        HolderSize = Tools.create(MapID, Ocode, "Holder_MM", Hoptions.ToolsList, Hoptions.align, Hoptions.ToolsPos, Hoptions.Padding);
    }
    //----------------------------------
    if (Hoptions.HolderType=="FrameHolder"){
        Moptions.FrameHolderList += ";" + Ocode;
        Moptions.FrameHolderArray = Moptions.FrameHolderList.split(";");
        if (Ocode == "Title") { HolderSize = MapF_Title.create (MapID, Ocode); }
        if (Ocode == "North") { HolderSize = MapF_North.create (MapID, Ocode); }
        if (Ocode == "Location") {HolderSize = MapF_Location.create (MapID, Ocode);}
        if (Ocode == "Scale") { HolderSize = MapF_Scale.create (MapID, Ocode); }
        if (Ocode == "Logo") { HolderSize = MapF_Logo.create (MapID, Ocode); } 
        if (Ocode == "GeoinfoLogo") { HolderSize = MapF_GeoinfoLogo.create (MapID, Ocode); } 
        
    }
    //----------------------------------    
    
    
    //    if (ToolsAlign = "Horizontal") {
    //        ToolsHolderSize.w += 20; 
    //       // ToolsHolderSize.h = Math.max(ToolsSize.h, Tools.CloseView.size.h);
    //    } else {
    //       // ToolsSize.w = Math.max(ToolsSize.w, Tools.CloseView.size.w);
    //        ToolsHolderSize.h += 20; 
    //    }
    //...........................................................
    var w = 0;
    if (Hoptions.style == 0) { w = 18; } else { w = 2 }


    var Elem0 = document.getElementById(Mcode + "^" + Ocode + "^" + "Holder_Container")
    Elem0.style.width = HolderSize.w + w + "px";
    Elem0.style.height = HolderSize.h + w + "px";
    //----------------------------------
    var Elem1 = document.getElementById(Mcode + "^" + Ocode + "^" + "Holder_MM")
    Elem1.style.width = HolderSize.w + "px";
    Elem1.style.height = HolderSize.h + "px";
    //----------------------------------   

    Holder.Initial(MapID, Ocode);

}

//--------------------------------------------------------------
//Holder.Initial ------------------------------------------
Holder.Initial = function(MapID, Ocode) {
    var Moptions = Map.MapObj[MapID]
    var Mcode = Map.getMcodeFromMapID(MapID);
    var Hoptions = Holder.getOptions(MapID, Ocode);
    var w = 0;
    if (Hoptions.style == 0) { w = 18; } else { w = 2 }
    //----------------------------------
    var Elem0 = document.getElementById(Mcode + "^Map^" + "MapContainer");
    var Size0 = Map.getElem.Size(Elem0);
    //----------------------------------
    var Elem = document.getElementById(Mcode + "^" + Ocode + "^" + "Holder_Container")
    var size = Map.getElem.Size(Elem);


//    var Elem = document.getElementById(Mcode + "^" + Ocode + "^" + "Holder_Container")
//    //----------------------------------
//    var size = { w: 0, h: 0 };
//    if (Hoptions.DefSize.size != "auto") {
//        size.w = Hoptions.DefSize.w
//        size.h = Hoptions.DefSize.h
//    } else {
//        size = Map.getElem.Size(Elem);
//    }
//    Elem.style.width = (size.w + w )+ "px";
//    Elem.style.height = (size.h+ w ) + "px";
    //----------------------------------
    

    //    var x = Size0.w - Size1.w; ;
    //    //var y = Size0.h - Size1.h;
    //    var y = 0;
    //var w = Size1.w + 2;
    //var h = Size1.h + 2;
    var pos =Holder.GetAngPosition (Hoptions, Size0,size);

    Elem.style.left = pos.x + "px";
    Elem.style.top = pos.y + "px";
    //----------------------------------
    if (Tools.JoyStick.visible && Tools.JoyStick.Ocode == Ocode) {
        Tools.JoyStick.Pos = Map.getElem.Position(Mcode + "^" + Tools.JoyStick.Ocode + "^" + "JoyStickBg");
    }
    if (Tools.ScaleBar.visible && Tools.ScaleBar.Ocode == Ocode) {
        Tools.ScaleBar.Pos = Map.getElem.Position(Mcode + "^" + Tools.ScaleBar.Ocode + "^" + "ScaleBar");

    }
}

//--------------------------------------------------------------
//Holder.Initial ------------------------------------------
Holder.GetAngPosition = function(Hoptions, Size0,size) {
    var pos = { x: 0, y: 0 };
    switch (Hoptions.DefSize.Ang) {
        case "ABS":
            pos.x = Hoptions.DefSize.x
            pos.y = Hoptions.DefSize.y
            break;
        case "UL":
            pos.x = Hoptions.DefSize.x;
            pos.y = Hoptions.DefSize.y;
            break;
         case "UM":
            pos.x = Size0.w/2 - size.w/2-Hoptions.DefSize.x;
            pos.y = Hoptions.DefSize.y;
            break;           
        case "UR":
            pos.x = Size0.w - size.w-Hoptions.DefSize.x;
            pos.y = Hoptions.DefSize.y;
            break;
            
         case "ML":
            pos.x = Hoptions.DefSize.x;
            pos.y = Size0.h /2- size.h +Hoptions.DefSize.y;
            break;           
            
        case "MM":
            pos.x = Size0.w /2- size.w +Hoptions.DefSize.x;
            pos.y = Size0.h /2- size.h +Hoptions.DefSize.y;
            break;
        case "MR":
            pos.x = Size0.w - size.w-Hoptions.DefSize.x;
            pos.y = Size0.h /2- size.h +Hoptions.DefSize.y;
            break;
        case "DL":
            pos.x = Hoptions.DefSize.x;
            pos.y = Size0.h - size.h-Hoptions.DefSize.y;
            break; 
        case "DM":
            pos.x = Size0.w/2 - size.w/2-Hoptions.DefSize.x;
            pos.y = Size0.h - size.h-Hoptions.DefSize.y;
            break;  
        case "DR":
            pos.x = Size0.w - size.w - Hoptions.DefSize.x;
            pos.y = Size0.h - size.h - Hoptions.DefSize.y;
            break;          
        default:
            pos.x = Size0.w /2- size.w;
            pos.y = Size0.h /2- size.h;
    }
    return pos;
}



//--------------------------------------------------------------
//Holder.remove ------------------------------------------
Holder.remove = function(MapID, Ocode) {
    var Mcode = Map.getMcodeFromMapID(MapID);
    var Moptions = Map.MapObj[MapID]
    var Hoptions = Holder.getOptions(MapID, Ocode);
    //----------------------------------
    var ElemMapContainer = document.getElementById(Mcode + "^Map^" + "MapContainer")
    var Elem = document.getElementById(Mcode + "^" + Ocode + "^" + "Holder_Container")
    if (Elem) {
        ElemMapContainer.removeChild(Elem);
        if (Hoptions.HolderType=="ToolsHolder"){
          // ?? remove fom list  Moptions.ToolsHolderList += ";" + Ocode;
        }
        if (Hoptions.HolderType=="FrameHolder"){
            // ?? remove fom list  Moptions.FrameHolderList += ";" + Ocode;
        }
        return true;
    } else {
        return false;
    }
}
//--------------------------------------------------------------
//Holder.onmouseover ------------------------------------------
Holder.onmouseover = function(elem) {
    //----------------------------------
    if (!elem) { return false; }
    if (!elem.id) { return false; }
    var Mcode = elem.id.split("^")[0];
    var Ocode = elem.id.split("^")[1];
    if (Ocode == MapPage.DeActiveEvent) { return false; }
    var Ecode = elem.id.split("^")[2];
    if (!Ecode) { return false; }
    //----------------------------------
    var MapID = Map.getMapIDFromCode(Mcode);
    var Moptions = Map.MapObj[MapID];
    //----------------------------------
    Holder.SetCursor(MapID, elem, Ecode, "onmouseup");
    if (Moptions.ActiveTools != "Arrow") { return false; }
    //----------------------------------
    if (Ecode.indexOf("Holder_") >= 0) {
        var elem0 = document.getElementById(Mcode + "^" + Ocode + "^" + "Holder_MM");
        elem0.style.border = "dashed 1px blue";
    }
    //----------------------------------
    return true;
};
//--------------------------------------------------------------
// Holder.onmouseout -------------------------------------
Holder.onmouseout = function(elem) {
    //----------------------------------
    if (!elem) { return false; }
    if (!elem.id) { return; }
    var Mcode = elem.id.split("^")[0];
    var Ocode = elem.id.split("^")[1];
    if (Ocode == MapPage.DeActiveEvent) { return false; }
    var Ecode = elem.id.split("^")[2];
    if (!Ecode) { return; }
    //----------------------------------
    var MapID = Map.getMapIDFromCode(Mcode);
    var Moptions = Map.MapObj[MapID];
    if (Moptions.ActiveTools != "Arrow") { return false; }
    var Hoptions = Holder.getOptions(MapID, Ocode);
    //----------------------------------
    var Hborder = "";
    if (Ecode.indexOf("Holder_") >= 0) {
        if (Hoptions.border > 0) {
            Hborder = "solid " + Hoptions.border + "px " + Hoptions.bordercolor;
        } else {
            Hborder = "none";
        }
        var elem0 = document.getElementById(Mcode + "^" + Ocode + "^" + "Holder_MM");
        elem0.style.border = Hborder;
    }
    //----------------------------------
    return true;
};
//--------------------------------------------------------------
//Holder.onmousedown ------------------------------------
Holder.onmousedown = function(elem, e) {
//----------------------------------
if (!elem.id) { return false; }
var Mcode = elem.id.split("^")[0];
var MapID = Map.getMapIDFromCode(Mcode);
var Moptions = Map.MapObj[MapID];
if (Moptions.ActiveTools != "Arrow") { return false; }   
    //----------------------------------
    if (!MapPage.SetMouseDown(elem, e)) {return false;}
    e.cancelBubble = true;
    //----------------------------------
    if (MapPage.EcodeMousedown == "Holder_MM" && MapPage.DeActiveEvent == MapPage.OcodeMousedown) { return false; }
    Holder.SetCursor(MapID, elem, MapPage.EcodeMousedown, "onmousedown");
    //----------------------------------
    return false;
};
//--------------------------------------------------------------
//Holder.onmouseup ------------------------------------
Holder.onmouseup = function(elem, e) {
    var Mcode = MapPage.McodeMousedown;
    var MapID = Map.getMapIDFromCode(Mcode);
    var Hoptions = Holder.getOptions(MapID, MapPage.OcodeMousedown);
    //----------------------------------
    if (Hoptions.HolderType=="ToolsHolder"){
        if (Tools.ScaleBar.visible) {
            if (inArray(Hoptions.ToolsArray, "JoyStick")) {
                Tools.JoyStick.Pos = Map.getElem.Position(MapPage.McodeMousedown + "^" + MapPage.OcodeMousedown + "^" + "JoyStickBg");
            }
            if (inArray(Hoptions.ToolsArray,"ScaleBar")) {
                Tools.ScaleBar.Pos = Map.getElem.Position(MapPage.McodeMousedown + "^" + MapPage.OcodeMousedown + "^" + "ScaleBar");
            }
        }
    }
    //----------------------------------
    if (Hoptions.HolderType=="FrameHolder"){
        if (MapPage.OcodeMousedown == "Location") {
            // ?? check if size is chaing
            //var MapID = Map.getMapIDFromCode(MapPage.McodeMousedown);
            MapF_Location.getMap.By_MapReference(MapID);
        }
    }
    //----------------------------------
    if (MapPage.EcodeMousedown == "Holder_MM" && MapPage.DeActiveEvent == MapPage.OcodeMousedown) { return false; }
    Holder.SetCursor(MapID, elem, MapPage.EcodeMousedown, "onmouseup");
    //----------------------------------
    return false;
};
//--------------------------------------------------------------
// Holder.onmousemove ------------------------------------
Holder.onmousemove = function(elem, e) {
    //----------------------------------
    var Mcode = MapPage.McodeMousedown;
    var Ocode = MapPage.OcodeMousedown;
    var Ecode = MapPage.EcodeMousedown;
    var MapID = Map.getMapIDFromCode(Mcode);
    var Hoptions = Holder.getOptions(MapID, Ocode);
    //----------------------------------
    var pxmoved = { x: 0, y: 0 };
    pxmoved.x = parseInt(MapPage.CurPos.x - MapPage.DowPos.x);
    pxmoved.y = parseInt(MapPage.CurPos.y - MapPage.DowPos.y);
    var Celem = document.getElementById(Mcode + "^" + Ocode + "^" + "Holder_Container");
    if (!Celem) { return false; }
    var MMelem = document.getElementById(Mcode + "^" + Ocode + "^" + "Holder_MM");
    if (!MMelem) { return false; }
    var Size = Map.getElem.Size(Celem);
    var Position = Map.getElem.Position_Relative(Celem)
    //----------------------------------
    if (Ecode == "Holder_MM") {
        var NewPosition = Position;
        NewPosition.x += pxmoved.x;
        NewPosition.y += pxmoved.y;
        NewPosition = Holder.CheckPositionLimits(NewPosition, Mcode, Ocode, Size, Hoptions.style);
        Celem.style.left = NewPosition.x + "px";
        Celem.style.top = NewPosition.y + "px";
        MapPage.DowPos = MapPage.CurPos;
        return true;
    }
    //----------------------------------
    if ("Holder_MR|Holder_BR|Holder_BM".indexOf(Ecode) >= 0) {
        var NewSize = Size;
        if ("Holder_MR|Holder_BR".indexOf(Ecode) >= 0) {
            NewSize.w += pxmoved.x;
        }
        if ("Holder_BM|Holder_BR".indexOf(Ecode) >= 0) {
            NewSize.h += pxmoved.y;
        }
    }
    //----------------------------------
    if ("Holder_ML|Holder_UL|Holder_UM|Holder_UR|Holder_BL".indexOf(Ecode) >= 0) {
        var NewPosition = Position;
        var NewSize = Size;
        if ("Holder_ML|Holder_UL|Holder_BL".indexOf(Ecode) >= 0) {
            NewPosition.x += pxmoved.x;
            NewSize.w -= pxmoved.x;
        }
        if ("Holder_UM|Holder_UL|Holder_UR".indexOf(Ecode) >= 0) {
            NewPosition.y += pxmoved.y;
            NewSize.h -= pxmoved.y;
        }
        if (Ecode == "Holder_BL") {
            NewSize.h += pxmoved.y;
        }
        if (Ecode == "Holder_UR") {
            NewSize.w += pxmoved.x;
        }
        NewPosition = Holder.CheckPositionLimits(NewPosition, Mcode, Ocode, Size, Hoptions.style);
        Celem.style.left = NewPosition.x + "px";
        Celem.style.top = NewPosition.y + "px";
    }
    //----------------------------------
    //----------------------------------
    NewSize = Holder.CheckSizeLimits(NewSize, Mcode, Ocode, Size);
    Celem.style.width = parseInt(NewSize.w) + "px";
    Celem.style.height = parseInt(NewSize.h) + "px";
    MMelem.style.width = parseInt(NewSize.w - 18) + "px";
    MMelem.style.height = parseInt(NewSize.h - 18) + "px";
    //----------------------------------
//    if (Ocode == "Location") {
//        var Elem3 = document.getElementById(Mcode + "^" + Ocode + "^" + "Locationholder");
//        Elem3.style.width = parseInt(NewSize.w - 18) + "px";
//        Elem3.style.height = parseInt(NewSize.h - 18) + "px";
//    }
    MapPage.DowPos = MapPage.CurPos;
    //----------------------------------
return true;
};
//--------------------------------------------------------------
//--------------------------------------------------------------
//Holder.SetCursor -------------------------------------------
Holder.SetCursor = function(MapID, elem, Ecode, FrameStatus) {
    var Mcode = Map.getMcodeFromMapID(MapID);
    var Moptions = Map.MapObj[MapID];
    //----------------------------------
    if (Moptions.ActiveTools != "Arrow") {
        elem.style.cursor = document.getElementById(Mcode + "^Map^" + "MapContainer").style.cursor
        return false;
    }
    if (FrameStatus == "onmouseup") {
        if (Ecode == "Holder_UL") { elem.style.cursor = "nw-resize"; }
        if (Ecode == "Holder_UM") { elem.style.cursor = "n-resize"; }
        if (Ecode == "Holder_UR") { elem.style.cursor = "ne-resize"; }
        if (Ecode == "Holder_ML") { elem.style.cursor = "w-resize"; }
        if (Ecode == "Holder_MM") { elem.style.cursor = "move"; }
        if (Ecode == "Holder_MR") { elem.style.cursor = "e-resize"; }
        if (Ecode == "Holder_BL") { elem.style.cursor = "sw-resize"; }
        if (Ecode == "Holder_BM") { elem.style.cursor = "s-resize"; }
        if (Ecode == "Holder_BR") { elem.style.cursor = "se-resize"; }
    }
    if (FrameStatus == "onmousedown") {
        if (Ecode == "Holder_UL") { elem.style.cursor = "url(Images/H_NW.cur),auto"; }
        if (Ecode == "Holder_UM") { elem.style.cursor = "url(Images/H_NS.cur),auto"; }
        if (Ecode == "Holder_UR") { elem.style.cursor = "url(Images/H_NE.cur),auto"; }
        if (Ecode == "Holder_ML") { elem.style.cursor = "url(Images/H_WE.cur),auto"; }
        if (Ecode == "Holder_MM") { elem.style.cursor = "url(Images/H_MOVE.cur),auto"; }
        if (Ecode == "Holder_MR") { elem.style.cursor = "url(Images/H_WE.cur),auto"; }
        if (Ecode == "Holder_BL") { elem.style.cursor = "url(Images/H_NE.cur),auto"; }
        if (Ecode == "Holder_BM") { elem.style.cursor = "url(Images/H_NS.cur),auto"; }
        if (Ecode == "Holder_BR") { elem.style.cursor = "url(Images/H_NW.cur),auto"; }
    }
}

//--------------------------------------------------------------
//--------------------------------------------------------------
//Holder.SetCursor -------------------------------------------
Holder.SetCursorActive = function(MapID, Ocode, Status) { 
    var Mcode = Map.getMcodeFromMapID(MapID);
   // var Moptions = Map.MapObj[MapID];
    //----------------------------------   
    if (Status == "active") {
        var Hoptions = Holder.getOptions(MapID, Ocode);
        document.getElementById(Mcode + "^" + Ocode + "^" + "Holder_UL").style.cursor = "nw-resize";
        document.getElementById(Mcode + "^" + Ocode + "^" + "Holder_UM").style.cursor = "n-resize";
        document.getElementById(Mcode + "^" + Ocode + "^" + "Holder_UR").style.cursor = "ne-resize";
        document.getElementById(Mcode + "^" + Ocode + "^" + "Holder_ML").style.cursor = "w-resize";
        if (Hoptions.move) {
            document.getElementById(Mcode + "^" + Ocode + "^" + "Holder_MM").style.cursor = "move";
        } else {
            document.getElementById(Mcode + "^" + Ocode + "^" + "Holder_MM").style.cursor = "default";
        }
        document.getElementById(Mcode + "^" + Ocode + "^" + "Holder_MR").style.cursor = "e-resize";
        document.getElementById(Mcode + "^" + Ocode + "^" + "Holder_BL").style.cursor = "sw-resize";
        document.getElementById(Mcode + "^" + Ocode + "^" + "Holder_BM").style.cursor = "s-resize";
        document.getElementById(Mcode + "^" + Ocode + "^" + "Holder_BR").style.cursor = "se-resize";
    
    }
    if (Status == "inactive") {
        document.getElementById(Mcode + "^" + Ocode + "^" + "Holder_UL").style.cursor = "default";
        document.getElementById(Mcode + "^" + Ocode + "^" + "Holder_UM").style.cursor = "default";
        document.getElementById(Mcode + "^" + Ocode + "^" + "Holder_UR").style.cursor = "default";
        document.getElementById(Mcode + "^" + Ocode + "^" + "Holder_ML").style.cursor = "default";
        document.getElementById(Mcode + "^" + Ocode + "^" + "Holder_MM").style.cursor = "default";
        document.getElementById(Mcode + "^" + Ocode + "^" + "Holder_MR").style.cursor = "default";
        document.getElementById(Mcode + "^" + Ocode + "^" + "Holder_BL").style.cursor = "default";
        document.getElementById(Mcode + "^" + Ocode + "^" + "Holder_BM").style.cursor = "default";
        document.getElementById(Mcode + "^" + Ocode + "^" + "Holder_BR").style.cursor = "default";
    }    

}

//--------------------------------------------------------------
//Holder.CheckPositionLimits ---------------------------------
Holder.CheckPositionLimits = function(CheckPosition, Mcode, Ocode, Size, style) {
    var PositionLimits = Holder.getPositionLimits(Mcode, Ocode, Size, style);
    if (CheckPosition.x < PositionLimits.L) { CheckPosition.x = PositionLimits.L }
    if (CheckPosition.x >= PositionLimits.R) { CheckPosition.x = PositionLimits.R }
    if (CheckPosition.y < PositionLimits.T) { CheckPosition.y = PositionLimits.T }
    if (CheckPosition.y >= PositionLimits.B) { CheckPosition.y = PositionLimits.B }
    return CheckPosition;
}
//--------------------------------------------------------------
//Holder.getPositionLimits -----------------------------------
Holder.getPositionLimits = function(Mcode, Ocode, Size, style) {
var ContSize = Map.getElem.Size(Mcode + "^Map^" + "MapContainer")
    var PositionLimits = { L: 0, T: 0, R: 0, B: 0 };
    if (style == 0) {
        PositionLimits.L = 0;
        PositionLimits.R = ContSize.w - Size.w + 0;
        PositionLimits.T = 0;
        PositionLimits.B = ContSize.h - Size.h + 0;

        PositionLimits.L = -6;
        PositionLimits.R = ContSize.w - Size.w + 12;
        PositionLimits.T = -6;
        PositionLimits.B = ContSize.h - Size.h + 12;
    } else if (style == 1) {
        PositionLimits.L = 0;
        PositionLimits.R = ContSize.w - Size.w + 0;
        PositionLimits.T = 0;
        PositionLimits.B = ContSize.h - Size.h + 0;

    }
    //    if(Ocode=="Title^"){
    //        PositionLimits.L=-3;
    //        PositionLimits.R=ContSize.w- Size.w+9;
    //        PositionLimits.T=-3;
    //        PositionLimits.B=ContSize.h-Size.h+9;
    //        return	PositionLimits;
    //	}
    return PositionLimits;
}

//--------------------------------------------------------------
//Holder.CheckSizeLimits -------------------------------------
Holder.CheckSizeLimits = function(CheckSize, Mcode, Ocode, Size) {
var SizeLimits = Holder.getSizeLimits(Mcode, Ocode, Size);
    if (CheckSize.w < SizeLimits.MinW) { CheckSize.w = SizeLimits.MinW }
    if (CheckSize.w > SizeLimits.MaxW) { CheckSize.w = SizeLimits.MaxW }
    if (CheckSize.h < SizeLimits.MinH) {
        CheckSize.h = SizeLimits.MinH
    }
    if (CheckSize.h > SizeLimits.MaxH) { CheckSize.h = SizeLimits.MaxH }
return CheckSize;
}
//--------------------------------------------------------------
//Holder.getSizeLimits -------------------------------------
Holder.getSizeLimits = function(Mcode, Ocode, Size) {
var ContSize = Map.getElem.Size(Mcode + "^Map^" + "MapContainer")
    var SizeLimits = { MinW: 0, MaxW: 0, MinH: 0, MaxW: 0 };

    SizeLimits.MinW = 50;
    SizeLimits.MaxW = ContSize.w - 5;
    SizeLimits.MinH = 21;
    SizeLimits.MaxH = ContSize.h - 5;
    if (Ocode == "Title^") {
        SizeLimits.MinW = 150;
        SizeLimits.MaxW = ContSize.w - 5;
        SizeLimits.MinH = 25 + 18;
        SizeLimits.MaxH = ContSize.h - 5;
    }
return SizeLimits;
}