﻿/**********************************************************
Template control object
**********************************************************/

var currentlyManipulatedObject = null;
var dragOffsetX = 0;
var dragOffsetY = 0;
var currentZIndex = 0;
var typeOfAction = "";
var startCoordinates = [0, 0];
var counter = 0;
var disableMousecommands = false;
var isFocusEnabled = true;
var showDragList = true;
var templateContainer = null;

var oldMouseDownHandler = document.onmousedown;
var oldMouseUpHandler = document.onmouseup;
var currentMouseUpHandler = null;

var editorPage = "/DotNet/TemplateModule/Web/EditControlContent.aspx";

function onMouseMove(e)
{
	e = GetEvent(e);

	if (e.button <= 1)
	{
		switch (typeOfAction)
		{
			case "Resize": onMouseMove_Resize(e); break;
		}
	}
	return false;
}

function onMouseMove_Resize(e)
{
	var jE = $.event.fix(e);
	//    var table = currentlyManipulatedObject.getElementsByTagName("table")[0];
	var localCoordinates = [jE.pageX, jE.pageY];

	//    
	localCoordinates[0] += parseInt(templateContainer.scrollLeft) - parseInt(templateContainer.offsetLeft);
	localCoordinates[1] += parseInt(templateContainer.scrollTop) - parseInt(templateContainer.offsetTop);

	var dimensions = [localCoordinates[0] - parseInt(currentlyManipulatedObject.offsetLeft) - Template.GetContainer().offsetLeft, parseInt(localCoordinates[1]) - parseInt(currentlyManipulatedObject.offsetTop) - parseInt(Template.GetContainer().offsetTop)];
	currentlyManipulatedObject.style["width"] = Math.max(dimensions[0], 1) + 5 + "px";
	currentlyManipulatedObject.style["height"] = Math.max(dimensions[1], 1) + 5 + "px";

	ShowResizeHandles(currentlyManipulatedObject.id);
	//Dispatch a message
	EventManager.Notify(EventManager.CreateEvent("EVENT_RESIZING", eval("_" + currentlyManipulatedObject.id), GetObjectStyle(currentlyManipulatedObject), null));

	return false;
}


//function onMouseMove_DragDrop(e)
//{
//    var screenCoordinates = getScreenCoordinates(e);
//    currentlyManipulatedObject.style["left"] = (screenCoordinates[0]-dragOffsetX)+"px";
//    currentlyManipulatedObject.style["top"] = (screenCoordinates[1]-dragOffsetY)+"px";
//    
//    //Dispatch a message
//    EventManager.Notify(EventManager.CreateEvent("EVENT_DRAGGING", eval("_" + currentlyManipulatedObject.id), GetObjectStyle(currentlyManipulatedObject), null));
//    
//    return false;
//}

function onCloneDropped(e)
{
	//must be defined by the TemplateEditor page
	CloneControl(currentlyManipulatedObject.id, currentlyManipulatedObject.style["left"], currentlyManipulatedObject.style["top"]);

	currentlyManipulatedObject = null;
	document.onmousemove = null;
	document.onmouseup = null;
	//SendToBack(control);    //reset z-Index

	return false;
}

//function onEndDrag(e)
//{
//    e = GetEvent(e);
//    
//    var control = currentlyManipulatedObject; 
//    var currentlyManipulatedObjectContentTable = currentlyManipulatedObject.getElementsByTagName("table")[0]; 
//    //currentlyManipulatedObjectContentTable.setAttribute(classAttribute, "");

//    //Dispatch a message before we store the object's style
//    //some other control may want to manipulate it first
//    currentlyManipulatedObject.getElementsByTagName("input")[0].value = GetObjectStyle(currentlyManipulatedObject);    
//    EventManager.Notify(EventManager.CreateEvent("EVENT_ENDDRAG", eval("_" + currentlyManipulatedObject.id), GetObjectStyle(currentlyManipulatedObject), null));
//    
//    currentlyManipulatedObject.style["zIndex"] = currentZIndex;

//    //document.onmousemove();    
//    currentlyManipulatedObject = null;
//    document.onmousemove = null;
//    document.onmouseup = null;
//    //SendToBack(control);    //reset z-Index

//    return false;
//}

function onEndResize(e)
{
	e = GetEvent(e);

	var controlElement = currentlyManipulatedObject;
	var control = eval("_" + currentlyManipulatedObject.id);
	//save the stylesettings
	control.SetProperties(GetElementStyle(currentlyManipulatedObject), true);

	//Dispatch a message
	EventManager.Notify(EventManager.CreateEvent("EVENT_ENDRESIZE", control, control.GetProperties(), null));

	//document.onmousemove();
	currentlyManipulatedObject = null;
	document.onmousemove = null;
	document.onmouseup = null;

	//special case - when resizing and the mouse ends up outside the control 
	//and the resize ends, the onmouseout event is not called
	//controlElement.onmouseout();

	return false;
}

function onInitiateMouseDownCommand(e)
{
	if (disableMousecommands)
		return true;

	e = GetEvent(e);
	var target = GetTarget(e);

	try
	{
		if ($("#" + target.id).is(".DragableItem_ResizeHandle"))
			return onInitiateResize(e);

		//Don't bother with this event, let the system handle it
		return oldMouseDownHandler();
	} catch (Error) { }
}

function onInitiateMouseUpCommand(e)
{
	e = GetEvent(e);

	if (e.button <= 1)
		; //alert('Mousebutton released');

	return false;
}

var clonedControl = null;
var clonedControlElement = null;
var isCloning = false;
//function onInitiateDrag(e)
//{
//    var target = GetTarget(e);
//    var screenCoordinates = getScreenCoordinates(e);
//    var rootObjectNameElement = target.getElementsByTagName("input")[0];
//    if (rootObjectNameElement.id != "RootObjectName") return;

//    //Clone a control by hold the Ctrl key pressed while dragging it
//    if (IsCtrlKeyPressed)
//    {
//		clonedControlElement = document.getElementById(rootObjectNameElement.value).cloneNode(100);

//		var inputs = clonedControlElement.getElementsByTagName("input");
//		var idStrip = clonedControlElement.id.replace(/_SpanItemBase/gi, "");

//		inputs[5].value = "ClonedControl";
//		inputs[6].value = "ClonedControl";
//		for (var i=0; i<inputs.length; i++)
//			inputs[i].id = inputs[i].id.replace(idStrip, "ClonedControl");

//		var length = inputs.length;
//		for (var i = 6; i < length; i++)
//			try
//		{
//			//remove any non-essential inputs that may interfere
//			getParentNode(inputs[i]).removeChild(inputs[i]);
//		} catch (e) { }

//		var controlID = eval("_" + $get(rootObjectNameElement.value).id).GetControlID();		
//		clonedControl = new TemplateBaseControlClass();
//		clonedControl.Initialize(clonedControlElement, controlID);
//		
//		Template.GetContainer().appendChild(clonedControlElement);
//		currentlyManipulatedObject = clonedControlElement;
//		isCloning = true;
//	}
//    else
//    {
//		isCloning = false;
//		currentlyManipulatedObject = $get(rootObjectNameElement.value);
//	}

//	
//    var currentlyManipulatedObjectContentTable = currentlyManipulatedObject.getElementsByTagName("table")[0]; 
//    //currentlyManipulatedObjectContentTable.setAttribute(classAttribute, "DragableItem_Dragging");
//    document.onmousemove = onMouseMove;
//    document.onmouseup = isCloning ? onCloneDropped : onEndDrag;
//    dragOffsetX = screenCoordinates[0] - (parseInt(currentlyManipulatedObject.style["left"]) + parseInt(currentlyManipulatedObjectContentTable.offsetLeft));
//    dragOffsetY = screenCoordinates[1] - (parseInt(currentlyManipulatedObject.offsetTop) + parseInt(currentlyManipulatedObjectContentTable.offsetTop));
//    typeOfAction = "DragDrop";

//    EventManager.Notify(EventManager.CreateEvent("EVENT_INITIATEDRAG", eval("_" + currentlyManipulatedObject.id), GetObjectStyle(currentlyManipulatedObject), null));

//    return false;
//}

function onInitiateResize(e)
{
	var target = GetTarget(e);
	var screenCoordinates = getScreenCoordinates(e);

	currentlyManipulatedObject = $get(target.getAttribute("MasterID"));
	resizeType = target.getAttribute("ResizeType");

	templateContainer = document.getElementById("TemplateContentContainer");
	//    var target = GetTarget(e);
	//    var screenCoordinates = getScreenCoordinates(e);
	//    var rootObjectNameElement = target.getElementsByTagName("input")[0];
	//    if (rootObjectNameElement.id != "RootObjectName") return;

	//    currentlyManipulatedObject = document.getElementById(rootObjectNameElement.value);
	//    templateContainer = document.getElementById("TemplateContentContainer");

	document.onmousemove = onMouseMove;
	document.onmouseup = onEndResize;

	typeOfAction = "Resize";

	EventManager.Notify(EventManager.CreateEvent("EVENT_INITIATERESIZE", eval("_" + currentlyManipulatedObject.id), GetObjectStyle(currentlyManipulatedObject), null));

	return false;
}

function ControlIsEditable(control, value)
{
	if (control != null && control.getAttribute(classAttribute).indexOf("DragableItemBase") >= 0)
	{
		var inputControl = control.getElementsByTagName("input")[1];
		inputControl.value = value ? "1" : "0";
	}
}

///
function ToggleHeaderListVisibility(element, visibility)
{
	if (!currentlyManipulatedObject && (showDragList || visibility == "hidden"))
	{
		if (element.getAttribute(classAttribute) == "DragableItemHeaderList")
			element.style["visibility"] = visibility;
	}
}

///
//function ToggleResizeHandleVisibility(element, visibility)
//{
//    if (!currentlyManipulatedObject)
//    {
//        if (element.getAttribute(classAttribute) == "DragableItem_ResizeHandle")
//            element.style["display"] = visibility;
//    }
//}

function BringToFront(element)
{
	if (!currentlyManipulatedObject && isFocusEnabled)
	{
		if (element.style["zIndex"] != 100000)
		{

			currentZIndex = element.style["zIndex"];
			element.style["zIndex"] = 100000;
		}
	}
}

function SendToBack(element)
{
	if (!currentlyManipulatedObject)
	{
		element.style["zIndex"] = "";
	}
}

var isDragging = false;
var hideResizeHandle = 0;
function ShowResizeHandles(controlElementID)
{
	if (!isDragging)
	{
		clearTimeout(hideResizeHandle);
		//ResizeHandleHV
		var control = $("#" + controlElementID);
		var leftOffset = control.position().left + control.width() - 10;
		var topOffset = control.position().top + control.height() - 10;

		if (Template.GetContentType() == "EditDesign")
		{
			with ($("#ResizeHandleHV"))
			{
				attr("MasterID", controlElementID)
				attr("style", "left:" + leftOffset + "px;top:" + topOffset + "px;display:block;");
			}
		}

		with ($("#ControlNameContainer"))
		{
			var controlObject = eval("_" + controlElementID);
			//do not show the name if we're in viewing mode and the control is not editable
			if (!(Template.GetContentType() == "EditContent" && !controlObject.IsEditable()))
			{
				attr("style", "left:" + control.position().left + "px;top:" + (control.position().top - 20) + "px;display:block;");
				text(controlObject.GetName());
			}
		}
	}
}

function HideResizeHandles(controlElementID, delay)
{
	var script = "$('#ResizeHandleHV').attr('MasterID', '').attr('style', 'display:none;'); $('#ControlNameContainer').attr('style', 'display:none;');";
	if (delay == 0)
	{
		eval(script);
		return;
	}

	hideResizeHandle = setTimeout(script, delay ? delay : 1000);
}

function StartedDragging()
{
	isDragging = true;
}

function StoppedDragging()
{
	isDragging = false;
}

EventManager.AddListener("EVENT_INITIATEDRAG", EventManager.CreateEventListener("RESIZEFUNC", function ()
{
	StartedDragging();
	HideResizeHandles(null, 0);
}));

EventManager.AddListener("EVENT_ENDDRAG", EventManager.CreateEventListener("RESIZEFUNC", function ()
{
	StoppedDragging();
}));

Page.AddOnPageLoad(function ()
{
	var templateContainer = Template.GetContainer();
	var contentContainer = $("<div style='position:absolute;left:0px;top:0px;' id='MiscContainer'></div>");
	contentContainer.appendTo(templateContainer);

	var resizeHandle = document.createElement("div");
	resizeHandle.setAttribute("id", "ResizeHandleHV");
	resizeHandle.setAttribute(classAttribute, "DragableItem_ResizeHandle HorizontalVertical");
	resizeHandle.setAttribute("ResizeType", 0);
	resizeHandle.setAttribute("MasterID", "");
	contentContainer.append(resizeHandle);

	var nameContainer = $("<div></div>");
	nameContainer.attr("id", "ControlNameContainer");
	nameContainer.addClass("ControlNameToolTip");
	contentContainer.append(nameContainer);
});

//
function TemplateBaseControlClass()
{
	this.controlObject = null;
	this.contentField = null;
	this.propertyField = null;
	this.extendedPropertyField = null;
	this.editableField = null;
	this.controlID = 0;
	this.isEditingInline = false;
	this.name = "Generic control";
}

//
TemplateBaseControlClass.prototype.Initialize = function (controlElementID, controlID, contentType, controlName)
{
	this.controlObject = $get(controlElementID);
	this.controlID = controlID;
	var hiddenFields = this.controlObject.getElementsByTagName("input");
	this.propertyField = hiddenFields[0];
	this.editableField = hiddenFields[1];
	this.contentField = hiddenFields[2];
	this.extendedPropertyField = hiddenFields[3];
	this.name = controlName;

	//    EventManager.AddListener("EVENT_EDITCONTROLCONTENT", EventManager.CreateEventListener("EditControlProperties", this.OnNotify, this));
	//    EventManager.AddListener("EVENT_CONTROLCONTEXTMENU", EventManager.CreateEventListener("ControlContextMenu", this.OnNotify, this));

	if (contentType == "EditDesign")
	{
		//make the control draggable
		$("#" + controlElementID).draggable({
			//opacity: 0.5,
			cancel: ".DragableItem_ResizeHandle",
			multidrag: true,
			//helper: "clone",
			start: function (event, ui)
			{
				if (event.altKey)
				{
					clonedControlElement = $(this).clone();
					var inputs = clonedControlElement.find("input[type=hidden]");
					var idStrip = clonedControlElement.attr("id").replace(/_SpanItemBase/gi, "");
					clonedControlElement.attr("id", "CLONEDCONTROL");
					//inputs[5].value = "ClonedControl";
					//inputs[6].value = "ClonedControl";
					for (var i = 0; i < inputs.length; i++)
						inputs[i].id = inputs[i].id.replace(idStrip, "ClonedControl");

					var length = inputs.length;
					for (var i = 4; i < length; i++)
						try
						{
							//remove any non-essential inputs that may interfere
							$(inputs[i]).remove();
						} catch (e) { }

					clonedControlElement.appendTo(Template.GetContainer());

					var controlID = eval("_" + $(this).attr("id")).GetControlID();
					clonedControl = new TemplateBaseControlClass();
					clonedControl.Initialize(clonedControlElement.attr("id"), controlID);

					currentlyManipulatedObject = clonedControlElement.get(0);
					isCloning = true;
					$(".ui-multidraggable").removeClass("ui-multidraggable");
				}

				//send notifications for each selected control
				var selectedControls = $(".ui-multidraggable");
				var params = null;

				if (selectedControls.size() < 1)
					params = GetElementStyle($get(controlElementID));
				else
				{
					params = new Array();
					selectedControls.each(function ()
					{
						if ($(this).attr("id") != controlElementID)
							params.push([$(this).attr("id"), $(this).attr("style")]);
					});

					//add the dragged control aswell
					params.push([controlElementID, GetElementStyle($get(controlElementID))]);
				}
				EventManager.Notify(EventManager.CreateEvent("EVENT_INITIATEDRAG", eval("_" + controlElementID), params, null));
			},

			drag: function (event, ui)
			{
				//send notifications for each selected control
				EventManager.Notify(EventManager.CreateEvent("EVENT_DRAGGING", eval("_" + controlElementID), GetElementStyle($get(controlElementID)), null));
			},

			stop: function (event, ui)
			{
				if (isCloning)
				{
					//must be defined by the TemplateEditor page
					CloneControl(controlElementID, $("#" + controlElementID).css("left"), $("#" + controlElementID).css("top"));
					currentlyManipulatedObject = null;

					return false;
				}

				//send notifications for each selected control
				var params = null;
				var selectedControls = $(".ui-multidraggable");

				if (selectedControls.size() < 1)
					params = GetElementStyle($get(controlElementID));
				else
				{
					params = new Array();
					selectedControls.each(function ()
					{
						if ($(this).attr("id") != controlElementID)
							params.push([$(this).attr("id"), $(this).attr("style")]);
					});
					params.push([controlElementID, GetElementStyle($get(controlElementID))]);
				}

				eval("_" + controlElementID).SetProperties(GetElementStyle($get(controlElementID)), true);
				EventManager.Notify(EventManager.CreateEvent("EVENT_ENDDRAG", eval("_" + controlElementID), params, null));
			}
		});
		//$("#" + controlElementID).resizable();
		//this.CreateResizeHandles(controlID, controlElementID);
	}

	if (contentType != "View")
	{
		$(this.controlObject).mouseenter(function ()
		{
			ShowResizeHandles(controlElementID);
			BringToFront($get(controlElementID));
		}).mouseleave(function (event)
		{
			HideResizeHandles(controlElementID);
			SendToBack($get(controlElementID));
		});
	}

	if ($("#" + controlElementID).attr("CM"))
	{
		$("#" + controlElementID).bind("contextmenu", function (event)
		{
			eval($(this).attr("CM"));
			//event.stopPropagation();
			return false;
		});
	}

	if (this.OnInitialized)
		this.OnInitialized();
}

TemplateBaseControlClass.prototype.CreateResizeHandles = function (controlID, controlElementID)
{
	//	var contentContainer = this.controlObject.getElementsByTagName("td")[0];

	//	var resizeHandle = document.createElement("div");
	//	//	resizeHandle.setAttribute("id", "ResizeHandleH" + controlID);
	//	//	resizeHandle.setAttribute(classAttribute, "DragableItem_ResizeHandle Horizontal");
	//	//	resizeHandle.setAttribute("ResizeType", resizeType_Horizontal);
	//	//	resizeHandle.setAttribute("MasterID", controlElementID);
	//	//	contentContainer.appendChild(resizeHandle);
	//	//	resizeHandle.style.left = ($($get(controlElementID)).outerWidth() - $(resizeHandle).outerWidth()) + "px";
	//	//	resizeHandle.style.top = ($($get(controlElementID)).outerHeight() - $(resizeHandle).outerHeight()/2) + "px";

	//	//	resizeHandle = document.createElement("div");
	//	//	resizeHandle.setAttribute("id", "ResizeHandleV" + controlID);
	//	//	resizeHandle.setAttribute(classAttribute, "DragableItem_ResizeHandle Vertical");
	//	//	resizeHandle.setAttribute("ResizeType", resizeType_Vertical);
	//	//	resizeHandle.setAttribute("MasterID", controlElementID);
	//	//	contentContainer.appendChild(resizeHandle);

	//	//	resizeHandle = document.createElement("div");
	//	resizeHandle.setAttribute("id", "ResizeHandleHV" + controlID);
	//	resizeHandle.setAttribute(classAttribute, "DragableItem_ResizeHandle HorizontalVertical");
	//	resizeHandle.setAttribute("ResizeType", resizeType_HorizontalVertical);
	//	resizeHandle.setAttribute("MasterID", controlElementID);
	//	contentContainer.appendChild(resizeHandle);
}

//MUST BE OVERRIDEN!!
TemplateBaseControlClass.prototype.GetEditorControlID = function () { return null; }
TemplateBaseControlClass.prototype.GetCustomPropertyControlID = function () { return null; }
//Optional overrides
TemplateBaseControlClass.prototype.ContentUpdated = function () { /*"NOT IMPLEMENTED (::ContentUpdated)";*/ }
TemplateBaseControlClass.prototype.PropertiesUpdated = function () { /*"NOT IMPLEMENTED (::PropertiesUpdated)";*/ }
//DEPRECATED - USE ExtendedPropertiesUpdated instead
TemplateBaseControlClass.prototype.CustomPropertiesUpdated = function () { this.ExtendedPropertiesUpdated(); }
TemplateBaseControlClass.prototype.ExtendedPropertiesUpdated = function () { }
TemplateBaseControlClass.prototype.GetLabelContent = function (element) { return $(element).html(); }

//
TemplateBaseControlClass.prototype.GetControlID = function () { return this.controlID; }
TemplateBaseControlClass.prototype.GetControlObject = function () { return this.controlObject; }
//
TemplateBaseControlClass.prototype.IsEditable = function () { return parseInt(this.editableField.value) == 1; }
TemplateBaseControlClass.prototype.IsDeleted = function () { return $(this.controlObject).css("display").toLowerCase() == "none"; }
TemplateBaseControlClass.prototype.IsInlineEditing = function () { return this.isEditingInline; }
TemplateBaseControlClass.prototype.SetEditable = function (boolValue) { $(this.editableField).val(boolValue ? "1" : "0"); }
TemplateBaseControlClass.prototype.ToggleEditable = function () { this.SetEditable(!(parseInt($(this.editableField).val()) == 1)); }
//
TemplateBaseControlClass.prototype.GetContent = function () { return $(this.contentField).val(); }
TemplateBaseControlClass.prototype.SetContent = function (newContent)
{
	var classObject = this;
	//
	EventManager.Notify(EventManager.CreateEvent("EVENT_CONTROLCONTENTBEFORECHANGE", classObject, $(this.contentField).val(), null));
	$(this.contentField).val(newContent);
	EventManager.Notify(EventManager.CreateEvent("EVENT_CONTROLCONTENTCHANGED", classObject, newContent, null));

	//
	this.ContentUpdated();
}

TemplateBaseControlClass.prototype.GetName = function ()
{
	return this.name;
}

//
TemplateBaseControlClass.prototype.GetProperties = function () { return this.propertyField.value; }
TemplateBaseControlClass.prototype.SetProperties = function (newProperties, bypassUndoHistory)
{
	var classObject = this;
	//
	if (!bypassUndoHistory)
		EventManager.Notify(EventManager.CreateEvent("EVENT_CONTROLPROPERTIESBEFOREUPDATE", classObject, $(classObject.propertyField).val() + ";", null));

	this.propertyField.value = newProperties;

	//
	$(this.controlObject).attr("style", newProperties);

	try
	{
		//defined in TemplateBaseControlExtensions.js
		SetScroll(eval(this.controlObject.id + "_Scrollable"), this.controlObject.style);
	} catch (err) { }

	//then everything else that signed up for the event
	if (!bypassUndoHistory)
		EventManager.Notify(EventManager.CreateEvent("EVENT_CONTROLPROPERTIESUPDATED", classObject, newProperties + ";", null));

	this.PropertiesUpdated();
}

//DEPRECATED - Use GetExtendedProperties instead
TemplateBaseControlClass.prototype.GetCustomProperties = function () { return this.GetExtendedProperties(); }
TemplateBaseControlClass.prototype.GetExtendedProperties = function () { return this.extendedPropertyField.value; }

//DEPRECATED - Use SetExtendedProperties instead
TemplateBaseControlClass.prototype.SetCustomProperties = function (newProperties)
{
	this.SetExtendedProperties(newProperties);
}

TemplateBaseControlClass.prototype.SetExtendedProperties = function (newProperties)
{
	var classObject = this;
	//
	EventManager.Notify(EventManager.CreateEvent("EVENT_CONTROLCUSTOMPROPERTIESBEFOREUPDATE", classObject, $(classObject.extendedPropertyField).val(), null));

	$(this.extendedPropertyField).val(newProperties);

	//
	EventManager.Notify(EventManager.CreateEvent("EVENT_CONTROLCUSTOMPROPERTIESCHANGED", classObject, newProperties, null));
	this.ExtendedPropertiesUpdated();
}

TemplateBaseControlClass.prototype.GetWidth = function () { return $(this.controlObject).css("width"); }
TemplateBaseControlClass.prototype.SetWidth = function (value) { $(this.controlObject).css("width", value); }
TemplateBaseControlClass.prototype.GetHeight = function () { return $(this.controlObject).css("height"); }
TemplateBaseControlClass.prototype.SetHeight = function (value) { $(this.controlObject).css("height", value); }

TemplateBaseControlClass.prototype.GetOffsetY = function () { return $(this.controlObject).css("top"); }
TemplateBaseControlClass.prototype.SetOffsetY = function (value) { $(this.controlObject).css("top", value); }
TemplateBaseControlClass.prototype.GetOffsetX = function () { return $(this.controlObject).css("left"); }
TemplateBaseControlClass.prototype.SetOffsetX = function (value) { $(this.controlObject).css("left", value); }

//
TemplateBaseControlClass.prototype.HasContentChanged = function (value) { return value != this.GetContent(); }
TemplateBaseControlClass.prototype.HasPropertiesChanged = function (value) { return value != this.GetProperties(); }
TemplateBaseControlClass.prototype.HasExtendedPropertiesChanged = function (value) { return value != this.GetExtendedProperties(); }

//CCM Customization
//
var module = "";
var moduleParameters = "";

var co = null;
var wh = null;

///
/// Called by the editor window when it has finished loading
///	The contents is set by this function
///
function EditContentWindowLoaded()
{
	//alert('EditContentWindowLoaded');
	var content = co.GetCustomContent ? co.GetCustomContent() : co.GetContent();
	if (typeof content == "string")
		content = unescape(content);

	wh.SetData(content);
}

///
/// Resets the global editor window parameters
///
function CancelEditing()
{
	wh = null;
	co = null;
}

///
/// Called by the editor window when the user wants to save their changes
///
function FinishedEditingContent(classObject, content)
{
	//alert('FinishedEditingContent');
	if (content != null)
	{
		classObject = eval("_" + classObject);
		//Is custom processing of the content needed?
		if (classObject.PreProcessEditorContent)
			content = classObject.PreProcessEditorContent(content);
		if (classObject.HasContentChanged(content))
			classObject.SetContent(content);
	}

	wh = null;
	co = null;
}

///
///
///
function EditAdvancedPropertiesWindowLoaded()
{
	var properties = co.GetCustomExtendedProperties ? co.GetCustomExtendedProperties() : co.GetExtendedProperties();
	if (typeof properties == "string")
		properties = unescape(properties);
	wh.SetData(properties);
}

function FinishedEditingAdvancedProperties(classObject, content)
{
	if (content != null)
	{
		classObject = eval("_" + classObject);
		if (classObject.HasExtendedPropertiesChanged(content))
			classObject.SetCustomProperties(content);
	}
	wh = null;
	co = null;
}

///
///
///
TemplateBaseControlClass.prototype.InlineEditContent = function (saveChanges)
{
	var label = embeddedControl_PresentationControls[this.controlObject.id];

	if (label != null)
	{
		this.isEditingInline = label.contentEditable = !this.isEditingInline;
		label.focus();
		if (!this.isEditingInline)
		{
			if (saveChanges != true)
			//label.innerHTML = this.GetContent();	//restore the label to its previous state
				this.SetContent(this.GetContent(), true);
			else
			{
				var content = this.GetLabelContent(label); 		//the label now contains the updated text

				if (this.PreProcessEditorContent)
					content = this.PreProcessEditorContent(content);
				if (this.HasContentChanged(content))
					this.SetContent(content);
			}
		}
	}
}

//
TemplateBaseControlClass.prototype.EditContent = function ()
{
	var top = window.frameElement.parentNode.offsetTop + 146;
	var left = window.frameElement.parentNode.offsetLeft + 60;
	var width = 100, height = 100;

	if (this.GetEditorControlID() == "HTMLEditor")
		width = parseInt(document.documentElement.offsetWidth) - 60;

	//    var content = this.GetCustomContent ? this.GetCustomContent() : this.GetContent();
	//var result = window.showModalDialog("/DotNet/TemplateModule/EditControlContent.aspx?ControlID=" + this.GetEditorControlID() + "&Module=" + module + "&" + moduleParameters, content, "center:0;dialogLeft:" + left + "px;dialogTop:" + top + "px;status:1;dialogWidth:" + width + "px;dialogHeight:100px;unadorned:1;scroll:0;resizable:1");

	if (wh != null && !wh.closed)
	{
		if (confirm("Varning! Du har redan ett redigeringsfönster aktivt för en kontroll, om du öppnar ett nytt så kommer ändringarna i det gamla fönstret att gå förlorade.\nVill du fortsätta?"))
		{
			try
			{
				wh.close();
			}
			catch (err) { }
		}
		else
		{
			wh.focus();
			return;
		}

		wh = null;
	}
	co = this;
	var resizable = this.GetEditorControlID() == "HTMLEditor" ? 1 : 0;
	wh = window.open("/DotNet/TemplateModule/Web/EditControlContent.aspx?LoadFunc=EditContentWindowLoaded&SaveFunc=FinishedEditingContent&ControlID=" + this.GetEditorControlID() + "&Module=" + module + "&" + moduleParameters + "&TemplateControlID=" + this.controlObject.id, "", "location=0, toolbar=0, menubar=0, padding=0, scrollbars=0, status=1, resizable=" + resizable + ", left=" + left + ", top=" + top + ", width=" + width + ", height=" + height);
}

//
TemplateBaseControlClass.prototype.EditProperties = function () { EventManager.Notify(EventManager.CreateEvent("EVENT_SHOWPROPERTIES", this.controlObject, null, null)); }

//
TemplateBaseControlClass.prototype.EditCustomProperties = function ()
{
	//	var top = window.frameElement.offsetTop + 46;
	//	var left = window.frameElement.parentNode.offsetLeft + 30;
	//    var result = window.showModalDialog("/DotNet/TemplateModule/EditControlContent.aspx?ControlType=CustomProperties&ControlID=" + this.GetCustomPropertyControlID(), this.GetCustomProperties(), "center:0;dialogLeft:" + left + "px;dialogTop:" + top + "px;status:1;dialogWidth:100px;dialogHeight:100px;unadorned:1;scroll:0;resizable:0");
	//    if (result != null && result != this.GetCustomProperties())
	//        this.SetCustomProperties(result);

	var top = window.frameElement.offsetTop + 46;
	var left = window.frameElement.parentNode.offsetLeft + 30;
	var width = 100, height = 100;

	//    var content = this.GetCustomContent ? this.GetCustomContent() : this.GetContent();
	//var result = window.showModalDialog("/DotNet/TemplateModule/EditControlContent.aspx?ControlID=" + this.GetEditorControlID() + "&Module=" + module + "&" + moduleParameters, content, "center:0;dialogLeft:" + left + "px;dialogTop:" + top + "px;status:1;dialogWidth:" + width + "px;dialogHeight:100px;unadorned:1;scroll:0;resizable:1");
	if (wh != null)
		wh.close();
	co = this;
	//var resizable = this.GetCustomPropertyControlID() == "MenuStyleBuilder" ? 1 : 0;
	var resizable = 0;
	wh = window.open("/DotNet/TemplateModule/Web/EditControlContent.aspx?LoadFunc=EditAdvancedPropertiesWindowLoaded&SaveFunc=FinishedEditingAdvancedProperties&ControlType=CustomProperties&ControlID=" + this.GetCustomPropertyControlID() + "&Module=" + module + "&" + moduleParameters + "&TemplateControlID=" + this.controlObject.id, "", "location=0, toolbar=0, menubar=0, padding=0, scroll=0, status=1, resizable=" + resizable + ", left=" + left + ", top=" + top + ", width=" + width + ", height=" + height);
	//    
}
