// MindFusion namespace declaration
if (MindFusion == null || typeof(MindFusion) != "object")
{
    var MindFusion = new Object();
}

// a helper method used to replace the contents of div elements
MindFusion.setInnerHtml = function(elementId, htmlCode)
{
    //alert("applet " + htmlCode);
    var element = document.getElementById(elementId);
    if (!element) alert("element " + elementId + " not found");
    
    // convert string to node
    var div = document.createElement('div');
    div.innerHTML = htmlCode;
    var a = div.childNodes[0];
    
    element.parentNode.replaceChild(a, element);
}

// helper methods for renaming/copying of elements
MindFusion.moveAttributes = function (src, dst)
{
    var atts = src.attributes;
    for (var i = 0, n = atts.length; i < n; ++i) {
        var a = atts[i].cloneNode(false);
        dst.setAttributeNode(a);
    }
    return dst;
}

// helper methods for renaming/copying of elements
MindFusion.moveChildren = function (src, dst)
{
    var cs = src.childNodes;
    for (var i = cs.length-1; i >= 0; --i) {
        var c = cs[i];
        src.removeChild(c);
        //var newc = c.cloneNode(true);
        dst.appendChild(c);
    }
    return dst;
}

// an attempt to render the applet directly as html for cleaner source
MindFusion.activateApplet = function (id) {
    // element to be replaced
    var div = document.getElementById(id);
    alert("div.innerHTML " + div.innerHTML);
    
    // remembers the position of the replaced element
    var handle = document.createElement('div');
    
    // insert replaced element ot get its outerHTML
    div.parentNode.replaceChild(handle, div);
    var holder = document.createElement('div');
    holder.appendChild(div);
    var divString = holder.innerHTML;
    alert("divString " + divString);
    
    // make the div an applet
    var holderInnerHTML = "<applet" + divString.substring(4, divString.length-4) + "applet>";
    alert("innerHTML " + holderInnerHTML);
    holder.innerHTML = holderInnerHTML;
    var applet = holder.childNodes[0];
    
    // place the applet
    handle.parentNode.replaceChild(applet, handle);
}

// in some browsers javascript can not invoke java methods in appletStarted event
// try to access them in timeout handlers
MindFusion.invokeInit = function(appletStartedScript, appletId, attempts)
{
    //alert('in MindFusion.invokeInit ' + appletId);
    if (!appletStartedScript || appletStartedScript.length==0) return;
    var applet = document.getElementById(appletId);
    if (applet.appletLoadedCheck)
    {
        window[appletStartedScript].call();
    }
    else if (attempts>0)
    {
        // applet.getDiagram method not yet available, try later
        setTimeout(function(){MindFusion.invokeInit(appletStartedScript, appletId, attempts - 1)}, 100);
    }
}


// MindFusion.Diagramming namespace declaration
if (MindFusion.Diagramming == null || typeof(MindFusion.Diagramming) != "object")
{
    MindFusion.Diagramming = new Object();
    
    MindFusion.Diagramming.Action = 
    {
        None        :   0,
		Create      :   1,
		Modify      :   2,
		Split       :   3
    }
    
    MindFusion.Diagramming.Align =
    {
        Near        :   0,
        Center      :   1,
        Far         :   2
    }

    MindFusion.Diagramming.Anchoring =
	{
		Ignore      :   0,
		Keep        :   1,
		Reassign    :   2
	}
	
	MindFusion.Diagramming.LinkCrossings =
	{
		Straight    :   0,
		Arcs        :   1,
		Cut         :   2
	}
	
    // define the ArrowHead enumeration constants
    MindFusion.Diagramming.ArrowHead =
    {
	    None        :   0,
	    Arrow       :   1,
	    Triangle    :   2,
	    Circle      :   3,
	    Tetragon    :   4,
	    Rhombus     :   5,
	    BowArrow    :   6,
	    PointerArrow:   7,
	    Pentagon    :   8,
	    DoubleArrow :   9,
	    Reversed    :   10,
	    RevTriangle :   11,
	    Quill       :   12,
	    RevWithLine :   13,
	    RevWithCirc :   14,
	    BackSlash   :   15,
	    Slash       :   16,
	    DefaultFlow :   17
    }
 
    MindFusion.Diagramming.LinkStyle =
	{
		Bezier      :   0,
		Polyline    :   1,
		Cascading   :   2
	}
	
	MindFusion.Diagramming.LinkTextStyle =
	{
		Center              :   0,
		Rotate              :   1,
		OverLongestSegment  :   2,
		Follow              :   3
	}

	MindFusion.Diagramming.AttachTo =
	{
		FixedCorner     :   0,
		Proportional    :   1,
		LinkPoint       :   2,
		LinkSegment     :   3,
		LongestHSegment :   4,
		SideMiddle      :   5,
		AnchorToEdges   :   6
	}

	MindFusion.Diagramming.AttachToLink =
	{
		Point           :   0,
		Segment         :   1,
		LongestHSegment :   2
	}

	MindFusion.Diagramming.AttachToNode =
	{
		TopLeft         :   0,
		TopRight        :   1,
		BottomLeft      :   2,
		BottomRight     :   3,
		TopCenter       :   4,
		MiddleRight     :   5,
		BottomCenter    :   6,
		MiddleLeft      :   7
	}

	MindFusion.Diagramming.AutoSize =
	{
		None            :   0,
		RightAndDown    :   1,
		AllDirections   :   2
	}

	MindFusion.Diagramming.Behavior =
	{
		Modify              :   0,
		DrawShapes          :   1,
		DrawLinks           :   2,
		LinkShapes          :   3,
		LinkTables          :   4,
		DrawTables          :   5,
		CreateControlHost   :   6,
		LinkedControls      :   7, 
		DoNothing           :   8,
		Custom              :   9,
		Pan                 :  12
	}

	MindFusion.Diagramming.CellFrameStyle =
	{
		None        :   0,
		Simple      :   1,
		System3D    :   2
	}
    
    MindFusion.Diagramming.ClientSideMode =
	{
		/// <summary>
		/// Specifies that user interaction and drawing are handled through a Java Applet.
		/// </summary>
		JavaApplet :    0
	}	
	
	MindFusion.Diagramming.ColumnStyle = 
	{
		FixedWidth  :   0,
		AutoWidth   :   1
	}

	MindFusion.Diagramming.CustomDraw = 
	{
		None        :   0,
		Additional  :   1,
		Full        :   2,
		ShadowOnly  :   3,
		Additional2 :   4
	}

	MindFusion.Diagramming.DirectionConstraint = 
	{
		None        :   0,
		Horizontal  :   1,
		Vertical    :   2
	}

	MindFusion.Diagramming.ExpandButtonAction = 
	{
		ExpandTreeBranch    :   0,
		RaiseEvents         :   1
	}

	MindFusion.Diagramming.ExpandButtonPosition = 
	{
		OuterRight      :   0,
		OuterLowerRight :   1,
		OuterUpperRight :   2,
		OuterBottom     :   3,
		OuterLeft       :   4,
		OuterLowerLeft  :   5,
		OuterUpperLeft  :   6,
		OuterTop        :   7
	}

	MindFusion.Diagramming.FitSize = 
	{
		KeepWidth       :   0,
		KeepHeight      :   1,
		KeepRatio       :   2
	}

	MindFusion.Diagramming.GridStyle = 
	{
		Points  :   0,
		Lines   :   1
	}

	MindFusion.Diagramming.GroupAnchorStyles = 
	{
		Left    :   1,
		Top     :   2,
		Right   :   4,
		Bottom  :   8
	}

	MindFusion.Diagramming.Handles = 
	{
		None                :   0,
		ResizeTopLeft       :   1,
		ResizeTopRight      :   2,
		ResizeBottomRight   :   4,
		ResizeBottomLeft    :   8,
		ResizeTopCenter     :   16,
		ResizeMiddleRight   :   32,
		ResizeBottomCenter  :   64,
		ResizeMiddleLeft    :   128,
		Move                :   256,
		Rotate              :   512,
		All                 :   0xFFFFFFFF
	}

	MindFusion.Diagramming.HandlesStyle = 
	{
		Invisible       :   0,
		SquareHandles   :   1,
		DashFrame       :   2,
		HatchFrame      :   3,
		HatchHandles    :   4,
		HatchHandles2   :   5,
		HatchHandles3   :   6,
		MoveOnly        :   7,
		EasyMove        :   8,
		SquareHandles2  :   9,
		Custom          :   10,
		InvisibleMove   :   11
	}

	MindFusion.Diagramming.HitTestPriority = 
	{
		ZOrder              :   0,
		NodesBeforeLinks    :   1
	}

	MindFusion.Diagramming.HostMouseAction = 
	{
		PassToControl   :   0,	// pass to control
		SelectHost      :   1,	// just select
		IgnoreControl	:   2   // select or draw arrow
	}

	MindFusion.Diagramming.ImageAlign = 
	{
		Center      :   0,
		Fit         :   1,
		Stretch     :   2,
		Tile        :   3,
		TopLeft     :   4,
		BottomLeft  :   5,
		TopRight    :   6,
		BottomRight :   7,
		TopCenter   :   8,
		BottomCenter:   9,
		MiddleLeft  :   10,
		MiddleRight :   11,
		Document    :   0x1000
	}

	MindFusion.Diagramming.MarkStyle = 
	{
		None        :   0,
		Cross       :   1,
		X           :   2,
		Circle      :   3,
		Rectangle   :   4,
		Custom      :   5
	}

	MindFusion.Diagramming.ModificationStyle = 
	{
		SelectedOnly:   0,
		AutoHandles :   1
	}

	MindFusion.Diagramming.ModifierKeyAction =
	{
		None            :   0,
		Pan             :   1,
		Select          :   2,
		OverrideBehavior:   3
	}

	MindFusion.Diagramming.MouseButtonAction = 
	{
		None    :   0,
		Pan     :   1
	}

	MindFusion.Diagramming.Orientation = 
	{
		Auto        :   0,
		Horizontal  :   1,
		Vertical    :   2
	}

	MindFusion.Diagramming.Relationship = 
	{
		OneToMany   :   0,
		ManyToOne   :   1
	}

	MindFusion.Diagramming.RerouteLinks = 
	{
		Never               :   0,
		WhenModified        :   1,
		WhenIntersectNode   :   2,
		WhileCreating       :   4
	}

	MindFusion.Diagramming.RestrictToDoc = 
	{
		NoRestriction       :   0,
		Intersection        :   1,
		InsideOnly          :   2
	}

	MindFusion.Diagramming.SelectionStyle = 
	{
		SelectionHandles    :   0,
		Rectangle           :   1,
		SemiTransparent     :   2
	}

	MindFusion.Diagramming.ShadowsStyle =
	{
		None        :   0,
		OneLevel    :   1,
		ZOrder      :   2
	}

	MindFusion.Diagramming.ShowAnchors =
	{
		Always      :   0,
		Never       :   1,
		Auto        :   2,
		Selected    :   4
	}

	MindFusion.Diagramming.SnapToAnchor =
	{
		OnCreate            :   0,
		OnCreateOrModify    :   1
	}

	MindFusion.Diagramming.TableLinkStyle =
	{
		Table   :   0,
		Rows    :   1,
		Both    :   2
	}

	MindFusion.Diagramming.TableStyle =
	{
		Rectangle           :   0,
		RoundedRectangle    :   1
	}
	
	MindFusion.Diagramming.DiagramItem = function(t, z)
	{
	    this.Tag = t;
	    this.ZIndex = z;
	}

	MindFusion.Diagramming.DiagramItem.prototype.getZIndex = function()
	{
	    return this.ZIndex;
	}

	MindFusion.Diagramming.DiagramItem.prototype.getTag = function()
	{
	    return this.Tag;
	}

	MindFusion.Diagramming.EventArgs = function(t, z)
	{
	    this.Item = new MindFusion.Diagramming.DiagramItem(t, z);
	}
	
	MindFusion.Diagramming.EventArgs.prototype.getItem = function()
	{
	    return this.Item;
	}
	
	MindFusion.Diagramming.EventArgs.prototype.getNode = function()
	{
	    return this.Item;
	}
	
	MindFusion.Diagramming.EventArgs.prototype.getLink = function()
	{
	    return this.Item;
	}
}