﻿// JScript File
Quanticks._activityFactory = {
	CreateActivity : function(element, activityType) {	    
		var newActivity 
		
		try
		{
		    newActivity = eval("new "+activityType+"(element)")
   		    element.className=activityType           

        }
        catch(err)
        {
            newActivity = eval("new UnknownActivity(element)")
            element.className="UnknownActivity"
        }
        newActivity.Properties["Name"] = element.id
		newActivity.group.register('dragstart', this._onDragStart)
		newActivity.group.register('dragmove', this._onDragMove)
		newActivity.group.register('dragend', this._onDragEnd)
		activityList[activityCount] = newActivity
		activityCount++
		return newActivity
	},

	makeToolboxItem : function(item) {
		var group = Quanticks.drag().createSimpleActivity(item)
		group.register('dragstart', this._onDragStart)
		group.register('dragmove', this._onDragMove)
		group.register('dragend', this._onDragEnd)
		return group
	},

    _Select : function(element)
    {
        if (selectedElement)
        {
            selectedElement.style["border"] = "1px solid #aaa"
        }
        focusCtrl("","",null);
        selectedElement=element;
        selectedElement.style["border"] = "1px solid #000";
        this.showProperties(this.getActivity(selectedElement));
    },

    getActivity : function(element)
    {
    	for(var i=0;i<activityList.length;i++)
    	{
    	    if (activityList[i]!=null && activityList[i].element == element)
		    return activityList[i]
        }
        return null;
    },

    isBindable : function(activity,propName)
    {
        if (activity.BindableProperties == null) return false
        
        var found = false
        for(var isBind=0;isBind<activity.BindableProperties.length;isBind++)
	    {
	        if (activity.BindableProperties[isBind]==propName)
	        found = true
	    }
	    return found
    },
    
    isCondition : function(activity,propName)
    {
        if (activity.ConditionProperties == null) return false
        var found = false
        for(var isCon=0;isCon<activity.ConditionProperties.length;isCon++)
	    {
	        if (activity.ConditionProperties[isCon]==propName)
	        found = true
	    }
	    return found    
    },
    
    isEvent : function(activity,propName)
    {
        if (activity.EventProperties == null) return false
        var found = false
        for(var isEv=0;isEv<activity.EventProperties.length;isEv++)
	    {
	        if (activity.EventProperties[isEv]==propName)
	        found = true
	    }
	    return found    
    },
           
    isEnum : function(activity,propName)
    {
        if (activity.EnumProperties == null) return false
        var found = false
        for(var isEn=0;isEn<activity.EnumProperties.length;isEn++)
	    {
	        if (activity.EnumProperties[isEn]==propName)
	        found = true
	    }
	    return found    
    },
    
    showProperties : function(activity)
    {
    	var propertyBrowser = document.getElementById("PropertyGrid1");
    	propertyBrowser.innerHTML = ""
   		var innerBar=document.createElement("DIV")
	    innerBar.className="propertybar"
	    innerBar.style["width"]="180px"
	    innerBar.style["heigth"]="22px"
	    //innerBar.innerHTML = "<p>"+item.id+"</p>"
        innerBar.innerHTML = "Properties"
        propertyBrowser.appendChild(innerBar)
    
    	var table = document.createElement("table")
	    var tablebody = document.createElement("tbody")
        table.appendChild(tablebody)
	    for(var i=0;i<activity.RegisteredProperties.length;i++)
	    {
	        var prop = activity.RegisteredProperties[i]
	        var tablerow = document.createElement("tr")
	        var propName = document.createElement("td")
	        propName.setAttribute("width","80px")
	        var propValue = document.createElement("td")
	        if (this.isBindable(activity,prop))
	        {
	            propName.innerHTML="<table cellpadding=0 cellspacing=0 border=0 width='100%'><tr><td><p>"+activity.RegisteredProperties[i]+"</p></td><td align='right'><a href='javascript:BindProperty(\""+prop+"\")'><img border='0' src='Images/bind.GIF'/></a></td></tr><table>"
	        }
	        else
	        {
	            propName.innerHTML="<p>"+prop+"</p>"
	        }
	        var value = activity.Properties[activity.RegisteredProperties[i]]
	        if (value==undefined) value=""
	        if (this.isCondition(activity,prop))
	        {
    	        propValue.innerHTML = "<INPUT id='"+prop+"Input' class='atxtarea' type='text' HEIGHT='18' WIDTH='82' VALUE='"+value+"' onchange=\"changeCtrl('"+activity.Properties["Name"]+"','"+prop+"',this)\" onfocus=\"focusCtrl('"+activity.Properties["Name"]+"','"+prop+"',this)\" onblur=\"blurCtrl('"+activity.Properties["Name"]+"','"+prop+"',this)\"><INPUT  class='atxtarea' onclick='SelectCondition(\""+prop+"\")' type='button' HEIGHT='18' WIDTH='18' VALUE='...'>"
	        }
	        else if (this.isEvent(activity,prop))
	        {
    	        propValue.innerHTML = "<INPUT id='"+prop+"Input' class='atxtarea' type='text' HEIGHT='18' WIDTH='82' VALUE='"+value+"' onchange=\"changeCtrl('"+activity.Properties["Name"]+"','"+prop+"',this)\" onfocus=\"focusCtrl('"+activity.Properties["Name"]+"','"+prop+"',this)\" onblur=\"blurCtrl('"+activity.Properties["Name"]+"','"+prop+"',this)\"><INPUT  class='atxtarea' onclick='EditCode(\""+prop+"\")' type='button' HEIGHT='18' WIDTH='18' VALUE='...'>"
	        }	        
	        else if (this.isEnum(activity,prop))
	        {
    	        var resultHTML = "<SELECT id='"+prop+"Input' class='atxtarea' type='text' HEIGHT='18' WIDTH='82' onchange=\"setProperty('"+activity.Properties["Name"]+"','"+prop+"',this.value)\">"
    	        for(var oi=0;oi<activity.EnumProperties.length;oi++)
    	        {
    	            if (activity.EnumProperties[oi]==prop)
    	            {
    	                var eVals = activity.EnumValues[oi].split(",");
    	                for(var oe=0;oe<eVals.length;oe++)
    	                {
    	                    var isSelected = (value==eVals[oe])?"selected":"";
    	                    resultHTML+="<option value='"+eVals[oe]+"' "+isSelected+">"+eVals[oe]+"</option>";
    	                }
    	            }
    	        }
    	        resultHTML+="</SELECT>";
    	        propValue.innerHTML = resultHTML;
	        }	        
	        else
	        {
    	        propValue.innerHTML = "<INPUT id='"+prop+"Input' class='atxtarea' type='text' HEIGHT='18' WIDTH='100' VALUE='"+value+"' onchange=\"changeCtrl('"+activity.Properties["Name"]+"','"+prop+"',this)\" onfocus=\"focusCtrl('"+activity.Properties["Name"]+"','"+prop+"',this)\" onblur=\"blurCtrl('"+activity.Properties["Name"]+"','"+prop+"',this)\">"
	        }
	        tablebody.appendChild(tablerow)
	        tablerow.appendChild(propName)
	        tablerow.appendChild(propValue)
	    }   
        propertyBrowser.appendChild(table)
        table.setAttribute("width","180px")
	    table.setAttribute("cellpadding","0")
	    table.setAttribute("cellspacing","0")
	    this.showParameters(activity);
	    if (activity.element==workflow)
	        this.showDProps(activity);
    },
    
    showParameters : function(activity)
    {
    	if (activity.Parameters=="undefined" || activity.Parameters==null) return;
    	var propertyBrowser = document.getElementById("PropertyGrid1");

   		var innerBar=document.createElement("DIV")
	    innerBar.className="propertybar"
	    innerBar.style["width"]="180px"
	    innerBar.style["heigth"]="22px"
	    //innerBar.innerHTML = "<p>"+item.id+"</p>"
        innerBar.innerHTML = "Parameters"
        propertyBrowser.appendChild(innerBar)
    
    	var table = document.createElement("table")
	    var tablebody = document.createElement("tbody")
        table.appendChild(tablebody)
	    for(var i=0;i<activity.Parameters.length;i++)
	    {
	        var prop = activity.Parameters[i];
	        var tablerow = document.createElement("tr");
	        var propName = document.createElement("td");
	        propName.setAttribute("width","80px");
	        var propValue = document.createElement("td");
	        propName.innerHTML="<table cellpadding=0 cellspacing=0 border=0 width='100%'><tr><td><p>"+activity.Parameters[i]+"</p></td><td align='right'><a href='javascript:BindProperty(\""+prop+"\")'><img border='0' src='Images/bind.GIF'/></a></td></tr><table>"
	        var value = activity.ParameterValues[activity.Parameters[i]]
	        if (value==undefined) value=""
    	    propValue.innerHTML = "<INPUT id='"+prop+"Input' class='atxtarea' type='text' HEIGHT='18' WIDTH='100' VALUE='"+value+"' onchange=\"changeCtrl('"+activity.Properties["Name"]+"','"+prop+"',this)\" onfocus=\"focusCtrl('"+activity.Properties["Name"]+"','"+prop+"',this)\" onblur=\"blurCtrl('"+activity.Properties["Name"]+"','"+prop+"',this)\">"
	        tablebody.appendChild(tablerow)
	        tablerow.appendChild(propName)
	        tablerow.appendChild(propValue)
	    }  
	     
        var newtablerow = document.createElement("tr");
        var newpropName = document.createElement("td");
        newpropName.setAttribute("width","50px");
        var newpropValue = document.createElement("td");
        newpropName.innerHTML="<INPUT id='newParamInput' class='atxtarea' type='text' HEIGHT='18' SIZE='8' VALUE=''>";
	    newpropValue.innerHTML = "<a href='#' onclick='addNewParam(\""+activity.Properties["Name"]+"\");' class='ctext'>Add</a>";
	    tablebody.appendChild(newtablerow);
        newtablerow.appendChild(newpropName);
        newtablerow.appendChild(newpropValue);
        
        propertyBrowser.appendChild(table);
        table.setAttribute("width","180px");
	    table.setAttribute("cellpadding","0");
	    table.setAttribute("cellspacing","0");
    },
    
    showDProps : function(activity)
    {
    	var propertyBrowser = document.getElementById("PropertyGrid1");

   		var innerBar=document.createElement("DIV")
	    innerBar.className="propertybar"
	    innerBar.style["width"]="180px"
	    innerBar.style["heigth"]="22px"
	    //innerBar.innerHTML = "<p>"+item.id+"</p>"
        innerBar.innerHTML = "Dependency Properties"
        propertyBrowser.appendChild(innerBar)
    
    	var table = document.createElement("table")
	    var tablebody = document.createElement("tbody")
        table.appendChild(tablebody)
	    for(var i=0;i<BindNames.length;i++)
	    {
	        var prop = BindNames[i];
	        var tablerow = document.createElement("tr");
	        var propName = document.createElement("td");
	        propName.setAttribute("width","80px");
	        var propValue = document.createElement("td");
	        propName.innerHTML="<table cellpadding=0 cellspacing=0 border=0 width='100%'><tr><td><p>"+BindNames[i]+"</p></td><td align='right'><a href='javascript:BindProperty(\""+prop+"\")'><img border='0' src='Images/bind.GIF'/></a></td></tr><table>"
	        var value = BindValues[BindNames[i]]
	        if (value==undefined) value=""
    	    propValue.innerHTML = "<INPUT id='"+prop+"Input' class='atxtarea' type='text' HEIGHT='18' WIDTH='100' VALUE='"+value+"' onchange=\"changeCtrl('"+activity.Properties["Name"]+"','"+prop+"',this)\" onfocus=\"focusCtrl('"+activity.Properties["Name"]+"','"+prop+"',this)\" onblur=\"blurCtrl('"+activity.Properties["Name"]+"','"+prop+"',this)\">"
	        tablebody.appendChild(tablerow)
	        tablerow.appendChild(propName)
	        tablerow.appendChild(propValue)
	    }  
	     /*
        var newtablerow = document.createElement("tr");
        var newpropName = document.createElement("td");
        newpropName.setAttribute("width","50px");
        var newpropValue = document.createElement("td");
        newpropName.innerHTML="<INPUT id='newPDropInput' class='atxtarea' type='text' HEIGHT='18' SIZE='8' VALUE=''>";
	    newpropValue.innerHTML = "<a href='#' onclick='addNewDProp(\""+activity.Properties["Name"]+"\");' class='ctext'>Add</a>";
	    tablebody.appendChild(newtablerow);
        newtablerow.appendChild(newpropName);
        newtablerow.appendChild(newpropValue);
        */
        propertyBrowser.appendChild(table);
        table.setAttribute("width","180px");
	    table.setAttribute("cellpadding","0");
	    table.setAttribute("cellspacing","0");
    },
    
	_onDragStart : function(dragEvent) {
	    for(var i=0;i<connectors.length;i++) {
	    	var item = connectors[ i ]
	    	item.children[0].src="Images/add.gif"
        }
        doDrag=false
        hidetooltip()
        allowtooltip = false;
	},

	_onDragMove : function(dragEvent) {
		var helpers = Quanticks.helpers()
		var coordinates = Quanticks.coordinates()

		var item = dragEvent.group.element
		var xmouse = dragEvent.transformedMouseOffset
		var moveTo = null

        for(var i=0;i<connectors.length;i++) {
	    	var item = connectors[ i ]
   			var bottomRight = coordinates.bottomRightOffset(item)
			var topLeft = coordinates.topLeftOffset(item)
        	if (topLeft.y <= xmouse.y && topLeft.x <= xmouse.x && xmouse.y <= bottomRight.y && xmouse.x <= bottomRight.x) {
    			item.children[0].src="Images/drop.gif"
	    	}
	    	else {
	    	    item.children[0].src="Images/add.gif"
	    	}
	    }
	},

	_onDragEnd : function(dragEvent) {
		var helpers = Quanticks.helpers()
		var coordinates = Quanticks.coordinates()
        
	    var item = dragEvent.group.element
		var xmouse = dragEvent.transformedMouseOffset
	    var parent = item.parentNode
	    
	    for(var i=0;i<connectors.length;i++) {
	    	var iconnector = connectors[ i ]
	    	iconnector.children[0].src="Images/connector.gif"	    	 
        }
        
        if (parent.className=="DataFlowActivity")
        {
     	        var topLeft = coordinates.topLeftOffset(item);            
                item.style.left=(xmouse.x-getAbsoluteLeft(parent)-75)+"px";
                item.style.top=(xmouse.y-getAbsoluteTop(parent)+18)+"px";               
                AddAllBinds();
        }
        else
        {        
	        var insertBeforeItem = null
            for(var i=0;i<connectors.length;i++) {
	    	    var conn = connectors[ i ]
   			    var bottomRight = coordinates.bottomRightOffset(conn)
			    var topLeft = coordinates.topLeftOffset(conn)
        	    if (topLeft.y <= xmouse.y && topLeft.x <= xmouse.x && xmouse.y <= bottomRight.y && xmouse.x <= bottomRight.x) {
    			    insertBeforeItem = conn
	    	    }
	        }
	        if (insertBeforeItem!=null)
	        {
	            var newParent = insertBeforeItem.parentNode
	            if (item!=newParent)
	            {
	                if (insertBeforeItem.parentElement.className=="DataFlowActivity")
                  {
                        if (item.className=='toolboxitem')
	                    {
                            addDataFlowChild(insertBeforeItem.parentElement, item.id, xmouse.x, xmouse.y);
                            AddAllBinds();		        
	                    }
	                    else
	                    {	     	                    
	                        var aconnector = item.previousSibling
	                        if (aconnector!=null)
	                        {
	                            item.style.left=xmouse.x+"px";
	                            item.style.top=xmouse.x+"px";
	                            parent.removeChild(item);
	                            newParent.appendChild(item);
	                            parent.removeChild(aconnector);
	                            AddAllBinds();
	                        }
	                    }	                    
	                }
	                else
	                {
	                    if (item.className=='toolboxitem')
	                    {
                            addActivity(newParent, item.id, insertBeforeItem);
                            AddAllBinds();		        
	                    }
	                    else
	                    {	     	                    
	                        var aconnector = item.previousSibling
	                        if (aconnector!=null)
	                        {
	                            item.style.left=0+"px";
	                            item.style.top=0+"px";
	                            var before=item.offsetTop;
	                            parent.removeChild(item);
	                            newParent.insertBefore(item, insertBeforeItem);
	                            parent.removeChild(aconnector);
	                            newParent.insertBefore(aconnector, item);
	                            window.status=item.id+"Before: "+before+" Top "+item.offsetTop+" Left "+item.offsetLeft+" StyleTop "+item.style.top;
	                            AddAllBinds();
	                        }
	                    }
	                }
	            }
	        }
	        else
	        {
	        	var insertInItem = null
	        	for(var i=0;i<activityList.length;i++)
	            {
   			        var bottomRight = coordinates.bottomRightOffset(activityList[i].element);
                var topLeft = coordinates.topLeftOffset(activityList[i].element);
        	        if (topLeft.y <= xmouse.y && topLeft.x <= xmouse.x && xmouse.y <= bottomRight.y && xmouse.x <= bottomRight.x) 
        	        {
                      if (activityList[i].element.className=="DataFlowActivity")
                        insertInItem = activityList[i].element;
    			        }
	    	      }
	    	    	if (insertInItem!=null)
                    {
                        if (item.className=='toolboxitem')
	                    {
                            addDataFlowChild(insertInItem, item.id, xmouse.x, xmouse.y);
                            AddAllBinds();		        
	                    }
	                    /*else
	                    {	     	                    
	                        var aconnector = item.previousSibling
	                        if (aconnector!=null)
	                        {
	                            item.style.left=xmouse.x+"px";
	                            item.style.top=xmouse.x+"px";
	                            parent.removeChild(item);
	                            newParent.appendChild(item);
	                            parent.removeChild(aconnector);
	                            AddAllBinds();
	                        }
	                    }*/	                    
	                }
	        }
    	    Quanticks.coordinates().create(0, 0).reposition(dragEvent.group.element);	          	        
	    } 
      allowtooltip = true;
	}
}

//var beforeOffsetTop = 0;
//var beforeOffsetLeft = 0;

function workflowresize(event)
{
    if (!workflowNoResizeFlag)
    {
        workflowNoResizeFlag = true;
        this.style.width = workflow.clientWidth+2;
        updateScrollArrows();
        workflowNoResizeFlag = false;
    }
}

function BranchResize(event)
{
    parallelElement = getActivityElementByBranch(this)
    var factory = Quanticks.activityFactory()
    var parallelActivity  = factory.getActivity(parallelElement)
    if (!parallelActivity.noBranchResizeFlag)
    {
        parallelActivity.noBranchResizeFlag = true
        var noChild = true
        for(var jj=0;jj<this.children.length;jj++)
        {
            var childActicity = factory.getActivity(this.children[jj])
            if (childActicity!=null)
            {
                noChild = false
            }
        }
        if (noChild) 
            this.style.width = parallelActivity.BlockWidth
        else
            this.style.width = this.clientWidth+2
            
        var maxWidth = 0
        for(var brb=0;brb<parallelActivity.Branches.length;brb++)
        {
            maxWidth = maxWidth + parallelActivity.Branches[brb].clientWidth
        }
         
        parallelActivity.ActWidth = maxWidth + 40
        parallelElement.style.width = parallelActivity.ActWidth
        parallelActivity.noBranchResizeFlag = false
    }
}

function getActivityElementByBranch(branch)
{
 try
 {
    return branch.parentElement.parentElement.parentElement.parentElement.parentElement
 }
 catch(e)
 {
    return null
 }
}

function CompositeResize(event)
{
    var factory = Quanticks.activityFactory()
    var resizedActivity  = factory.getActivity(this)    
    if (!resizedActivity.noResizeFlag)
    {
        resizedActivity.noResizeFlag = true
		var noChild = true
        var maxWidth = resizedActivity.ActWidth
        for(var jj=0;jj<this.children.length;jj++)
        {
            var childActicity = factory.getActivity(this.children[jj])
            if (childActicity!=null)
            {
                noChild = false
                if (this.children[jj].clientWidth > maxWidth)
                    maxWidth = this.children[jj].clientWidth
            }
        }
        if (noChild) 
            resizedActivity.ActWidth = resizedActivity.BlockWidth
        else
            resizedActivity.ActWidth = this.clientWidth+2
        this.style.width = resizedActivity.ActWidth 
        
        resizedActivity.noResizeFlag = false
    }
}

function setProperty(activityName, propertyName, value )
{
    var activity = findActivityByName(activityName);
    if (activity == null) return;
    if (PropertyRegistered(activity,propertyName))
    {
        activity.Properties[propertyName]=value
        if (propertyName=="Name")
        {
            var idelement = document.getElementById(activityName+"_id")
            if (idelement)
            {
                idelement.innerHTML = value
                idelement.id = value+"_id"
                Quanticks.activityFactory().showProperties(activity)
            }
        }
    }
    else if (BindExists(propertyName))
    {
        BindValues[propertyName]=value;
    }
    else
    {
        activity.ParameterValues[propertyName]=value;
    }
}

function BindExists(propName)
{
        for (var propi = 0;propi<BindNames.length;propi++)
        {
            if (BindNames[propi]==propName)
                return true;
        }
        return false;
}

function PropertyRegistered(activity, propName)
{
        for (var propi = 0;propi<activity.RegisteredProperties.length;propi++)
        {
            if (activity.RegisteredProperties[propi]==propName)
                return true;
        }
        return false;
}

function addNewParam(activityName)
{
    var newParam = document.getElementById("newParamInput").value;
    if (newParam!="")
    {
        var activity = findActivityByName(activityName);
        activity.Parameters[activity.Parameters.length] = newParam;
        AddJack(activity,newParam);
    
        Quanticks.activityFactory().showProperties(activity);
    }
}

function findActivityByName(name)
{
	for(var i=0;i<activityCount;i++)
	{
	    if (activityList[i].Properties["Name"] == name)
	    return activityList[i]
    }
    return null
}
    
function nameExists(name)
{
	for(var i=0;i<activityCount;i++)
	{
	    if (activityList[i].Properties["Name"] == name)
	    return true
    }
    return false
}

function getNewId(activityType)
{
        var newName = ''
        for(var i=0;i<activityTypes.length;i++)
        {
            if (activityTypes[i] == activityType)
            {
                var idsOfI = activityIds[i]
                idsOfI[idsOfI.length] = idsOfI.length+1
                newName=activityTypes[i]+idsOfI.length
                break
            }
        }              
        return newName
}

function addActivityByName(parent, activityType, insertBeforeItem, activityName)
{
			var newElement=document.createElement("DIV")
			newElement.id=activityName
			var activityFactory = Quanticks.activityFactory()
						
                //Create new activity
                var newActivity = activityFactory.CreateActivity(newElement, activityType)

			parent.insertBefore(newElement, insertBeforeItem)
                
			var newConnector=document.createElement("DIV")
			newConnector.className="connector"
			var newImg=document.createElement("IMG")
			newImg.src="Images/connector.gif"
            newConnector.appendChild(newImg);
			connectors[connectors.length] = newConnector
			parent.insertBefore(newConnector, newElement)
			activityFactory._Select(newElement)
			return newActivity;
}

function addActivity(parent, activityType, insertBeforeItem)
{
            var newName = '';
            newName = getNewId(activityType);
            var newActivity = addActivityByName(parent,activityType,insertBeforeItem, newName);
            newActivity.Initialize();
            return newActivity;
}

function addDataFlowChild(parent, activityType, x, y)
{ 
            var newElement=document.createElement("DIV");
			newElement.id = getNewId(activityType);
			var activityFactory = Quanticks.activityFactory();
						
                //Create new activity
                var newActivity = activityFactory.CreateActivity(newElement, activityType);

			parent.appendChild(newElement)
            newActivity.Initialize();
            return newActivity;
}

var elementToBind = null
var propToBind = null
function BindProperty(propName)
{
    elementToBind = document.getElementById(propName+"Input")
    document.getElementById("OKButton").onclick = CloseActivityBind
    propToBind = propName
    activityBind.style.visibility = "visible"
    drappery.style.visibility = "visible"
    document.getElementById("AddConditionButton").style.visibility = "hidden"
    document.getElementById("RemoveConditionButton").style.visibility = "hidden"   
    var actTree = document.getElementById("ActivityTree")
    actTree.innerHTML = "<div class=\"treeitem\" onClick=\"selectNode(this)\"><table cellspacing=0 cellpadding=0><tr><td><img onClick=\"Toggle(this.parentNode.parentNode.parentNode.parentNode.parentNode)\" src=\"Images/minus.gif\"><img src=\"Images/sequence.gif\"></td><td valign=\"middle\">"+workflowActivity.Properties["Name"]+"</td></tr></table></div><div class=\"treechildren\"></div>"
    ExpandNode(workflowActivity.Properties["Name"],actTree.children[1])
}

var conditionElement = null
var conditionProperty = null
function SelectCondition(propName)
{
    conditionElement = document.getElementById(propName+"Input")    
    conditionProperty = propName
    document.getElementById("OKButton").onclick = CloseConditionDialog
    document.getElementById("AddConditionButton").style.visibility = "visible"
    document.getElementById("RemoveConditionButton").style.visibility = "visible"     
      
    activityBind.style.visibility = "visible"
    drappery.style.visibility = "visible"
    getConditions();
}

function TrimString(str)
{
    return str.replace(/^\s+|\s+$/g, '') ;
}

var editCodeElement = null
var editCodeProperty = null
var handlerName = "";
function EditCode(propName)
{
    editCodeElement = document.getElementById(propName+"Input");    
    editCodeProperty = propName;
    handlerName = TrimString(editCodeElement.value);
    if (handlerName == "")
    {
        handlerName = getNewCodeId(propName);
    }    
    if (EventHandlerValues[handlerName]==null)
    {
        document.getElementById("conditionTextBox").value = "";
    }
    else
    {
        document.getElementById("conditionTextBox").value = EventHandlerValues[handlerName];
    }
    document.getElementById("FormOKButton").onclick = OKEditCode;
    ShowConditionForm(handlerName);
}

function OKEditCode()
{
    var selActivity = Quanticks.activityFactory().getActivity(selectedElement);
    setProperty(selActivity.Properties["Name"],editCodeProperty,handlerName);
    if (EventHandlerValues[handlerName]==null)
    {
        EventHandlers[EventHandlers.length]=handlerName;
    }
    editCodeElement.value = handlerName;
    EventHandlerValues[handlerName]=document.getElementById("conditionTextBox").value;
    CancelConditionForm();
}

function getNewCodeId(propName)
{
     var codeId=0;
     var found = false;
     do
     {
        found=false;
        codeId++;
        for(var i=0;i<EventHandlers.length;i++)
        {
            if (EventHandlers[i]==propName+codeId)
            {
                found=true;
                break;
            }
        }        
      } while(found==true);
      return propName+codeId;  
}

var EventHandlers = new Array();
var EventHandlerValues = new Array();

function DisplayEncodedCode() 
{
     var endcodedHTML  = "namespace "+document.getElementById("user").innerText+" \n";
     endcodedHTML  += "{\n";
	 endcodedHTML  += "public partial class "+workflowActivity.Properties["Name"]+" : SequentialWorkflowActivity\n";
	 endcodedHTML  += "{\n";
     for(var i=0;i<EventHandlers.length;i++)
     {
        var evName = EventHandlers[i];
        var evVal = EventHandlerValues[evName];        
        endcodedHTML += "private void "+evName+"(object sender, EventArgs e)\n";
        endcodedHTML += "{\n";
                    evVal = evVal.replace("Security", "");
                    evVal = evVal.replace("System.", "");
                    evVal = evVal.replace("Microsoft.", "");
        endcodedHTML +=evVal+"\n";
        endcodedHTML += "}\n";
     }
     endcodedHTML +="}\n";
     endcodedHTML +="}";
      endcodedHTML =  endcodedHTML.replace(new RegExp(/</g),"&lt;");
      endcodedHTML =  endcodedHTML.replace(new RegExp(/>/g),"&gt;");
      endcodedHTML =  endcodedHTML.replace(new RegExp(/\n/g),"<br>");
      codediv.innerHTML = endcodedHTML;
}

function print()
{
  printer = window.open("","Print","width=620,height=500,toolbar=yes,status=yes,menubar=yes,scrollbars=yes,resizable=yes")
  printer.document.write("<html><head><title>Print</title>");
  printer.document.write("<link rel=\"stylesheet\" type=\"text/css\" href=\"QuanticksStyle.css\"/>");
  printer.document.write("<link rel=\"stylesheet\" type=\"text/css\" href=\"Activities.css\"/>");
  for (var cssi = 0;cssi<cssFiles.length;cssi++)
  {
        printer.document.write("<link rel=\"stylesheet\" type=\"text/css\" href=\"css/"+cssFiles[cssi]+"\"/>");
  }
  printer.document.write("</head><body><div align=\"center\" class=\"workflow\">");
  printer.document.write(workflow.innerHTML);
  printer.document.write("</div></body></html>");
}

