﻿var activityList = new Array();
var activityCount = 0;
var connectors = new Array();
var activityIds = new Array();
var workflow =null;
var workflowNoResizeFlag = false;
var workflowActivity = null;
var sourcecodediv = null;
var rulesdiv = null;
var selectedElement = null;
var propertyBrowser = null;
var activityBind = null;
var drappery = null;
var drappery2 = null;
var drappery3 = null;
var errorList = null;
var warningList = null;
var conditionForm = null;
var statusBar = null;
var progressBar = null;
var tooltip = null;
var namespaces = new Array();

function CreateDesigner()
{
document.onLoad = OnLoad
//document.onkeydown = keyDown
OnLoad()
}

function LoadScript(url)
{
    var e = document.createElement("script")
    e.src = url
    e.type = "text/javascript"
    document.getElementsByTagName("head")[0].appendChild(e)
}

var editingCtrl=null;
var editingActName = "";
var editingProp = "";

function focusCtrl(aName,prop,ctrl)
{
    if (editingCtrl!=null)
    {
        setProperty(editingActName,editingProp,editingCtrl.value);
    }
    editingCtrl = ctrl;
    editingActName = aName;
    editingProp = prop;    
}

function blurCtrl(aName,prop,ctrl)
{
   setProperty(aName,prop,ctrl.value);
   editingCtrl = null;
}

function changeCtrl(aName,prop,ctrl)
{
   setProperty(aName,prop,ctrl.value);
}

function keyDown(e)
{
var ieKey=event.keyCode;
    if (ieKey==46){
        //if (editingCtrl!=null) alert(editingCtrl.id);
        if (selectedElement == null || selectedElement == workflow || editingCtrl!=null)
            return
        
        if (confirm ("Do you want to delete selected activity?")){
            DeleteSelectedActivity();
        }
    } 
}

function DeleteSelectedActivity()
{
            hidecontextmenu();
            if (selectedElement && selectedElement.className!="workflow")
            {            	              
                DeleteElementsActivities(selectedElement);
                
                var newArray = new Array();
                var j=0;
                for(var i=0;i<activityList.length;i++)
                {
                    if (activityList[i]!=null)
                       newArray[j++]=activityList[i];
                }
                
                activityList = newArray;     
                activityCount= activityList.length; 
                
                AddAllBinds();
                
                var nextSelected = activityList[0];
                propertyBrowser.innerHTML = "";
                if (nextSelected)
                {
                    Quanticks.activityFactory()._Select(nextSelected.element)
                }
            }
}

function DeleteElementsActivities(element)
{
        for(var c=0;c<element.children.length;c++)
        {
            DeleteElementsActivities(element.children[c]);             
        }
        var activity = getActivityByElement(element);
        if (activity!=null)
        {
            DeleteActivity(activity);
        }        
}

function DeleteActivity(activity)
{      
        RemoveActivityBinds(activity);
        var parent = activity.element.parentNode;    
        var aconnector = activity.element.previousSibling;	
        
        for(var i=0;i<activityList.length;i++)
        {
            if (activityList[i]!=null && activityList[i].element==activity.element)
               activityList[i] = null;
        }         
        
        activity.element.onresize = null;

        parent.removeChild(activity.element);
        if (aconnector)
            parent.removeChild(aconnector);
        if (parent.onresize)
            parent.onresize();
}

function getActivityByElement(element)
{
	for(var i=0;i<activityList.length;i++)
	{
	    if ((activityList[i] != null) && (activityList[i].element == element))
	    return activityList[i]
    }
    return null;
}

function OnLoad() {
	var group;
    var allDivs = new Array();
    var coordinates = Quanticks.coordinates();
    var activityFactory = Quanticks.activityFactory();
    
    workflow = document.getElementById("WorkflowElement");
    workflow.onselectstart=function(){return false};
    workflow.onresize = workflowresize;
    toolbox = document.getElementById("Toolbox1");  
    propertyBrowser = document.getElementById("PropertyGrid1");  
    sourcecodediv = document.getElementById("sourcecodediv");
    rulesdiv = document.getElementById("rulesdiv");
    errorList = document.getElementById("errorList");
    warningList = document.getElementById("warningList");    
    statusBar = document.getElementById("statusBar");    
    progressBar = document.getElementById("ProgressBar");    
    allToolboxitems = toolbox.getElementsByTagName("div");
    activityBind = document.getElementById("ActivityBind");
    conditionForm = document.getElementById("ConditionForm");  
    tooltip = document.getElementById("Tooltip");
    contextMenu = document.getElementById("contextmenu");      
    drappery = document.getElementById("Drappery");
    drappery2 = document.getElementById("Drappery2");
    drappery3 = document.getElementById("Drappery3");
    UI.Initialize();
    
    for(var i=0;i<activityTypes.length;i++) {
		var iconSrc = eval(activityTypes[i]+".GetToolboxIcon()")
		var skipToolbox = false
		if (iconSrc == null)
		        skipToolbox = true		    
		if (!skipToolbox)
		{
		    var aType=document.createElement("DIV")
		    aType.className="toolboxitem"
		    aType.id=activityTypes[i]
		    toolbox.appendChild(aType)
		    aType.innerHTML+="<table height='100%' onmouseenter='settooltiptimer(\""+activityTypes[i]+"\")' onmouseleave='hidetooltip()'><tr><td valign='center' width='20'><img src='"+iconSrc+"'></td><td valign='center' width='130'>&nbsp;"+activityTypes[i]+"</td><td align='right' width='10'></td></tr></table>"
            activityFactory.makeToolboxItem(aType);
		}
		activityIds[i]= new Array()
	}
    workflowActivity = new SequentialWorkflowActivity(workflow)
    workflowActivity.Initialize("Workflow1")
}

function LoginSuccess()
{
    var user = document.getElementById("authResult").innerText;
    if (user!="")
    {
        document.getElementById("user").innerText = user;
        UI.DialogForm.Close();
        document.getElementById("loginbutton").innerHTML = "<a href=\"Logout.aspx\">Logout</a>";        
        if (logincaller!=null)
            logincaller();
    }
}

var logincaller = null;

function Login(callermethod)
{
    logincaller = callermethod;
    UI.DialogForm.SetUrl("Login.aspx");
    UI.DialogForm.onSuccess = LoginSuccess;
    UI.DialogForm.cancelButton = true;    
    UI.DialogForm.Show("Login","");    
    //document.getElementById("username").focus();
}

function Register()
{
    UI.DialogForm.SetUrl("Register.aspx");
    UI.DialogForm.onSuccess = LoginSuccess;
    UI.DialogForm.Show("Register","");
    //document.getElementById("username").focus();
}
    
function myWorkflows()
{
    if (document.getElementById("user").innerText=="")
    {
        Login(myWorkflows);
        return;
    }
    UI.SelectionForm.SetUrl("MyWorkflows.ashx"); 
    UI.SelectionForm.onEdit = OpenWorkflow;
    UI.SelectionForm.onDelete = DeleteWorkflow;
    UI.SelectionForm.Show("My workflows","");  
}

function OpenWorkflow(wfname)
{
    UI.SelectionForm.Close();
    EditWorkflow(wfname);
}

function DeleteWorkflow(wfname)
{
    if (confirm("Are you sure you want to delete workflow "+wfname+"?"))
    {
        UI.Operation.SetUrl("DeleteWf.ashx");
        UI.Operation.onSuccess = DeleteComplete;
        UI.Operation.Execute(wfname);
    }
}

function DeleteComplete(wfname)
{
    UI.SelectionForm.Refresh();
}

var Quanticks = {
	events : function() {
		if (!Quanticks._eventsFactory) throw "Quanticks Events module isn't loaded";
		return Quanticks._eventsFactory
	},

	css : function() {
		if (!Quanticks._cssFactory) throw "Quanticks CSS module isn't loaded";
		return Quanticks._cssFactory
	},

	coordinates : function() {
		if (!Quanticks._coordinatesFactory) throw "Quanticks Coordinates module isn't loaded";
		return Quanticks._coordinatesFactory
	},

	drag : function() {
		if (!Quanticks._dragFactory) throw "Quanticks Drag module isn't loaded";
		return Quanticks._dragFactory
	},

	helpers : function() {
		return Quanticks._helpers
	},
	
	activityFactory : function() {
		if (!Quanticks._activityFactory) throw "Quanticks Activity module isn't loaded";
		return Quanticks._activityFactory
	},
	getUser : function(){
	    return document.getElementById("user").innerText;
	},
	getWorkflowView : function(){
	    return document.getElementById("WorkflowView");
	}
}

Quanticks._helpers = {
	map : function(array, func) {
		for (var i = 0, n = array.length; i < n; i++) func(array[i])
	},

	nextItem : function(item, nodeName) {
		if (item == null) return
		var next = item.nextSibling
		while (next != null) {
			if (next.nodeName == nodeName) return next
			next = next.nextSibling
		}
		return null
	},

	previousItem : function(item, nodeName) {
		var previous = item.previousSibling
		while (previous != null) {
			if (previous.nodeName == nodeName) return previous
			previous = previous.previousSibling
		}
		return null
	},

	moveBefore : function(item1, item2) {
		var parent = item1.parentNode
		parent.removeChild(item1)
		parent.insertBefore(item1, item2)
	},

	moveAfter : function(item1, item2) {
		var parent = item1.parentNode
		parent.removeChild(item1)
		parent.insertBefore(item1, item2 ? item2.nextSibling : null)
	}
}

Quanticks._cssFactory = {
	readStyle : function(element, property) {
		if (element.style[property]) {
			return element.style[property]
		} else if (element.currentStyle) {
			return element.currentStyle[property]
		} else if (document.defaultView && document.defaultView.getComputedStyle) {
			var style = document.defaultView.getComputedStyle(element, null)
			return style.getPropertyValue(property)
		} else {
			return null
		}
	}
}

Quanticks._dragFactory = {
	createSimpleActivity : function(element, handle) {
		handle = handle ? handle : element
		var group = this.createActivity(element)
		group.setHandle(handle)
		group.transparentDrag()
		group.onTopWhileDragging()
		return group
	},

	createActivity : function(element) {
		var group = new _QuanticksDragGroup(this, element)

		var position = Quanticks.css().readStyle(element, 'position')
		if (position == 'static') {
			element.style["position"] = 'relative'
		} else if (position == 'absolute') {
			/* for Safari 1.2 */
			Quanticks.coordinates().topLeftOffset(element).reposition(element)
		}

		// TODO: only if Quanticks.isDebugging()
		//group.register('draginit', this._showDragEventStatus)
		//group.register('dragmove', this._showDragEventStatus)
		//group.register('dragend', this._showDragEventStatus)

		return group
	},

	_showDragEventStatus : function(dragEvent) {
		window.status = dragEvent.toString()
	},

	constraints : function() {
		return this._constraintFactory
	},

	_createEvent : function(type, event, group) {
		return new _QuanticksDragEvent(type, event, group)
	}
}


var UI = {
    Initialize : function()
    {
        UI.DialogForm = new _DialogForm(
                document.getElementById("DialogForm"),
                document.getElementById("DialogFormDrapper"),
                document.getElementById("DialogFormContent"),
                document.getElementById("DialogFormTitle")
                );
        UI.SelectionForm = new _SelectionForm(
                document.getElementById("SelectionForm"),
                document.getElementById("DialogFormDrapper"),
                document.getElementById("SelectionFormContent"),
                document.getElementById("SelectionFormTitle")
                );   
                
        UI.Operation = new _InvokeOperation();                               
    },
	ShowProgressBar : function(displayText) {
        progressBar.innerHTML = displayText
        progressBar.style.visibility = "visible"    
        drappery3.style.visibility = "visible"
	},
    DialogForm : null,
    SelectionForm : null,    
    Operation : null,       
	HideProgressBar : function(){
        progressBar.innerHTML = ""
        progressBar.style.visibility = "hidden"
        drappery3.style.visibility = "hidden" 
	}
}

function _DialogForm(element, drapper, content, title) {
    this.http_request = false;
    this.element = element;
    this.drapper = drapper;
    this.content = content;
    this.title = title;
    this.cancelButton = false;
    this.url = "";
}

_DialogForm.prototype = {
    SetUrl : function(url)
    {    
        this.url = url;
    },
	Show : function(title,parameters) {
	    this.element.style.visibility = "visible";
        this.drapper.style.visibility = "visible";
        this.title.innerHTML = title;
        if (this.cancelButton)
        {
            document.getElementById("DialogFormCancelButton").style.visibility = "visible";
        }
        else
        {
            document.getElementById("DialogFormCancelButton").style.visibility = "hidden";
        }
        
        UI.ShowProgressBar("Loading...");
        this.makeGETRequest(parameters+"&IsGet=true");
	},	
	Close : function() {
        this.element.style.visibility = "hidden";
        this.drapper.style.visibility = "hidden";
        document.getElementById("DialogFormCancelButton").style.visibility = "hidden";
        UI.HideProgressBar();
	},
	Post : function() {
        UI.ShowProgressBar("Loading...");
        this.makePOSTRequest();
	},	
    getParameters : function()
    {
        var result = this.parseParameters(this.element);
        if (result.length>0)
        result = result.substring(1);
        result += "&xoml="
        if (this.XOML!="")
        {
            result +="<PXOML>";
            result +=this.XOML;
            result +="</PXOML>";
        }
        if (this.Rules!="")
        {
            result +="<PRULES>";
            result += this.Rules;
            result +="</PRULES>";
        }
        if (this.Code!="")
        {
            result +="<PCODE>";
            result += this.Code;
            result +="</PCODE>";
        }        
        return result;
    },
    XOML : "",
    Rules : "",
    Code : "",
    onSuccess : null,
    onFailure : null,  
    afterShow : null, 
    parseParameters : function(element)
    {
        var result = "";
        for(var ch=0;ch<element.children.length;ch++)
        {            
            if (element.children[ch].tagName=="INPUT")
            {
                if (element.children[ch].type=="checkbox")
                    result += "&"+element.children[ch].id+"=" + encodeURI( element.children[ch].checked );               
                else                
                    result += "&"+element.children[ch].id+"=" + encodeURI( element.children[ch].value );               
            }
            else if (element.children[ch].tagName=="SELECT")
            {
                result += "&"+element.children[ch].id+"=" + encodeURI( element.children[ch].value ); 
            }
            else
            {
                result+=this.parseParameters(element.children[ch]);
            }
        }
        return result;
    },

    makeGETRequest : function(getparams) {
      this.http_request = false;
      if (window.XMLHttpRequest) { // Mozilla, Safari,...
         this.http_request = new XMLHttpRequest();
         if (this.http_request.overrideMimeType) {
            this.http_request.overrideMimeType('text/html');
         }
      } else if (window.ActiveXObject) { // IE
         try {
            this.http_request = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
            try {
               this.http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
         }
      }
      if (!this.http_request) {
         alert('Cannot create XMLHTTP instance');
         return false;
      }

      this.http_request.onreadystatechange = this.callback;
      this.http_request.open('POST', this.url, true);
      this.http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      this.http_request.setRequestHeader("Content-length", getparams.length);
      this.http_request.setRequestHeader("Connection", "close");
      this.http_request.send(getparams);
   },
    
    makePOSTRequest : function() {
      this.http_request = false;
      if (window.XMLHttpRequest) { // Mozilla, Safari,...
         this.http_request = new XMLHttpRequest();
         if (this.http_request.overrideMimeType) {
            this.http_request.overrideMimeType('text/html');
         }
      } else if (window.ActiveXObject) { // IE
         try {
            this.http_request = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
            try {
               this.http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
         }
      }
      if (!this.http_request) {
         alert('Cannot create XMLHTTP instance');
         return false;
      }
      var parameters = this.getParameters();
      this.http_request.onreadystatechange = this.callback;
      this.http_request.open('POST', this.url, true);
      this.http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      this.http_request.setRequestHeader("Content-length", parameters.length);
      this.http_request.setRequestHeader("Connection", "close");
      this.http_request.send(parameters);
   },
   
   callback : function() {
      if (UI.DialogForm.http_request.readyState == 4) {
         if (UI.DialogForm.http_request.status == 200) {
            UI.DialogForm.content.innerHTML = UI.DialogForm.http_request.responseText;            
            UI.HideProgressBar();
            if (UI.DialogForm.afterShow!=null)
                UI.DialogForm.afterShow();            
            if (UI.DialogForm.onSuccess!=null)
                UI.DialogForm.onSuccess();
         } else {
            alert('There was a problem with the request. Status'+UI.DialogForm.http_request.responseText);
            UI.HideProgressBar();
            if (UI.DialogForm.onFailure!=null)
                UI.DialogForm.onFailure();
         }
      }
   }  
}

function _SelectionForm(element, drapper, content, title) {
    this.http_request = false;
    this.element = element;
    this.drapper = drapper;
    this.content = content;
    this.title = title;
    this.url = "";
}

_SelectionForm.prototype = {
    SetUrl : function(url)
    {    
        this.url = url;
    },
	Show : function(title,parameters) {
        this.title.innerHTML = title;
        UI.SelectionForm.parameters = parameters;
        this.Refresh();
    },
    Refresh : function()
    {
        this.element.style.visibility = "visible";
        this.drapper.style.visibility = "visible";
        this.content.innerHTML = "";
        UI.ShowProgressBar("Loading...");
        this.makePOSTRequest(UI.SelectionForm.parameters);
	},	
	Close : function() {
        this.element.style.visibility = "hidden";
        this.drapper.style.visibility = "hidden";
        UI.HideProgressBar();
	},
	Edit : function() {
	    if (UI.SelectionForm.onEdit!=null && this.selectedItem!=null)
	    UI.SelectionForm.onEdit(this.selectedItem.innerText);
	},
	Delete : function(){
	    if (UI.SelectionForm.onDelete!=null && this.selectedItem!=null)
	    UI.SelectionForm.onDelete(this.selectedItem.innerText);
	},	 
	selectedItem : null,
    selectItem : function (item)
    {
        if (UI.SelectionForm.selectedItem != null)
            UI.SelectionForm.selectedItem.className = "item"
        item.className = "selecteditem"
        UI.SelectionForm.selectedItem = item
    },
    onEdit : null,
    onDelete : null,     
    makePOSTRequest : function(parameters) {
      this.http_request = false;
      if (window.XMLHttpRequest) {
         this.http_request = new XMLHttpRequest();
         if (this.http_request.overrideMimeType) {
            this.http_request.overrideMimeType('text/html');
         }
      } else if (window.ActiveXObject) { // IE
         try {
            this.http_request = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
            try {
               this.http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
         }
      }
      if (!this.http_request) {
         alert('Cannot create XMLHTTP instance');
         return false;
      }
      
      this.http_request.onreadystatechange = this.callback;
      this.http_request.open('POST', this.url, true);
      this.http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      this.http_request.setRequestHeader("Content-length", parameters.length);
      this.http_request.setRequestHeader("Connection", "close");
      this.http_request.send(parameters);
   },
   callback : function() {
      if (UI.SelectionForm.http_request.readyState == 4) {
         if (UI.SelectionForm.http_request.status == 200) {         
                if (UI.SelectionForm.http_request.responseText == "NoUser")
                {
                    NoUser();
                    return;
                }
                UI.HideProgressBar();
                var rCollection = eval(UI.SelectionForm.http_request.responseText);
                var SelectionHTML="";
                for (var fcfi=0;fcfi<rCollection.length;fcfi++)
                {    
                    SelectionHTML+="<tr><td><div id='"+rCollection[fcfi]+"itemdiv' class=\"item\" onclick=\"UI.SelectionForm.selectItem(this)\">"+rCollection[fcfi]+"</div></td></tr>"
                }
                UI.SelectionForm.content.innerHTML = "<table cellspacing=0 cellpadding=0>"
                UI.SelectionForm.content.innerHTML += "<tr><td>"
                UI.SelectionForm.content.innerHTML += SelectionHTML;
                UI.SelectionForm.content.innerHTML += "</table>";
                if(rCollection.length>0)
                {
                    UI.SelectionForm.selectedItem = document.getElementById(rCollection[0]+"itemdiv");
                    UI.SelectionForm.selectedItem.className="selecteditem";
                }
    
         } else {
            alert('There was a problem with the request. Status'+UI.SelectionForm.http_request.responseText);
            UI.HideProgressBar();
         }
      }
   }        
}


function _InvokeOperation() {
    this.http_request = false;
    this.url = "";
}

_InvokeOperation.prototype = {
    SetUrl : function(url)
    {    
        this.url = url;
    },
	Execute : function(parameters) { 
	    this.parameters = parameters;
        UI.ShowProgressBar("Executing...");
        this.makePOSTRequest();
	},	
    onSuccess : null,
    onFailure : null,     
    makePOSTRequest : function() {
      this.http_request = false;
      if (window.XMLHttpRequest) { // Mozilla, Safari,...
         this.http_request = new XMLHttpRequest();
         if (this.http_request.overrideMimeType) {
            this.http_request.overrideMimeType('text/html');
         }
      } else if (window.ActiveXObject) { // IE
         try {
            this.http_request = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
            try {
               this.http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
         }
      }
      if (!this.http_request) {
         alert('Cannot create XMLHTTP instance');
         return false;
      }
      this.http_request.onreadystatechange = this.callback;
      this.http_request.open('POST', this.url, true);
      this.http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      this.http_request.setRequestHeader("Content-length", this.parameters.length);
      this.http_request.setRequestHeader("Connection", "close");
      this.http_request.send(this.parameters);
   },
   callback : function() {
      if (UI.Operation.http_request.readyState == 4) {
         if (UI.Operation.http_request.status == 200) {         
                UI.HideProgressBar();
                if (UI.Operation.http_request.responseText=="success")
                {
                    if (UI.Operation.onSuccess!=null)
                        UI.Operation.onSuccess(UI.Operation.parameters);
                }
                else
                {
                    if (this.onFailure!=null)
                        this.onFailure(UI.Operation.parameters);
                    alert("Operation failed. "+UI.Operation.http_request.responseText);
                }                     
         } else {
            alert('There was a problem with the request. Status'+UI.Operation.http_request.responseText);
            UI.HideProgressBar();
            if (UI.Operation.onFailure!=null)
               UI.Operation.onFailure(UI.Operation.parameters);
         }
      }
   }     
}



function bindGetAbsLeft(o) {
    var cumOffset = 0;
    offsetElement = o.parentActivity.element;
    while(offsetElement!=workflowActivity.element) 
    {
        if (offsetElement.tagName!="TABLE" && offsetElement.tagName!="TD" && offsetElement.tagName!="TBODY" && offsetElement.tagName!="TR")
            if (offsetElement.className=="SequenceActivity" && offsetElement.parentElement.tagName=="TD")
            {
            }
            else
            {
                cumOffset = cumOffset + offsetElement.offsetLeft;
            }
        offsetElement = offsetElement.parentElement;
    }
	return o.offsetLeft + cumOffset;
}

function bindGetAbsTop(o) {
    var cumOffset = 0;
    offsetElement = o.parentActivity.element;
    while(offsetElement!=workflowActivity.element) 
    {
        if (offsetElement.tagName!="TABLE" && offsetElement.tagName!="TD" && offsetElement.tagName!="TBODY" && offsetElement.tagName!="TR")
            if (offsetElement.className=="SequenceActivity" && offsetElement.parentElement.tagName=="TD")
            {
            }
            else
            {
                cumOffset = cumOffset + offsetElement.offsetTop;
            }
        offsetElement = offsetElement.parentElement;
    }
	return o.offsetTop + cumOffset;
}

function AddJack(activity,propertyName)
{
        var jacksDiv = findJacksDiv(activity.element);
        var newJack=document.createElement("DIV");
        newJack.className="jack";
        newJack.id = "jack"+activity.element.id+propertyName;
        newJack.title = propertyName;
        newJack.innerText = propertyName.substring(0,6);
        jacksDiv.appendChild(newJack);
        newJack.onmousedown=bindSldMouseDown;
        newJack.onmouseup=bindSldMouseUp;            
        newJack.parentActivity=activity; 
}

function CreateNewBindElement(id,x,y)
{
        var bindId = id;
        if (bindId==null) bindId = getNewBindName();
        newBind=document.createElement("DIV");
        newBind.className="bind";
        newBind.innerText=bindId;
        newBind.onmouseover = bMouseOver;
        newBind.onmouseout = bMouseOut;
        newBind.onmousedown = bSldMouseDown;        
        bindSetPosition(newBind,x-2,y-2);
	    newBind.id=bindId;
        workflow.appendChild(newBind);
        return newBind;
}