if(window["gForms_Loaded"] != true)
{
	window["gDoAlphaOnMove"] = false;
	window["gDoRenderArrows"] = false;
	
	window["gForms_Loaded"] = true;

	window["gForms_Disable"] = false;
	
	var gForms_Highest_zIndex = 1;

	var gForms_DocumentLoaded = false;
	
	
	var gForms_MarkedForms = new Array();
	var gForms_AllForms = new Array();
	var gForms_AllViewForms = new Array();
	var gForms_AllEditForms = new Array();
	var gForms_AllTemplateForms = new Array();
	var gForms_AllFormsGUID = new Array();
	
	var gForms_IDEditForms = new Array();
	var gForms_IDViewForms = new Array();
	var gForms_IDTemplateForms = new Array();
	
	
	function forms_registerEditFormId(id)
	{
		gForms_IDEditForms.push(id);
	}
	function forms_registerViewFormId(id)
	{
		gForms_IDViewForms.push(id);
	}
	function forms_registerTemplateFormId(id)
	{
		gForms_IDTemplateForms.push(id);
	}
	
	function forms_Disable()
	{
		window["gForms_Disable"] = true;
	}
	function forms_Enable()
	{
		window["gForms_Disable"] = false;
	}
	registerWindowOnLoad
	(
		function()
		{
			
			for(var i = 0; i < gForms_IDEditForms.length; i++)
				gForms_AllEditForms.push(document.getElementById(gForms_IDEditForms[i]));

			for(var i = 0; i < gForms_IDViewForms.length; i++)
				gForms_AllViewForms.push(document.getElementById(gForms_IDViewForms[i]));
			
			for(var i = 0; i < gForms_IDTemplateForms.length; i++)
				gForms_AllTemplateForms.push(document.getElementById(gForms_IDTemplateForms[i]));
			
			//gForms_AllEditForms = document.getElementsByAttribute('name','view_builder_Edit_Form');
			//gForms_AllViewForms = document.getElementsByAttribute('name','view_builder_View_Form');
			//gForms_AllTemplateForms = document.getElementsByAttribute('name','view_builder_Template_Form');
					
			gForms_AllForms = gForms_AllTemplateForms.concat(gForms_AllEditForms.concat(gForms_AllViewForms));
			
			
		
			for(var i = 0; i < gForms_AllForms.length; i++)
			{
				var guid = gForms_AllForms[i].getAttribute('guid');
				if(guid)
				{
					gForms_AllForms[i].relativeForms = new Array();
					gForms_AllFormsGUID[guid] = gForms_AllForms[i];
				}
			}
			for(var i = 0; i < gForms_AllForms.length; i++)
			{
				var pos_guid = gForms_AllForms[i].getAttribute('pos_guid');
				var pos_dir = gForms_AllForms[i].getAttribute('pos_dir');
				var pos_distance_x = gForms_AllForms[i].getAttribute('pos_distance_x');
				var pos_distance_y = gForms_AllForms[i].getAttribute('pos_distance_y');
				if(pos_guid && gForms_AllFormsGUID[pos_guid])
				{
					gForms_AllFormsGUID[pos_guid].relativeForms.push(gForms_AllForms[i]);
					gForms_AllForms[i].isrelative = true;
					if(window["gDoRenderArrows"])
					{
						if(pos_dir.toLowerCase() == 'down')
						{
							gForms_AllForms[i].arrow = new Arrow	
																(
																	gForms_AllForms[i].offsetLeft,
																	gForms_AllForms[i].offsetTop,
																	gForms_AllFormsGUID[pos_guid].offsetLeft,
																	gForms_AllFormsGUID[pos_guid].offsetTop+gForms_AllFormsGUID[pos_guid].offsetHeight
																)
						}
						else if(pos_dir.toLowerCase() == 'up')
						{
							gForms_AllForms[i].arrow = new Arrow	
																(
																	gForms_AllForms[i].offsetLeft,
																	gForms_AllForms[i].offsetTop+gForms_AllForms[i].offsetHeight,
																	gForms_AllFormsGUID[pos_guid].offsetLeft,
																	gForms_AllFormsGUID[pos_guid].offsetTop
																)
						}
						else if(pos_dir.toLowerCase() == 'right')
						{
							gForms_AllForms[i].arrow = new Arrow
																(
																	gForms_AllForms[i].offsetLeft,
																	gForms_AllForms[i].offsetTop,
																	gForms_AllFormsGUID[pos_guid].offsetLeft+gForms_AllFormsGUID[pos_guid].offsetWidth,
																	gForms_AllFormsGUID[pos_guid].offsetTop
																)
						}
						else if(pos_dir.toLowerCase() == 'left')
						{
							gForms_AllForms[i].arrow = new Arrow
																(
																	gForms_AllForms[i].offsetLeft+gForms_AllForms[i].offsetWidth,
																	gForms_AllForms[i].offsetTop,
																	gForms_AllFormsGUID[pos_guid].offsetLeft,
																	gForms_AllFormsGUID[pos_guid].offsetTop
																)
						}
					}
				}
			}
		}
	);
	
	/*function forms_RegisterNewForm(form)
	{
		gForms_AllEditForms.push(form);
		var guid = form.getAttribute('guid');
		if(guid)
			gForms_AllFormsGUID[guid] = form;
	}*/
	
	function forms_GetFormByGuid(guid)
	{
		return gForms_AllFormsGUID[guid];
	}
	
	var gForms_IsMoving = false;
	var gForms_IsResizing = false;
	var gForms_IsSelecting = false;


	var gForms_SnapToGridSize = 10;

	var gForms_MouseLastPoint = {x: 0, y: 0};
	var gForms_MouseStartPoint = {x: 0, y: 0};


	function forms_SetHighestZindex(index)
	{
		if(index > gForms_Highest_zIndex)
			gForms_Highest_zIndex = index;
	}
	function forms_GetHighestZindex()
	{
		return gForms_Highest_zIndex;
	}


	function forms_SetGridSize(size)
	{
		gForms_SnapToGridSize = size;
	}
	function forms_GetGridSize()
	{
		return gForms_SnapToGridSize;
	}

	function forms_ClearSelection()
	{
		if(window["gForms_Disable"])
			return;
		for(var i = 0; i < gForms_MarkedForms.length; i++)
		{
			
			gForms_MarkedForms[i].style.left = (parseInt(gForms_MarkedForms[i].style.left)+1)+'px';
			gForms_MarkedForms[i].style.top = (parseInt(gForms_MarkedForms[i].style.top)+1)+'px';
			
			gForms_MarkedForms[i].style.border = '';
		}

		gForms_MarkedForms = new Array();
	}
	
	function forms_AddToSelection(obj)
	{
		if(window["gForms_Disable"])
			return;
		if(obj.getAttribute('editmode') == 1)
		{
			if(gForms_Menu)
			{
				gForms_Menu.destroy();
				gForms_Menu = null;
			}
	

			obj.style.left = (parseInt(obj.style.left)-1)+'px';
			obj.style.top = (parseInt(obj.style.top)-1)+'px';
						
			obj.style.border = 'dashed 1px black';
		}
		gForms_MarkedForms.push(obj);
	}
	
	function forms_ObjectIsSelected(obj)
	{
		for(var i = 0; i < gForms_MarkedForms.length; i++)
		{
			if(gForms_MarkedForms[i] == obj)
				return true;
		}
		return false;
	}
	
	function forms_SelectAll()
	{
		if(document.selection)
			document.selection.empty();
		//Trace('select all');
		var objects = gForms_AllEditForms?gForms_AllEditForms:document.getElementsByAttribute('name','view_builder_Edit_Form');
		forms_ClearSelection();
		for(var i = 0; i < objects.length; i++)
		{
			forms_AddToSelection(objects[i]);
		}
	}
	
	var gForms_SelectingDiv = document.createElement('div');
	gForms_SelectingDiv.style.position = 'absolute';
	gForms_SelectingDiv.style.top = '-100px';
	gForms_SelectingDiv.style.left = '-100px';
	gForms_SelectingDiv.style.width = '1px';
	gForms_SelectingDiv.style.height = '1px';
	gForms_SelectingDiv.style.zIndex = '999999';
	gForms_SelectingDiv.style.border = 'dashed 1px black';
	
	
	function forms_enableSelector()
	{
		registerDocumentOnMouseDown
		(
			function(ev)
			{
				var e = document.selection?window.event:ev;
				var mouse = {x: e.clientX + document.body.scrollLeft, y: e.clientY + document.body.scrollTop};
				var leftButton = document.selection?event.button == 1:e.which == 1;



				//if((document.body.scrollWidth && document.body.offsetWidth-mouse.x < 17) || (document.body.scrollHeight && document.body.offsetHeight-mouse.y < 17))
					//return;

				mouse.x = (parseInt(mouse.x/gForms_SnapToGridSize)*gForms_SnapToGridSize);
				mouse.y = (parseInt(mouse.y/gForms_SnapToGridSize)*gForms_SnapToGridSize);
	

				if(gForms_IsMoving || gForms_IsResizing || gDragAndDropObject || gForms_Menu || !leftButton)
				{
					return;
				}

				//Trace(gForms_IsSelecting);
				gForms_IsSelecting = true;
				gForms_MouseLastPoint.x = gForms_MouseStartPoint.x = mouse.x;
				gForms_MouseLastPoint.y = gForms_MouseStartPoint.y = mouse.y;
				
				
			}
		);
	}
	registerDocumentOnMouseMove
	(
		function(ev)
		{
			if(window["gForms_Disable"])
				return;
			var e = document.selection?window.event:ev;
			var mouse = {x: e.clientX + document.body.scrollLeft, y: e.clientY + document.body.scrollTop};
			
			mouse.x = (parseInt(mouse.x/gForms_SnapToGridSize)*gForms_SnapToGridSize);
			mouse.y = (parseInt(mouse.y/gForms_SnapToGridSize)*gForms_SnapToGridSize);
			var mouseDelta = {x: mouse.x-gForms_MouseLastPoint.x,y: mouse.y-gForms_MouseLastPoint.y};
			
			forms_UpdateResizeFix(mouse.x,mouse.y);
			
			if(gForms_IsResizing)
			{
				forms_ResizeSelection(mouse.x,mouse.y,e);
			}
			else if(gForms_IsMoving)
			{
				forms_MoveSelection(mouseDelta.x,mouseDelta.y,e);
			}
			else if(gForms_IsSelecting)
			{
				forms_UpdateSelector(mouse.x,mouse.y,e);
			}
		//	alert(gForms_IsSelecting);
			gForms_MouseLastPoint = mouse;
		}
	);

	registerDocumentOnMouseUp
	(
		function(ev)
		{
			if(window["gForms_Disable"])
				return;

			if(window["gDoAlphaOnMove"])
				forms_RestoreOpacity();
			if(gForms_IsMoving)
				externalisering_SavePosition(gForms_MarkedForms);
			
			if(gForms_IsResizing)
				externalisering_SaveSize(gForms_MarkedForms);
			
			if(gForms_IsSelecting)
				forms_SelectorDoSelect();
			
			gForms_IsMoving = false;
			gForms_IsResizing = false;
			gForms_IsSelecting = false;
			forms_RestoreUserSelect();
			forms_HideInfoDiv();
		}
	);

	function forms_ResizeSelection(mouseX,mouseY,e)
	{
		if(window["gForms_Disable"])
			return;
		for(var i = 0; i < gForms_MarkedForms.length; i++)
		{
			
			var mainTD = document.getElementById(gForms_MarkedForms[i].getAttribute('mainTD'));
			
			var outerX = gForms_MarkedForms[i].offsetWidth-mainTD.offsetWidth;
			var outerY = gForms_MarkedForms[i].offsetHeight-mainTD.offsetHeight;
			
			var ratio = parseInt(mainTD.startWidth)/parseInt(mainTD.startHeight);
			
			var deltaX = mouseX-gForms_MouseStartPoint.x;
			var deltaY = mouseY-gForms_MouseStartPoint.y;
			
			var newWidth = parseInt(mainTD.startWidth) + deltaX;
			mainTD.style.width = newWidth+'px';
			
			if(e.shiftKey)
				mainTD.style.height = (newWidth/ratio)+'px';
			else
				mainTD.style.height = (parseInt(mainTD.startHeight) + deltaY)+'px';
			
			if(gForms_MarkedForms[i].isrelative)
				forms_UpdateRelativePos(gForms_MarkedForms[i]);
			if(gForms_MarkedForms[i].relativeForms)
			{
				for(var x = 0; x < gForms_MarkedForms[i].relativeForms.length; x++)
					forms_UpdateRelativePos(gForms_MarkedForms[i].relativeForms[x]);
			}
	
		}
		forms_ShowInfoDiv();
	}

	function forms_MoveSelection(deltaX,deltaY,e)
	{
		if(window["gForms_Disable"])
			return;
		for(var i = 0; i < gForms_MarkedForms.length; i++)
		{
			if(gForms_MarkedForms[i].getAttribute('locked_position') != 1 && gForms_MarkedForms[i].getAttribute('hard_locked_position') != 1)
			{
		/*
				Trace(gForms_MarkedForms[i].offsetLeft);
				Trace(deltaX);
				Trace(gForms_SnapToGridSize);
				Trace(((parseInt(((gForms_MarkedForms[i].offsetLeft + deltaX)/gForms_SnapToGridSize))*gForms_SnapToGridSize)));
		*/
				gForms_MarkedForms[i].style.left = ((parseInt(((gForms_MarkedForms[i].offsetLeft + deltaX)/gForms_SnapToGridSize))*gForms_SnapToGridSize)) + 'px';
				gForms_MarkedForms[i].style.top = ((parseInt(((gForms_MarkedForms[i].offsetTop + deltaY)/gForms_SnapToGridSize))*gForms_SnapToGridSize)) + 'px';
			//	alert(gForms_MarkedForms[i].relativeForms);
				if(gForms_MarkedForms[i].isrelative)
					forms_UpdateRelativePos(gForms_MarkedForms[i]);
				if(gForms_MarkedForms[i].relativeForms)
				{
					for(var x = 0; x < gForms_MarkedForms[i].relativeForms.length; x++)
						forms_UpdateRelativePos(gForms_MarkedForms[i].relativeForms[x]);
				}
			}
		}
		forms_ShowInfoDiv();
	}
	
	function forms_UpdateRelativePosEx(obj,parent)
	{
			if(window["gForms_Disable"])
				return;
			if(obj == null)
				return;
			var pos_dir = obj.getAttribute('pos_dir');
			var pos_distance_x = parseInt(obj.getAttribute('pos_distance_x'));
			var pos_distance_y = parseInt(obj.getAttribute('pos_distance_y'));

			if(pos_dir.toLowerCase() == 'down')
			{
				obj.style.top = (parent.offsetTop + parent.offsetHeight + pos_distance_y)+'px';

				obj.style.left = (parent.offsetLeft+pos_distance_x)+'px';
				if(window["gDoRenderArrows"])
				{
					obj.arrow.update	
					(
						obj.offsetLeft,
						obj.offsetTop,
						parent.offsetLeft,
						parent.offsetTop+parent.offsetHeight
					);
				}
			}
			else if(pos_dir.toLowerCase() == 'right')
			{
				obj.style.top = (parent.offsetTop+pos_distance_y)+'px';
				obj.style.left = (parent.offsetLeft+parent.offsetWidth+pos_distance_x)+'px';
				if(window["gDoRenderArrows"])
				{
					obj.arrow.update
					(
						obj.offsetLeft,
						obj.offsetTop,
						parent.offsetLeft+parent.offsetWidth,
						parent.offsetTop
					);
				}
			}
			else if(pos_dir.toLowerCase() == 'left')
			{
				obj.style.top = (parent.offsetTop+pos_distance_y)+'px';
				obj.style.left = (parent.offsetLeft-pos_distance_x-obj.offsetWidth)+'px';
				if(window["gDoRenderArrows"])
				{
					obj.arrow.update
					(
						obj.offsetLeft+obj.offsetWidth,
						obj.offsetTop,
						parent.offsetLeft,
						parent.offsetTop
					);
				}
			}
			else if(pos_dir.toLowerCase() == 'up')
			{
				obj.style.top = (parent.offsetTop - pos_distance_y-obj.offsetHeight)+'px';
				obj.style.left = (parent.offsetLeft+pos_distance_x)+'px';
				if(window["gDoRenderArrows"])
				{
					obj.arrow.update	
					(
						obj.offsetLeft,
						obj.offsetTop+obj.offsetHeight,
						parent.offsetLeft,
						parent.offsetTop
					);
				}
			}
	}
	
	function forms_UpdateRelativePos(obj)
	{
			var pos_guid = obj.getAttribute('pos_guid');
			forms_UpdateRelativePosEx(obj,gForms_AllFormsGUID[pos_guid]);
			if(obj.relativeForms)
			{
				for(var i = 0; i < obj.relativeForms.length; i++)
					forms_UpdateRelativePos(obj.relativeForms[i]);
			}
	}
	
	function forms_UpdateSelector(mouseX,mouseY,e)
	{

		gForms_SelectingDiv.style.left = (Math.min(gForms_MouseStartPoint.x,mouseX))+'px';
		gForms_SelectingDiv.style.top = (Math.min(gForms_MouseStartPoint.y,mouseY))+'px';
		gForms_SelectingDiv.style.width = (Math.max(gForms_MouseStartPoint.x,mouseX)-Math.min(gForms_MouseStartPoint.x,mouseX))+'px';
		gForms_SelectingDiv.style.height = (Math.max(gForms_MouseStartPoint.y,mouseY)-Math.min(gForms_MouseStartPoint.y,mouseY))+'px';
	}
	function forms_SelectorDoSelect()
	{
		var objects = gForms_AllEditForms?gForms_AllEditForms:document.getElementsByAttribute('name','view_builder_Edit_Form');
		forms_ClearSelection();
		for(var i = 0; i < objects.length; i++)
		{
			if(	objects[i].offsetLeft >= gForms_SelectingDiv.offsetLeft &&
				objects[i].offsetLeft+objects[i].offsetWidth <= gForms_SelectingDiv.offsetLeft+gForms_SelectingDiv.offsetWidth &&
				objects[i].offsetTop >= gForms_SelectingDiv.offsetTop &&
				objects[i].offsetTop+objects[i].offsetHeight <= gForms_SelectingDiv.offsetTop+gForms_SelectingDiv.offsetHeight )
			{
				forms_AddToSelection(objects[i]);
			}
		}
		
		gForms_SelectingDiv.style.left = '-100px';
		gForms_SelectingDiv.style.top = '-100px';
		gForms_SelectingDiv.style.width = '1px';
		gForms_SelectingDiv.style.height = '1px';
	}
	
	function forms_SetOpacity()
	{
		for(var i = 0; i < gForms_MarkedForms.length; i++)
		{
			if(!gForms_MarkedForms[i].oldFilter)
				gForms_MarkedForms[i].oldFilter = gForms_MarkedForms[i].style.filter;
			if(!gForms_MarkedForms[i].oldOpacity)
				gForms_MarkedForms[i].oldOpacity = gForms_MarkedForms[i].style.opacity;
			gForms_MarkedForms[i].style.filter = 'alpha(opacity=50)';
			gForms_MarkedForms[i].style.opacity = '.5';
		}
	}
	function forms_RestoreOpacity()
	{
		for(var i = 0; i < gForms_MarkedForms.length; i++)
		{
			gForms_MarkedForms[i].style.filter = gForms_MarkedForms[i].oldFilter;
			gForms_MarkedForms[i].style.opacity = gForms_MarkedForms[i].oldOpacity;
		}
	}
	
	function forms_StartMove(ev,obj)
	{
		if(window["gForms_Disable"])
			return;
			
		var e = document.selection?window.event:ev;	
		var leftButton = document.selection?event.button == 1:e.which == 1;
	

		if(!forms_ObjectIsSelected(obj))
		{
			if(!e.ctrlKey && !e.shiftKey)
				forms_ClearSelection();
			forms_AddToSelection(obj);
		}
		
		if(leftButton)
		{
			forms_DisableUserSelect();
			gForms_IsMoving = true;
			if(window["gDoAlphaOnMove"])
				forms_SetOpacity();
		}

		var mouse = {x: e.clientX + document.body.scrollLeft, y: e.clientY + document.body.scrollTop};
		mouse.x = (parseInt(mouse.x/gForms_SnapToGridSize)*gForms_SnapToGridSize);
		mouse.y = (parseInt(mouse.y/gForms_SnapToGridSize)*gForms_SnapToGridSize);
		gForms_MouseLastPoint = gForms_MouseStartPoint = mouse;

		//changeHistory_AddChange(gForms_MarkedForms);

	}
	
	function forms_SaveMainTDSize()
	{
		for(var i = 0; i < gForms_MarkedForms.length; i++)
		{
			var mainTD = document.getElementById(gForms_MarkedForms[i].getAttribute('mainTD'));
			mainTD.startWidth = parseInt(mainTD.style.width);
			mainTD.startHeight = parseInt(mainTD.style.height);
		}	
	}
	
	function forms_StartResize(ev,obj)
	{
		if(window["gForms_Disable"])
			return;
		if(obj.getAttribute('locked_size') == 1 || obj.getAttribute('hard_locked_size') == 1)
			return;
	
		var e = document.selection?window.event:ev;
		var leftButton = document.selection?event.button == 1:e.which == 1;
		if(!leftButton)
			return;
		forms_DisableUserSelect();
		var e = document.selection?window.event:ev;
		forms_ClearSelection();
		forms_AddToSelection(obj);
		
		
		gForms_IsResizing = true;
		//forms_SetOpacity();

		forms_SaveMainTDSize();
	
		var mouse = {x: e.clientX + document.body.scrollLeft, y: e.clientY + document.body.scrollTop};
		mouse.x = (parseInt(mouse.x/gForms_SnapToGridSize)*gForms_SnapToGridSize);
		mouse.y = (parseInt(mouse.y/gForms_SnapToGridSize)*gForms_SnapToGridSize);
		gForms_MouseLastPoint = gForms_MouseStartPoint = mouse;
		
		//changeHistory_AddChange(gForms_MarkedForms);
	}
	
	function forms_LockSize(locked)
	{
		for(var i = 0; i < gForms_MarkedForms.length; i++)
		{
			gForms_MarkedForms[i].setAttribute('locked_size',locked);
		}	
		externalisering_SaveLockedSize(gForms_MarkedForms);
	}
	
	function forms_LockPosition(locked)
	{
		for(var i = 0; i < gForms_MarkedForms.length; i++)
		{
			gForms_MarkedForms[i].setAttribute('locked_position',locked);
		}	
		externalisering_SaveLockedPosition(gForms_MarkedForms);
	}
	
	var gForms_DoSaveOnTimeout = false;

	registerDocumentOnKeyDown
	(
		function (ev)
		{
			if(window["gForms_Disable"])
				return;
			var oldGridSize = gForms_SnapToGridSize;
			
			var e = ev?ev:window.event;
			
			var hiddenKey = String.fromCharCode(e.keyCode).toLowerCase();
			
			
			
			//Trace(e.keyCode);
			
			gForms_SnapToGridSize = e.shiftKey?1:gForms_SnapToGridSize;
			if(e.keyCode == 38) // up
				forms_MoveSelection(0,-gForms_SnapToGridSize);
			else if(e.keyCode == 40) // down
				forms_MoveSelection(0,gForms_SnapToGridSize);
			else if(e.keyCode == 37) // left
				forms_MoveSelection(-gForms_SnapToGridSize,0);
			else if(e.keyCode == 39) // right
				forms_MoveSelection(gForms_SnapToGridSize,0);
			else if(e.keyCode == 46) // delete
			{
				if(gForms_MarkedForms.length > 0)
					forms_DeleteSelection();
				
			}
			else if(e.ctrlKey && hiddenKey == 'a') // CTRL + A
				forms_SelectAll();
			else if(e.ctrlKey && hiddenKey == 'c') // CTRL + C
			{
				externalisering_SetClipboard(gForms_MarkedForms);
			}
			else if(e.ctrlKey && hiddenKey == 'v') // CTRL + V
			{
				forms_ClearSelection();
				document.getElementById('ajaxcontainer').style.display = 'none';
				ajaxpage(syspath+"/_system/ajax/ajax_clipboard_get.cfm","ajaxcontainer",'','var dnditem = document.getElementById("DnDDiv"); dragAndDrop_StartDrag(dnditem);  document.getElementById("ajaxcontainer").innerHTML = ""; document.getElementById(\'ajaxcontainer\').style.display = \'\';');
					
			}
			else
				return;
			//else if(e.ctrlKey && hiddenKey == 'y') // CTRL + Y
				//changeHistory_Redo();
			//else if(e.ctrlKey && hiddenKey == 'z') // CTRL + Z
				//changeHistory_Revert();
			
			// e.cancelBubble = true;
			
			gForms_SnapToGridSize = oldGridSize;
	
			gForms_DoSaveOnTimeout = true;
			window.setTimeout
			(
			 	function()
				{
					if(gForms_DoSaveOnTimeout)
					{
						gForms_DoSaveOnTimeout = false;
						forms_HideInfoDiv();
						externalisering_SavePosition(gForms_MarkedForms);
					}
				}
				,100
			)
	
		}
	);

	var gForms_OldOnSelectStart = document.body.onselectstart;
	var gForms_OldMozUserSelect = document.body.style.MozUserSelect;
	function forms_DisableUserSelect()
	{
		if(document.selection)
		{
			gForms_OldOnSelectStart = document.body.onselectstart;
			document.body.onselectstart = function() {return false;};
		}
		else
		{
			gForms_OldMozUserSelect = document.body.style.MozUserSelect;
			document.body.style.MozUserSelect='none';
		}
	}

	function forms_RestoreUserSelect()
	{
		if(document.selection)
		{
			document.body.onselectstart = gForms_OldOnSelectStart;
		}
		else
		{
			document.body.style.MozUserSelect=gForms_OldMozUserSelect;
		}
	}

	var gForms_ResizeFix = document.createElement('div');
	gForms_ResizeFix.style.position = 'absolute';
	gForms_ResizeFix.style.width = '400px';
	gForms_ResizeFix.style.height = '400px';
	gForms_ResizeFix.style.zIndex = '999999';
	gForms_ResizeFix.style.border = 'solid 0px red';
	gForms_ResizeFix.style.display = 'none';
	gForms_ResizeFix.style.MozUserSelect = 'none';
	gForms_ResizeFix.style.onselectstart = function() {return false;};

	registerWindowOnLoad
	(
		function()
		{
			document.body.appendChild(gForms_ResizeFix);
			document.body.appendChild(gForms_SelectingDiv);
			gForms_DocumentLoaded = true;
		}
	);

	function forms_UpdateResizeFix(mouseX,mouseY)
	{
		if(gForms_IsMoving || gForms_IsResizing)
		{
			if(document.selection)
				document.selection.empty();
			if(gForms_ResizeFix.style.display == 'none')
				gForms_ResizeFix.style.display = '';
			gForms_ResizeFix.style.top = (mouseY-200)+'px';
			gForms_ResizeFix.style.left = (mouseX-200)+'px';
		}
		else if(gForms_ResizeFix.style.display != 'none')

			gForms_ResizeFix.style.display = 'none';
		
	}

	function forms_DeleteSelection()
	{
		var msg = gForms_MarkedForms.length>1?"Are you sure you want to delete these items?":"Are you sure you want to delete this item?";
		if(confirm(msg))
		{
			externalisering_DeleteForms(gForms_MarkedForms);
		}
	}
	var gForms_Menu = null;
	
	var gForms_DupObj = null;
	
	var gForms_ComponentMenus = new Array();
	
	function forms_registerComponentMenuEvent(component,func)
	{
		// func(menu)
		Trace(component);
		Trace(func);
		gForms_ComponentMenus[component] = func;
	}
	function forms_getComponentMenuEvent(component)
	{
		return gForms_ComponentMenus[component];
	}
	
	var gForms_QTID = -1;
	
	function forms_onDoneBrowseForAsset(id)
	{
		//alert(window.location.toString());
		window.setTimeout("externalisering_SetComponentProperty(gForms_MarkedForms,'assetid',"+id+");",0);
	}
	
	function forms_showMenuForm(e)
	{
		if(window["gForms_Disable"])
			return;
				
		if(gForms_Menu)
		{
			gForms_Menu.destroy();
			gForms_Menu = null;
		}
		if(menu){ menu.destroy();	menu = null; }
		
		var extended_count = 0;
		
		var component_type = "";
		var locked_size_count = 0;
		var locked_position_count = 0;
		for(var i = 0; i < gForms_MarkedForms.length; i++)
		{
			if(gForms_MarkedForms[i].getAttribute('is_extending') == 1)
				extended_count++;
			if(gForms_MarkedForms[i].getAttribute('locked_size') == 1)
				locked_size_count++;
			if(gForms_MarkedForms[i].getAttribute('locked_position') == 1)
				locked_position_count++;
			if(component_type == "")
			{
				component_type = gForms_MarkedForms[i].getAttribute('component_type');
			}
			else if(component_type != gForms_MarkedForms[i].getAttribute('component_type'))
			{
				component_type = 'mixed';
			}
		}
		var component_name = component_type;
		component_type = gForms_MarkedForms.length+' '+component_type;
		
		gForms_Menu = new Menu(e.clientX+document.body.scrollLeft,e.clientY+document.body.scrollTop);
		gForms_Menu.appendMenuItem(new MenuItem(component_type,"gForms_Menu = null;"));
		gForms_Menu.appendMenuItem(new MenuSeparator());
		

		if(extended_count == 1 && gForms_MarkedForms.length == 1 && component_name == "image")
		{
			gForms_Menu.appendMenuItem(new MenuItem('Browse for image',"BrowseForAsset({startNode: window['session.topnode'], returnFunction: forms_onDoneBrowseForAsset}); gForms_Menu = null;",syspath+"/_images/icons/empty.gif"));
		}
		if(gForms_MarkedForms.length == 1 && component_name == "image")
		{
			gForms_Menu.appendMenuItem(new MenuItem('Edit geometry',"openImageCropper(gForms_MarkedForms[0]); gForms_Menu = null;",syspath+"/_images/icons/empty.gif"));
		}

		if(!extended_count)
		{
			if(gForms_MarkedForms.length == 1)
			{
				gForms_DupObj=gForms_MarkedForms[0];
				gForms_Menu.appendMenuItem(new MenuItem('Duplicate',"dragAndDrop_StartDrag(gForms_DupObj); forms_ClearSelection(); gForms_Menu = null;",syspath+"/_images/icons/duplicate.gif"));
			}
			else
			{
				var lowestpos = {x:9999, y:9999};
				var highestpos = {x:0, y:0};
				for(var i = 0; i < gForms_MarkedForms.length; i++)
				{
					if(gForms_MarkedForms[i].offsetLeft < lowestpos.x)
						lowestpos.x = gForms_MarkedForms[i].offsetLeft;
					if(gForms_MarkedForms[i].offsetTop < lowestpos.y)
						lowestpos.y = gForms_MarkedForms[i].offsetTop;
					
					if(gForms_MarkedForms[i].offsetLeft+gForms_MarkedForms[i].offsetWidth > highestpos.x)
						highestpos.x = gForms_MarkedForms[i].offsetLeft+gForms_MarkedForms[i].offsetWidth;
					if(gForms_MarkedForms[i].offsetTop+gForms_MarkedForms[i].offsetHeight > highestpos.y)
						highestpos.y = gForms_MarkedForms[i].offsetTop+gForms_MarkedForms[i].offsetHeight;
				}
	
	
				gForms_DupObj = document.createElement('div');
				gForms_DupObj.style.position="absolute";
				gForms_DupObj.style.width=(highestpos.x-lowestpos.x)+"px";
				gForms_DupObj.style.height=(highestpos.y-lowestpos.y)+"px";
				gForms_DupObj.setAttribute('DnDType','selection');
				var innerDupObj = document.createElement('div');
				innerDupObj.style.position="relative";
				gForms_DupObj.appendChild(innerDupObj);
				var IdList = "";
				for(var i = 0; i < gForms_MarkedForms.length; i++)
				{
					IdList += gForms_MarkedForms[i].getAttribute('formnr');
					if(i != gForms_MarkedForms.length-1)
						IdList += ',';
					
					var tmpObj = gForms_MarkedForms[i].cloneNode(true);
					tmpObj.style.position = 'absolute';
					tmpObj.style.left = (parseInt(gForms_MarkedForms[i].style.left)-lowestpos.x);
					tmpObj.style.top = (parseInt(gForms_MarkedForms[i].style.top)-lowestpos.y);
					tmpObj.style.width = gForms_MarkedForms[i].style.width;
					tmpObj.style.height = gForms_MarkedForms[i].style.height;
					
					
					clearElementEventFunctions(tmpObj);

					innerDupObj.appendChild(tmpObj);
					
				}
				gForms_DupObj.setAttribute('DnDId',IdList);
				gForms_Menu.appendMenuItem(new MenuItem('Duplicate',"dragAndDrop_StartDrag(gForms_DupObj); forms_ClearSelection(); gForms_DupObj=null; gForms_Menu = null;",syspath+"/_images/icons/duplicate.gif"));			
			}
		}
		if(gForms_MarkedForms.length && !extended_count)
		{
	//		var qtMenu = new SubMenu('New Template',syspath+"/_images/icons/duplicate.gif")
			
			

			gForms_Menu.appendMenuItem(new MenuItem('New QuickTemplate',"externalisering_CreateTemplate(gForms_MarkedForms,prompt('Enter name for the template',''),gForms_QTID); gForms_Menu = null;",syspath+"/_images/icons/duplicate.gif"));			
//			gForms_Menu.appendMenuItem(qtMenu);
		}

		if(gForms_MarkedForms.length && !extended_count)
			gForms_Menu.appendMenuItem(new MenuItem('Delete',"forms_DeleteSelection(); gForms_Menu = null;",syspath+"/_images/icons/delete.gif"));
		
		if(gForms_MarkedForms.length && !extended_count)
		{
			var lockMenu = new SubMenu('Locks',syspath+"/_images/icons/lock.gif")
			
			
			if(locked_size_count != gForms_MarkedForms.length)
				lockMenu.appendMenuItem(new MenuItem('Lock size',"forms_LockSize(1); gForms_Menu = null;",syspath+"/_images/icons/lock.gif"));
			if(locked_size_count != 0)
				lockMenu.appendMenuItem(new MenuItem('Unlock size',"forms_LockSize(0); gForms_Menu = null;",syspath+"/_images/icons/unlock.gif"));
	
			if(locked_position_count != gForms_MarkedForms.length)
				lockMenu.appendMenuItem(new MenuItem('Lock position',"forms_LockPosition(1); gForms_Menu = null;",syspath+"/_images/icons/lock.gif"));
			if(locked_position_count != 0)
				lockMenu.appendMenuItem(new MenuItem('Unlock position',"forms_LockPosition(0); gForms_Menu = null;",syspath+"/_images/icons/unlock.gif"));
			gForms_Menu.appendMenuItem(lockMenu);
		}



		if(gForms_MarkedForms.length && !extended_count)
		{
			gForms_Menu.appendMenuItem(new MenuItem('Put on top',"forms_PutSelectionOnTop(); gForms_Menu = null;",syspath+"/_images/icons/bringtofront.gif"));
			gForms_Menu.appendMenuItem(new MenuItem('Put on bottom',"forms_PutSelectionOnBottom(); gForms_Menu = null;",syspath+"/_images/icons/bringtoback.gif"));
		}
		
//		gForms_Menu.appendMenuItem(new MenuItem('forms_GetFormByGuid',"alert(forms_GetFormByGuid(prompt('guid'))); gForms_Menu = null;",syspath+"/_images/icons/bringtofront.gif"));


		var debugMenu = new SubMenu('Debug',syspath+"/_images/icons/debug.gif")
		debugMenu.appendMenuItem(new MenuItem('Start debug',"startDebug(); gForms_Menu = null;",syspath+"/_images/icons/debug.gif"));
//		debugMenu.appendMenuItem(new MenuItem('Reload page',"document.location = document.location; gForms_Menu = null;",syspath+"/_images/icons/reload.gif"));
		gForms_Menu.appendMenuItem(debugMenu);	

		if(gForms_MarkedForms.length && component_name == 'video' && !extended_count)
		{
			var aspectMenu = new SubMenu('Fix aspect',syspath+"/_images/icons/fixaspect.gif")
			aspectMenu.appendMenuItem(new MenuItem('4:3',"foms_SetSelectionHeightByAspect(4/3,21); gForms_Menu = null;",syspath+"/_images/icons/fixaspect.gif"));
			aspectMenu.appendMenuItem(new MenuItem('16:9',"foms_SetSelectionHeightByAspect(16/9,21); gForms_Menu = null;",syspath+"/_images/icons/fixaspect.gif"));
			gForms_Menu.appendMenuItem(aspectMenu);	
		}
		else if(gForms_MarkedForms.length && !extended_count)
		{
			gForms_Menu.appendMenuItem(new MenuItem('Fix aspect',"foms_SetSelectionHeightByWidth(); gForms_Menu = null;",syspath+"/_images/icons/fixaspect.gif"));
		}
		
		if(gForms_MarkedForms.length && !extended_count && component_type.match('[1-99] image'))
			gForms_Menu.appendMenuItem(new MenuItem('Actual size',"foms_SetSelectionActualSize(); gForms_Menu = null;",syspath+"/_images/icons/fixaspect.gif"));
		if(gForms_MarkedForms.length == 1)
		{
			if(gForms_ComponentMenus[component_name])
			{
				var compMenu = new SubMenu('Special',syspath+"/_images/icons/debug.gif")
				gForms_Menu.appendMenuItem(compMenu);
				gForms_ComponentMenus[component_name](compMenu,gForms_MarkedForms[0]);
			}
			gForms_Menu.appendMenuItem(new MenuItem('Form properties',"showEditForm(0,'"+gForms_MarkedForms[0].getAttribute('path')+"','"+gForms_MarkedForms[0].getAttribute('xmlfile')+"', '"+gForms_MarkedForms[0].getAttribute('formnr')+"','"+gForms_MarkedForms[0].getAttribute('urlParams')+"'); gForms_Menu = null;",syspath+"/_images/icons/properties.gif"));
		}
		
		
		if (e.stopPropagation) 
		{ 
			e.stopPropagation(); 
		} 
		else 
		{ 
			e.cancelBubble = true; 
		}

		return false;

	}


	function forms_SortArrayByZIndex(o)
	{
		var sortingArray = new Array();
		for(var i = 0; i < o.length; i++)
		{
			sortingArray.push(parseFloat(o[i].style.zIndex+'.'+(i+1)));
		}
		sortingArray.sort(function(a,b){ return (a-b); });
		var retArray = new Array();
		for(var i = 0; i < sortingArray.length; i++)
		{
			var cur = sortingArray[i].toString().split('.');
			
			var zIndex = cur[0];
			var aIndex = cur[1]-1;
			retArray.push(o[aIndex]);
		}
		return retArray;
	}

	function forms_MinimizeZIndexes(lowestZIndex)
	{
		if(lowestZIndex == undefined)
			lowestZIndex = 1;
		var objects = forms_SortArrayByZIndex(gForms_AllEditForms?gForms_AllEditForms:document.getElementsByAttribute('name','view_builder_Edit_Form'));
		
		for(var i = 0; i < objects.length; i++)
		{
//			Trace(gForms_Highest_zIndex + ' => ' + (i+lowestZIndex));
			gForms_Highest_zIndex = objects[i].style.zIndex = i+lowestZIndex;
		}
		externalisering_SaveZIndex(objects);
	}

	function forms_PutSelectionOnTop()
	{
		for(var i = 0; i < gForms_MarkedForms.length; i++)
		{
			gForms_MarkedForms[i].style.zIndex += gForms_Highest_zIndex;
			
		}
		forms_MinimizeZIndexes(1);
	}
	function forms_PutSelectionOnBottom()
	{
		for(var i = 0; i < gForms_MarkedForms.length; i++)
		{
			gForms_MarkedForms[i].style.zIndex -= gForms_Highest_zIndex;
		}
		forms_MinimizeZIndexes(1);
	}

	var gForms_InfoDivs = new Array();


	var gForms_TemplateInfoDiv = document.createElement('div');
	gForms_TemplateInfoDiv.style.padding = "5px";
	gForms_TemplateInfoDiv.style.border = "solid 1px #bcbcbc";
	gForms_TemplateInfoDiv.style.backgroundColor = "#ffffff";
	gForms_TemplateInfoDiv.style.fontFamily = 'verdana';
	gForms_TemplateInfoDiv.style.fontSize = '12px';
	gForms_TemplateInfoDiv.style.position = 'absolute';
	gForms_TemplateInfoDiv.style.top = '-10000px';
	gForms_TemplateInfoDiv.style.left = '-10000px';
	gForms_TemplateInfoDiv.style.zIndex = '999999';


	function forms_InfoDiv_FitArray()
	{
		for(var i = gForms_InfoDivs.length; i < gForms_MarkedForms.length; i++)
		{
			gForms_InfoDivs[i] = gForms_TemplateInfoDiv.cloneNode(true);
			if(gForms_DocumentLoaded)
				document.body.appendChild(gForms_InfoDivs[i]);
			else
				registerWindowOnLoad(Function("document.body.appendChild(gForms_InfoDivs["+i+"]);"));
		}
	}
		
	function forms_ShowInfoDiv()
	{
		forms_InfoDiv_FitArray();
		for(var i = 0; i < gForms_MarkedForms.length; i++)
		{
			if(gForms_MarkedForms[i].getAttribute('editmode') == 1)
			{
				gForms_InfoDivs[i].innerHTML = 'X: ' + (gForms_MarkedForms[i].offsetLeft-parseInt(gForms_MarkedForms[i].getAttribute('margin_left'))) + '<br/>' +
														'Y: ' + (gForms_MarkedForms[i].offsetTop-parseInt(gForms_MarkedForms[i].getAttribute('margin_top'))) + '<br/>' +
														'Width: ' + gForms_MarkedForms[i].offsetWidth + '<br/>' +
														'Height: ' + gForms_MarkedForms[i].offsetHeight;
				gForms_InfoDivs[i].style.left = (gForms_MarkedForms[i].offsetLeft+((gForms_MarkedForms[i].offsetWidth/2)-(gForms_InfoDivs[i].offsetWidth/2)))+'px';
				gForms_InfoDivs[i].style.top = (gForms_MarkedForms[i].offsetTop+((gForms_MarkedForms[i].offsetHeight/2)-(gForms_InfoDivs[i].offsetHeight/2)))+'px';
			}
		}
	}
	function forms_HideInfoDiv()
	{
		for(var i = 0; i < gForms_InfoDivs.length; i++)
		{
			gForms_InfoDivs[i].style.left = '-1000';
			gForms_InfoDivs[i].style.top = '-1000';
		}
	}
	
	function foms_SetSelectionHeightByWidth_recursiveFix(that,mtd)
	{
		var objects = that.childNodes;
		for(var i = 0; i < objects.length; i++)
		{
			if(objects[i].getAttribute && objects[i].getAttribute('baseURL'))
			{
				mtd.style.height=((objects[i].offsetHeight/objects[i].offsetWidth)*objects[i].offsetWidth)+'px';
				
			}
			foms_SetSelectionHeightByWidth_recursiveFix(objects[i],mtd);
		}
	}

	function foms_SetSelectionHeightByWidth()
	{
		for(var x = 0; x < gForms_MarkedForms.length; x++)
		{
			var mtd = document.getElementById(gForms_MarkedForms[x].getAttribute('mainTD'))
			foms_SetSelectionHeightByWidth_recursiveFix(mtd,mtd);
		}
		externalisering_SaveSize(gForms_MarkedForms);
	}
	

	function foms_SetSelectionHeightByAspect(ratio,extraheight)
	{
		for(var x = 0; x < gForms_MarkedForms.length; x++)
		{
			var mtd = document.getElementById(gForms_MarkedForms[x].getAttribute('mainTD'))
			mtd.style.height=((mtd.offsetWidth/ratio)+extraheight)+'px';
		}
		externalisering_SaveSize(gForms_MarkedForms);
	}
	
	function foms_SetSelectionActualSize()
	{
		externalisering_SaveSizeSetActualSize(gForms_MarkedForms);
	}
	
	function forms_GetComponentAttribute(obj,attribute)
	{
		var ret = undefined;
		var mainTD = document.getElementById(obj.getAttribute('mainTD'));
		return mainTD.getAttribute('LF_'+attribute);
	}
	
}