function tEditor() {
	var EditItem= "";
	var ToolItem= "";
	var WritePtr	= "";
	var ReadPtr= "";

this.Bold= function(Active) {
	if (EditItem.length && Active) {
		document.execCommand('bold', false, null);
		}
  }

this.Italic= function(Active) {
	if (EditItem.length && Active) {
		document.execCommand('italic', false, null);
		}
  }

this.Underline= function(Active) {
	if (EditItem.length && Active) {
		document.execCommand('underline', false, null);
		}
  }
  
this.Left= function(Active) {
	if (EditItem.length && Active) {
	  document.execCommand('justifyleft', false, null);
		}
  }

this.Center= function(Active) {
	if (EditItem.length && Active) {
	  document.execCommand('justifycenter', false, null);
		}
  }

this.Right= function(Active) {
	if (EditItem.length && Active) {
	  document.execCommand('justifyright', false, null);
		}
  }
  
this.Foreground= function(Foreground,Active) {
	if (EditItem.length && Active) {
	  document.execCommand('forecolor', false, Foreground);
		}
  }

this.Background= function(Background,Active) {
	if (EditItem.length && Active) {
	  document.execCommand('backcolor', false, Background);
		}
  }

this.Link= function(Active) {
	var URL;
	
	if (EditItem.length && Active) {
		URL= prompt("Enter the URL", "");
	
		if (URL && URL.length) 
  		document.execCommand('createlink', false, URL);
		}
	}
   
this.Save= function(Active) {
	if (EditItem.length && Active) {
		this.Write();
		}
	}

this.Close= function(Active) {
	if (EditItem.length && Active) {
		this.Read();
		}
	}

this.BorderOn= function(Item) {
	if (!EditItem.length &&
		 Security.Access(Item.id)) {
		Item.style.borderWidth= "1px";
		}
	}
this.BorderOff= function(Item) {
	if (Security.Access(Item.id)) {
		Item.style.borderWidth= "0px";
		}
	}
	
// Functions to control read/write operations

this.ReadFile= function(Name) {		// Read the data from the file
	var	xmlhttp;
	var	Message= 'dynamic/' + Name;	// Filename to read

	if (window.XMLHttpRequest) {
		xmlhttp= new XMLHttpRequest();
		}
	else {
		xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");
		}

	xmlhttp.onreadystatechange = function() {};
	xmlhttp.open("POST", WebDirectory + "cgi/editread.cgi", false);
	xmlhttp.setRequestHeader("Content-Type", "text/xml");
	xmlhttp.setRequestHeader("Content-length", Message.length);
	xmlhttp.send(Message);

	return xmlhttp.responseText;
	}

this.WriteFile= function(Name, Data) {	// Write the data to the file
	var	xmlhttp;
	var	Message;
	
// First field is file path, rest is file contents

	if (EditItem.length) {		// Ensure we really are editing
		Message= 'dynamic/' + Name + '`' + Data;

		if (window.XMLHttpRequest) {
			xmlhttp= new XMLHttpRequest();
			}
		else {
			xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");
			}

		xmlhttp.onreadystatechange = function(){};
		xmlhttp.open("POST", WebDirectory + "cgi/editwrite.cgi", true);
		xmlhttp.setRequestHeader("Content-Type", "text/xml");
		xmlhttp.setRequestHeader("Content-length", Message.length);
		xmlhttp.send(Message);
		}
	}

this.ReadDB= function(Table, ID) {		// Read the data from the DB Table
	var	xmlhttp;
	var	Message= Table + "`" + ID;

	if (window.XMLHttpRequest) {
		xmlhttp= new XMLHttpRequest();
		}
	else {
		xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");
		}

	xmlhttp.onreadystatechange = function() {};
	xmlhttp.open("POST", WebDirectory + "cgi/editreaddb.cgi", false);
	xmlhttp.setRequestHeader("Content-Type", "text/xml");
	xmlhttp.setRequestHeader("Content-length", Message.length);
	xmlhttp.send(Message);

	return xmlhttp.responseText;	
	}

this.WriteDB= function(Table, ID, Data) {	// Write the data to the DB Table
	var	xmlhttp;
	
	if (EditItem.length) {		// Ensure we really are editing
		Message= Table + '`' + ID + '`' + Data;

		if (window.XMLHttpRequest) {
			xmlhttp= new XMLHttpRequest();
			}
		else {
			xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");
			}

		xmlhttp.onreadystatechange = function(){};
		xmlhttp.open("POST", WebDirectory + "cgi/editwritedb.cgi", true);
		xmlhttp.setRequestHeader("Content-Type", "text/xml");
		xmlhttp.setRequestHeader("Content-length", Message.length);
		xmlhttp.send(Message);

		dummy= xmlhttp.responseText;
		}
	}

// Position function: Turn on the editing of the item specified

this.On= function(Item, Tools) {
	var Element;
	var	X= 0, Y= 0;
		
// Determine the position of the edit item

	if (!EditItem.length && 
		 Security.Access(Item.id)) {
		if ((Element= Item) && Element.offsetParent) {
			do {
				X += Element.offsetLeft;
				Y += Element.offsetTop;
				} while (Element= Element.offsetParent);
			}

		if (Element= document.getElementById(Tools)) {
			ToolItem= Tools;
			Element.style.left= X;
			Element.style.top= Y - 35;
			Element.style.visibility= "visible";
			}

		Item.style.borderWidth= "0px";
		Item.contentEditable= true;
		Item.designMode="on";

		EditItem= Item.id;
		}
	}

this.OnX= function(Item, Tools) {
	var Element;
	var	X= 0, Y= 0;
		
// Determine the position of the edit item

	if (!EditItem.length) {
		if ((Element= Item) && Element.offsetParent) {
			do {
				X += Element.offsetLeft;
				Y += Element.offsetTop;
				} while (Element= Element.offsetParent);
			}

		if (Element= document.getElementById(Tools)) {
			ToolItem= Tools;
			Element.style.left= X;
			Element.style.top= Y - 35;
			Element.style.visibility= "visible";
			}

		Item.style.borderWidth= "0px";
		Item.contentEditable= true;
		Item.designMode="on";

		EditItem= Item.id;
		}
	}

this.Off= function() {	// Turn off editing
	var Element;
	
	if (Element = document.getElementById(EditItem)) {
		Element.contentEditable= false;
		Element.designMode="off";

		if (Element= document.getElementById(ToolItem)) 
			Element.style.visibility= "hidden";

		EditItem= "";

		Login.Reset();
		Security.Reset();
		}
	}
// Functions called by edit areas for file-based access

this.Read= function() {
	eval(this.ReadPtr);

	this.Off();
	}
this.Write= function() {
	eval(this.WritePtr);
		
	this.Off();
	}

this.State= function(Activating) {
	Login.Complete();

	if (Activating) {
		if (!Login.Valid()) {
			Security.Reset();
			Login.Reset();
			}
		}
	else {
		Security.Reset();
		Login.Reset();
		}
	}
}

Editor= new tEditor();
