<!--




function FreeText_CreateObject(BoxID,BBCode,HTML)
{
	BBCode = UnXML(BBCode);
	HTML = UnXML(HTML);
	
	var BoxObject = Boxes.Objects[BoxID];

	if (!BoxObject.FreeText)
	{//If object not initialized yet...
		BoxObject.FreeText = new Object; //Creating a FreeText instance inside the box if not existing already
		
		BoxObject.FreeText.Save_Handler = new XMLHTTPEngine("FreeText_Save","","POST"); //Creates FreeTextSave Ajax Handler for the box
		BoxObject.FreeText.Save_Handler.onLoad = FreeText_Save_Handler_onLoad; //Links the onload function
		BoxObject.FreeText.Save_Handler.BoxID = BoxID; //Saves the BoxID
		BoxObject.FreeText.Save_Handler.BoxObject = BoxObject; //Saves the BoxID
		
		BoxObject.FreeText.Text = document.createElement("DIV");
		BoxObject.FreeText.Text.style.width="100%";
		BoxObject.FreeText.Text.style.display="";
		BoxObject.FreeText.Text.ondblclick=FreeText_OnClick;
		BoxObject.Content.appendChild(BoxObject.FreeText.Text);

		BoxObject.FreeText.EditTool = document.createElement("TEXTAREA");
		BoxObject.FreeText.EditTool.style.width="100%";
		BoxObject.FreeText.EditTool.style.height="100px";
		BoxObject.FreeText.EditTool.style.display="none";
		BoxObject.Content.appendChild(BoxObject.FreeText.EditTool);

		BoxObject.FreeText.Tools = document.createElement("CENTER");
		BoxObject.FreeText.Tools.style.width="100%";
		BoxObject.FreeText.Tools.style.display="none";
		BoxObject.FreeText.Tools.innerHTML = BBCode_CreateTools(BoxID);
		BoxObject.Content.appendChild(BoxObject.FreeText.Tools);
		BoxObject.FreeText.ActionBar = document.createElement("CENTER");
		BoxObject.FreeText.ActionBar.style.width="100%";
		BoxObject.FreeText.ActionBar.style.display="none";

			BoxObject.FreeText.CancelButton = document.createElement("INPUT");
			BoxObject.FreeText.CancelButton.type="button";
			BoxObject.FreeText.CancelButton.value="Cancel";
			BoxObject.FreeText.CancelButton.onclick=FreeText_CancelEdit;
			BoxObject.FreeText.ActionBar.appendChild(BoxObject.FreeText.CancelButton);
			
			BoxObject.FreeText.SaveButton = document.createElement("INPUT");
			BoxObject.FreeText.SaveButton.type="button";
			BoxObject.FreeText.SaveButton.value="Save";
			BoxObject.FreeText.SaveButton.onclick=FreeText_SaveEdit;
			BoxObject.FreeText.ActionBar.appendChild(BoxObject.FreeText.SaveButton);

		BoxObject.Content.appendChild(BoxObject.FreeText.ActionBar);


		//Assigns edit function
		BoxObject.EditBox = FreeText_Edit;
	}


	BBCode_RegisterTools(BoxObject,BoxObject.FreeText.EditTool); //Registering the BBCodeTool for that box
	
	//Resets visuals
	BoxObject.FreeText.Text.style.display="";
	BoxObject.FreeText.EditTool.style.display="none";
	BoxObject.FreeText.Tools.style.display="none";
	BoxObject.FreeText.ActionBar.style.display="none";

	Box_UpdateLoadStatus(BoxObject,"");
	BoxObject.FreeText.Text.innerHTML=HTML;

	BoxObject.FreeText.EditTool.value = BBCode;
	BoxObject.FreeText.CurrentBBCode = BBCode;

	BoxObject.FreeText.EditMode = false;
}


function FreeText_OnClick(Event)
{
	FreeText_Edit(Boxes.GetContainingBox(this));
	return(false);
}



function FreeText_Edit(BoxObject)
{
	if (!BoxObject.FreeText.EditMode)
	{
		//Entering edit mode
		BoxObject.FreeText.EditMode = true;
		
		BoxObject.FreeText.Text.style.display="none";

		BoxObject.FreeText.EditTool.style.display="";
		BoxObject.FreeText.Tools.style.display="";
		BoxObject.FreeText.ActionBar.style.display="";


		BoxObject.FreeText.EditTool.value = BoxObject.FreeText.CurrentBBCode;

		BoxObject.FreeText.EditTool.focus();
	}
}



function FreeText_CancelEdit(Event)
{
	var BoxObject = Boxes.GetContainingBox(this);
	
	if (BoxObject.FreeText.EditMode)
	{
		//Entering edit mode
		BoxObject.FreeText.EditMode = false;
		
		BoxObject.FreeText.Text.style.display="";

		BoxObject.FreeText.EditTool.style.display="none";
		BoxObject.FreeText.Tools.style.display="none";
		BoxObject.FreeText.ActionBar.style.display="none";
	}
	
	EditBox_Finished(BoxObject.BoxID);

	//Free up memory
	BoxObject = null;

	return(false);
}




function FreeText_SaveEdit(Event)
{
	var BoxObject = Boxes.GetContainingBox(this);
	
	if (BoxObject.FreeText.EditMode)
	{
		//Entering edit mode
		BoxObject.FreeText.EditMode = false;
		
		Debug(BoxObject.FreeText.EditTool.value);
//		BoxObject.FreeText.Text.innerHTML=FreeText_ProcessBBCode(BoxObject.FreeText.EditTool.value);
		Box_UpdateLoadStatus(BoxObject,"updating");
//		BoxObject.FreeText.Text.innerHTML="<center>Updating...</center>";
		BoxObject.FreeText.Text.style.display="";
		BoxObject.FreeText.EditTool.style.display="none";
		BoxObject.FreeText.Tools.style.display="none";
		BoxObject.FreeText.ActionBar.style.display="none";

		//Storing the current HTML and BBCode as backup
		BoxObject.FreeText.CurrentHTML = BoxObject.FreeText.Text.innerHTML;
		BoxObject.FreeText.CurrentBBCode = BoxObject.FreeText.EditTool.value;
		
		FreeText_Save_Server(BoxObject.FreeText.Save_Handler,BoxObject.FreeText.CurrentBBCode);		
	}
	
	EditBox_Finished(BoxObject.BoxID);

	//Free up memory
	BoxObject = null;

}








FreeText_Save_Handler_onLoad = function(Handler)
{//Function executed upon response from server
	function Save_Revert(Reason)
	{//In case of failure to reorder box - Revert/Alert about box reorder failure
		window.alert(Reason); //Alerting the failure reason
		Box_UpdateLoadStatus(Handler.BoxObject,"");
		Handler.BoxObject.Text.innerHTML = Handler.BoxObject.CurrentHTML;
	}
	
	var Response = Handler.getXML();
	if (!Response)
	{//Invalid result retuned
		Save_Revert("No server response");
		Response = null; //Free up memory
		return(false);
	}
	
	var XMLroot = Response.getElementsByTagName('root').item(0);
	Response = null; //Free up memory

	if (!XMLroot)
	{//Invalid result retuned
		Save_Revert("Invalid server XML response");
		XMLroot = null; //Free up memory
		return(false);
	} 
	
	var Status = XMLroot.getElementsByTagName('status').item(0);
	if (!Status)
	{//Invalid result retuned
		Save_Revert("No status reported");
		Status = null; XMLroot = null; //Free up memory
		return(false);
	} 

	var StatusID = Status.getElementsByTagName('status_id').item(0); 
	StatusID = StatusID?StatusID.childNodes.item(0).data:0;
	
	var StatusMessage = Status.getElementsByTagName('status_message').item(0); 
	StatusMessage = StatusMessage?StatusMessage.childNodes.item(0).data:'Unknown';
	
	if (StatusID != 1)
	{
		Save_Revert(StatusMessage);
		StatusID = null; StatusMessage = null; Status = null; XMLroot = null; //Free up memory
		return(false);
	}
	
	//Free up memory
	StatusID = null;
	StatusMessage = null;
	Status = null;

	//Else

	var DataSet = XMLroot.getElementsByTagName('data').item(0);
	if (!DataSet)
	{//Failed to receive data from server regarding the renaming box - Unexpected error - Reverting rename
		Save_Revert("No data reported");
		DataSet = null; Response = null; //Free up memory
		return(false);
	}
	
	var BoxID = DataSet.getElementsByTagName('box_id').item(0);
	BoxID = (BoxID.childNodes.item(0))?parseInt(BoxID.childNodes.item(0).data):false;

	var BoxContent = DataSet.getElementsByTagName('box_content').item(0);
	BoxContent = MergeChildrenItems(BoxContent.childNodes);

	var BoxScript = DataSet.getElementsByTagName('box_script').item(0);
	BoxScript = MergeChildrenItems(BoxScript.childNodes);

	var BoxPrerequisiteScripts = DataSet.getElementsByTagName('box_prerequisitescripts').item(0);
	BoxPrerequisiteScripts = (BoxPrerequisiteScripts.childNodes.item(0))?BoxPrerequisiteScripts.childNodes.item(0).data:"";

	var BoxScriptCode = DataSet.getElementsByTagName('box_scriptcode').item(0);
	BoxScriptCode = MergeChildrenItems(BoxScriptCode.childNodes);

	if (!BoxID)
	{//Bad/missing BoxID or title - Unexpected error - reverts rename
		Save_Revert("Missing Box details in response");
		BoxID = null; DataSet = null; XMLroot = null; //Free up memory
		return(false);
	}
	else
	{
		Box_UpdateLoadStatus(Handler.BoxObject,"");
		eval(BoxScriptCode);
	};
	
	//Free up memory
	BoxID = null;
	BoxContent = null;
	BoxScript = null;
	BoxScriptCode = null;
	DataSet = null;
	XMLroot = null;
};




function FreeText_Save_Server(Handler,Content)
{//Call server to with Box Order command via Ajax
 //Allow multiple saves - it's up to the user
	try 
	{
		Handler.URL='/cgi-bin/profile/boxes/freetext.pl?usk='+USK+'&act=save&bid='+Handler.BoxID;
		Handler.resetData();
		Handler.addData("bbcode",Content);
		Handler.Execute(); //Execute server call
	}
	catch (e)
	{//Error - Could not call server
		//(?)
	};
};









function FreeText_Init()
{
	if (!Boxes.LoadedScripts['freetext'])
	{
		Boxes.LoadedScripts['freetext'] = new Object;
		Boxes.LoadedScripts['freetext'].StatusID=1; //Marking script as load-pendin
		Boxes.LoadedScripts['freetext'].DelayedCommands = "";
	}
	else
	{
		Boxes.LoadedScripts['freetext'].StatusID=1; //Flagging script as loaded
		//Debug(Boxes.LoadedScripts['freetext'].DelayedCommands);
		eval(Boxes.LoadedScripts['freetext'].DelayedCommands);//Executes the delayed commands
	}
}



FreeText_Init();


-->
